web-dev-qa-db-ja.com

Coordinatorlayout adjustresizeが機能しない

MY CODE(およびその他):次のようなコーディネーターレイアウトがあります

<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>

フレームレイアウトの内側で、下部に配置されたエディットテキストでカスタムビューを膨らませています。エディットテキストとカスタムビューが正しく表示されます。

マニフェストでAndroid:windowSoftInputMode = "adjustResize | stateHidden"を定義しました。

MY PROBLEM:エディットテキストをタップしてソフトキーボードを表示しているときに、FrameLayoutのサイズを変更するのではなく、下のコンテンツを重ねています。ソフトキーボードが表示されたときに、FrameLayoutのサイズを変更できませんでした。助けていただければ幸いです

私が試したもの:

  1. 設計サポートライブラリを22.2.1に更新
  2. FrameLayoutの属性としてAndroid:layout_gravity = "fill_vertical"を追加しました。
25
hexhog

これは単なる設計サポートライブラリの バグ であり、それらは すぐに修正する予定はありません

確認済みですが、おそらくすぐには修正されません。 adjustResizeにはいくつかの良いユースケースがありますが、AppBarLayoutをCollapsingToolbarLayoutと一緒に使用することはそれらの1つではありません。

設計サポートライブラリの開発中に、Android:windowSoftInputMode="adjustResize"を使用してEditTextCoordinatorLayoutに追加しようとした人がいないことは憂慮すべきことです。

15
Andreas Wenger

これを試して


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

CoordinatorLayoutバグを解決するためにこれを使用しています

bottomSheetFragmentのonCreateDialog内

KeyboardUtil(getActivity(), view);

または

アクティビティ用

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

このUtilクラスを使用する

Javaバージョン: https://github.com/mikepenz/MaterialDrawer/blob/aa9136fb4f5b3a80460fe5f47213985026d20c88/library/src/main/Java/com/mikepenz/materialdrawer/util/KeyboardUtil.Java

Kotlinバージョン: https://Gist.github.com/agustinsivoplas/6f80233699aebebd512542503ea32682 Credit:Mikepenz、Agustinsivoplas

9
LOG_TAG

マイレイアウト

<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>

私はまったく同じ問題を抱えていました。私が考えたのは、例えば、 NestedScrollViewまたはFrameLayout内では、スクロール自体を処理することも想定しますが、CoordinatorLayoutadjustResize /のように動作しません。マニフェスト内のadjustResize | adjustPan設定は無視されます。

RelativeLayoutまたはScrollViewsなどを含むいくつかの(結合された)ビューを自分で書き込んだため、これを理解するのは非常に困難でした。

ビューのスクロールを処理するためにRelativeLayoutsまたはNestedScrollView以外のものを使用しない場合、それは動作します、少なくとも私はそれを望んでいました。

しかし、私はCoordinatorLayout内にバグがあるか、この種の問題を回避するために私たち全員がよりよく理解する必要がある動作があると思います...

多分これは誰かのために知っておくと便利です...

私の設定は:

  • support/design/appcompat:22.2.1
  • layout_gravityは不要
7
SukiSoft

NestedScrollViewでEditTextビューを使用する場合は、ルートレイアウトとしてCoordinatorLayoutを使用しないでください。

<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が機能しない

app:layout_behavior="@string/appbar_scrolling_view_behavior"

この行を削除します。

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

こんにちは私は同じ問題があり、私は置くだけ

        Android:windowSoftInputMode="adjustPan"

関連するアクティビティのマニフェストで、キーボードはそれに応じてビューを上に移動します

2
Joxad

KeyboardUtil からの短縮バージョン。これをアクティビティに追加します。

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

今のところ、androidx.drawerlayout.widget.DrawerLayoutを使用してラップして解決しています:

CoordinatorLayout、AppBarLayout、CollapsingToolbarLayout、Toolbar、NestedScrollView

それはおそらく最良のアイデアではありませんが、それは私のために働いています;)

プロジェクトにサンプルがあります: https://github.com/maiconpintoabreu/Kupping-Mobile/blob/master/app/src/main/res/layout/activity_event_new.xml

0
Maicon Santana