Skip to content

RecycleView lascia uno spazio vuoto in basso a causa della barra degli strumenti

Questa domanda può essere affrontata in vari modi, ma in questo caso vi mostriamo la risposta più completa secondo noi.

Soluzione:

Credo che la barra degli strumenti CoordinatorLayout (forse il AppBarLayout o CollapsingToolbarLayout - non sono sicuro di quale componente) sta registrando l'altezza errata del componente CollapsingToolbarLayout a causa della barra degli strumenti appiccicosa. Il comportamento è diverso se gli elementi vengono aggiunti prima o dopo il layout iniziale.

Provate quanto segue:

  1. Rimuovere android:layout_marginBottom="72dp" dall'XML per l'elemento RecyclerView.
  2. Aggiungere android:minHeight="72dp" all'XML per CollapsingToolbarLayout

Poiché la barra degli strumenti adesiva è impostata a 72dpè corretto usare minHeight impostato su 72dp.

Se avete problemi con questo, scrivete qui.


Ecco una rapida dimostrazione del layout utilizzando un elemento NestedScrollView e le modifiche di cui sopra.

Aggiornamento: Ho risolto questo problema utilizzando RecyclerView che mostra lo stesso problema. Il progetto demo che mostra il problema e la soluzione è su GitHub.

enter image description here

Ecco il codice:

MainActivity.java

public class MainActivity extends AppCompatActivity {  
    // Set to true to break the layout; false for it to work.  
    // The setting of this flag should only matter for the 
    // layout activity_not_working.  
    private boolean mBreakIt = true;  

    //    private int mLayoutToUse = R.layout.activity_not_working;  
    private int mLayoutToUse = R.layout.activity_working;  

    private LinearLayout mLayout;  

    @Override  
  protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(mLayoutToUse);  

        mLayout = findViewById(R.id.linearLayout);  
        if (mBreakIt) {  
            mLayout.post(new Runnable() {  
                @Override  
  public void run() {  
                    addViews();  
                }  
            });  
        } else {  
            addViews();  
        }  
    }  

    private void addViews() {  
        for (int i = 0; i < 50; i++) {  
            TextView tv = new TextView(MainActivity.this);  
            tv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,  
                    ViewGroup.LayoutParams.WRAP_CONTENT));  
            tv.setText("TextView #" + (i + 1));  
            mLayout.addView(tv);  
        }  
    }  
}

attività_lavorativa.xml



    

        

            

            
            

                

                    

                    

                

            

        

    

    
    
    

    

        

            

            

            

            

        
    


attività_non_lavorativa.xml



    

        

            

            
            

                

                    

                    

                

            

        

    

    
    
    

    

        

            

            

            

            

        
    


Il RecyclerView è solo calcolata in modo errato, quando si inserisce lo scroll. questi due diversi esempi hanno solo aggiunto confusione alla domanda, senza il minimo Java codice fornito.

è sufficiente rimuovere questa riga dal file RecyclerView:

android:layout_marginBottom="72dp"

questo attributo è poco utile, perché è il valore predefinito:

android:visibility="visible"

non impostare l'attributo RecyclerView come questo:

android:layout_height="match_parent"

ma far sì che riempia lo spazio disponibile:

android:layout_height="0dp"
android:layout_weight="1.00"

in modo che il RecyclerView si inserisca sempre, nel caso in cui sia presente una barra degli strumenti, indipendentemente dal fatto che sia presente o meno - questa barra degli strumenti non dovrebbe essere impostata come appiccicosa, perché questo è ciò che richiede di "aggiustare" a metà il layout. una BottomNavigationView potrebbe eventualmente essere utile in questo caso, a seconda di ciò che la barra degli strumenti potrebbe essere utile: CoordinatorBehaviorExample, che avrebbe dovuto essere attribuito, dato che la licenza lo richiede.

Suppongo che ci possa essere un problema durante l'aggiunta di nuovi dati e la notifica dell'adattatore.

Si dovrebbe cambiare da notifyDataSetChanged() a notifyItemInserted(index).

Più documentazione su notifyItemInserted(index) qui.

Spero che sia utile.



Utilizzate il nostro motore di ricerca

Ricerca
Generic filters

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.