web-dev-qa-db-fra.com

Coordonnateur de la mise en page de l'ajustement

MON CODE (et plus): J'ai une disposition de coordinateur comme suit

<Android.support.design.widget.CoordinatorLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true">

    <Android.support.design.widget.AppBarLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:fitsSystemWindows="true">

        <Android.support.design.widget.CollapsingToolbarLayout
            Android:id="@+id/collapse_toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="280dp"
            Android:fitsSystemWindows="true"
            app:contentScrim="@color/transparent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <include layout="@layout/top" /> <!-- A RelativeLayout -->

            <Android.support.v7.widget.Toolbar
                Android:id="@+id/MyToolbar"
                Android:layout_width="match_parent"
                Android:layout_height="64dp"
                app:layout_collapseMode="parallax">

            </Android.support.v7.widget.Toolbar>

        </Android.support.design.widget.CollapsingToolbarLayout>

    </Android.support.design.widget.AppBarLayout>

    <FrameLayout
        Android:id="@+id/content"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <!-- Main content here -->

    </FrameLayout>

</Android.support.design.widget.CoordinatorLayout>

À l'intérieur de la disposition du cadre, je gonfle une vue personnalisée avec un texte d'édition qui est placé en bas. Le texte d'édition et la vue personnalisée s'affichent bien.

J'ai défini Android: windowSoftInputMode = "adjustResize | stateHidden" dans le manifeste.

MON PROBLÈME: Tout en appuyant sur le texte d'édition pour afficher le clavier logiciel, il chevauche le contenu en dessous au lieu de redimensionner le FrameLayout. Je n'arrivais tout simplement pas à redimensionner le FrameLayout lorsque le clavier virtuel se levait. toute aide serait appréciée

CHOSES QUE J'AI ESSAYÉ:

  1. Bibliothèque de support de conception mise à jour vers 22.2.1
  2. Android: layout_gravity = "fill_vertical" ajouté en tant qu'attribut dans FrameLayout.
25
hexhog

Ceci est juste un autre bug dans la bibliothèque de support de conception et il semble qu'ils ne prévoyez pas de le corriger de si tôt :

Confirmé, mais ne sera probablement pas corrigé de sitôt. adjustResize a quelques bons cas d'utilisation, mais utiliser AppBarLayout avec CollapsingToolbarLayout avec lui n'en fait pas partie.

Il est inquiétant de constater que personne n'a essayé d'ajouter un EditText à un CoordinatorLayout avec Android:windowSoftInputMode="adjustResize" tout en développant le support de conception lib.

15
Andreas Wenger

Essaye ça


your_layout.xml

<RelativeLayout
    Android:fitsSystemWindows="true" > <!-- Crucial! -->

    <Android.support.design.widget.CoordinatorLayout>
        ...
        <Android.support.v7.widget.RecyclerView />
        ...
    </Android.support.design.widget.CoordinatorLayout>

</RelativeLayout>

AndroidManifest.xml

<activity
    Android:name=".YourActivity"
    Android:windowSoftInputMode="adjustResize"> <!-- Crucial! -->
</activity>
15
Michael

J'utilise ceci pour résoudre le bogue de CoordinatorLayout

dans onCreateDialog dans BottomSheetFragment

KeyboardUtil(getActivity(), view);

ou

Pour une utilisation d'activité

new KeyboardUtil(this, findViewById(R.id.fragment_container));

en utilisant cette classe Util

Version Java: https://github.com/mikepenz/MaterialDrawer/blob/aa9136fb4f5b3a80460fe5f47213985026d20c88/library/src/main/Java/com/mikepenz/materialdrawer/util/KeyboardUtil.Java

Version Kotlin: https://Gist.github.com/agustinsivoplas/6f80233699aebebd512542503ea32682 Crédit: Mikepenz, Agustinsivoplas

9
LOG_TAG

Ma mise en page

<Android.support.design.widget.CoordinatorLayout>

    <Android.support.design.widget.AppBarLayout>

        <Android.support.design.widget.CollapsingToolbarLayout>

            <ImageView>

            <Android.support.v7.widget.Toolbar>

        <Android.support.design.widget.CollapsingToolbarLayout>

    <Android.support.design.widget.AppBarLayout>

    <Android.support.v4.widget.NestedScrollView>

    <Android.support.design.widget.FloatingActionButton>

<Android.support.design.widget.CoordinatorLayout>

J'ai eu exactement le même problème. J'ai compris que si j'utilise quelque chose dans le p. Ex. NestedScrollView ou dans un FrameLayout je suppose également que gère le défilement lui-même, le CoordinatorLayout ne adjustResize/ne se comporte pas comme vous le souhaitez. Les paramètres adjustResize | adjustPan dans le manifeste sont ignorés.

Pour moi, c'était très difficile à comprendre, car j'ai écrit moi-même quelques vues (combinées) qui contenaient RelativeLayout ou ScrollViews et autres.

Si j'évite simplement d'utiliser RelativeLayouts ou autre chose que NestedScrollView pour gérer le défilement de la vue, cela se comporte de la même façon, du moins je le voulais.

Mais je pense qu'il y a un bug dans CoordinatorLayout ou un comportement que nous devons tous mieux comprendre pour éviter ce type de problèmes ...

Peut-être que c'est utile de savoir pour quelqu'un ...

Mes paramètres sont:

  • support/design/appcompat: 22.2.1
  • pas besoin de layout_gravity
7
SukiSoft

N'utilisez pas CoordinatorLayout comme disposition racine si vous utilisez des vues EditText sur votre NestedScrollView

<androidx.constraintlayout.widget.ConstraintLayout
  Android:fitsSystemWindows="true">

  <androidx.coordinatorlayout.widget.CoordinatorLayout>
    <com.google.Android.material.appbar.AppBarLayout>

      <com.google.Android.material.appbar.CollapsingToolbarLayout/>

    </com.google.Android.material.appbar.AppBarLayout>

    <androidx.core.widget.NestedScrollView>
    <Editext/>
    <androidx.core.widget.NestedScrollView/>

  </androidx.coordinatorlayout.widget.CoordinatorLayout>

</androidx.constraintlayout.widget.ConstraintLayout>
4
shehan gamage

adjustResize ne fonctionne pas avec

app:layout_behavior="@string/appbar_scrolling_view_behavior"

Supprimez cette ligne:

app:layout_behavior="@string/appbar_scrolling_view_behavior" 
2
Abul Mujahid

Salut j'ai eu le même problème et je ne mets

        Android:windowSoftInputMode="adjustPan"

dans votre manifeste pour l'activité concernée et le clavier monte la vue en conséquence maintenant

2
Joxad

Une version abrégée de KeyboardUtil , ajoutez ceci à votre activité:

getWindow().getDecorView().getViewTreeObserver()
        .addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    public void onGlobalLayout() {
        Rect r = new Rect();
        getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
        rootView.setPadding(0, 0, 0,
                activity.getResources().getDisplayMetrics().heightPixels - r.bottom);
    }
});
1
Tauno Siitam

Pour l'instant, je le résous en utilisant androidx.drawerlayout.widget.DrawerLayout pour envelopper:

CoordinatorLayout, AppBarLayout, CollapsingToolbarLayout, Toolbar, NestedScrollView

Ce n'est peut-être pas la meilleure idée mais ça marche pour moi;)

J'ai un échantillon dans mon projet: https://github.com/maiconpintoabreu/Kupping-Mobile/blob/master/app/src/main/res/layout/activity_event_new.xml

0
Maicon Santana