Skip to content

CollapsingToolbarLayout non collassa quando la softkeyboard è visibile

Questo team di esperti, dopo diversi giorni di lavoro e raccolta dati, ha ottenuto i dati necessari, speriamo che ti siano utili nel tuo progetto.

Soluzione:

Ho usato le linee di codice qui sotto nel file xml e ha funzionato in questo modo sia quando la softkeyboard è visibile che quando è scomparsa




    

        

            

                

            

        

        

            

                

                

                

                

                

            

        

    


Inoltre è possibile controllare il processo di collasso/espansione di AppBarLayout nella propria attività con questo listener:

appbar_layout.addOnOffsetChangedListener(object : AppBarLayout.OnOffsetChangedListener {
            override fun onOffsetChanged(p0: AppBarLayout?, p1: Int) {
                if (Math.abs(p1) - appbar_layout.totalScrollRange == 0) {
                    Log.d("tag", "Collapsed")
                } else {
                    Log.d("tag", "Expanded")
                }
            }
        })

Penso che la causa sia l'utilizzo di AppBarLayout in un xml personalizzato.

AppBarLayout deve essere un figlio diretto di CoordinatorLayout affinché lo scorrimento e il collasso del layout funzionino come ci si aspetta. (Vedere documentazione di AppBarLayout.)

Questa vista dipende molto dall'essere usata come figlio diretto di un CoordinatorLayout. Se si usa AppBarLayout all'interno di un gruppo di viste diverso, la maggior parte delle sue funzionalità non funzionerà.

Ecco come appare il layout attualmente codificato. (Questo è tratto dal file Ispettore layout.)

enter image description here

Come si può vedere, AppBarLayout non è un figlio diretto di CoordinatorLayout ma è un figlio di ExpandedToolbar che è, di per sé, un elemento AppBarLayout.

Per risolvere questo problema, è necessario modificare expanded_toolbar.xml con il seguente:




    
    
    
    
    

    

        

    

    

Come si può vedere, ho rimosso AppBarLayout commentandolo. Ora, quando si esegue l'applicazione, si vede la seguente gerarchia:

enter image description here

Qui si può notare che Barra degli strumenti espansa che è in realtà un elemento AppBarLayout è un figlio diretto dell'elemento CoordinatorLayout. Funziona. Ecco un'immagine. Non ho implementato l'intero layout personalizzato, ma solo quanto basta per la dimostrazione.

enter image description here

Ecco il layout principale aggiornato:

attività_principale.xml



    

        

        

            

                

                

                

                

                

            

        

    


Come nota a margine, ho rimosso i tag relativi agli ancoraggi e android:fillViewport="true" dal tag NestedScrollView poiché non sono realmente necessari e impediscono il funzionamento dell'ispettore di layout.

Si potrebbe sempre non usare la vista personalizzata, ma presumo che la si voglia per comodità.

Ecco la simulazione di ExpandedToolbar che ho usato a scopo dimostrativo.

ExpandedToolbar.java

public class ExpandedToolbar extends AppBarLayout {
    public ExpandedToolbar(Context context) {
        super(context);
        init();
    }

    public ExpandedToolbar(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
        TypedArray a = context.getTheme().obtainStyledAttributes(
                attrs,
                R.styleable.MyToolbar,
                0, 0);

        try {
            String title = a.getString(R.styleable.MyToolbar_toolbarTitle);
            ((Toolbar) findViewById(R.id.expanded_toolbar)).setTitle(title);
        } finally {
            a.recycle();
        }
    }

    private void init() {
        inflate(getContext(), R.layout.expanded_toolbar, this);
    }
}

Ti mostriamo recensioni e valutazioni

Se hai qualche sospetto e capacità di chiarire la nostra affermazione, sei in grado di prendere nota e la guarderemo con desiderio.



Utilizzate il nostro motore di ricerca

Ricerca
Generic filters

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.