Coordinatorlayout adjustresize不起作用

时间:2015-09-21 08:26:27

标签: android android-softkeyboard android-coordinatorlayout adjustpan

我的代码(及更多): 我有一个协调员布局如下

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

我的问题: 在点击编辑文本以调出软键盘时,它会重叠下面的内容而不是调整FrameLayout的大小。当软键盘出现时,我无法让FrameLayout调整大小。任何帮助将不胜感激

我试过的事情:

  1. 更新了设计支持库至22.2.1
  2. 在FrameLayout中添加了android:layout_gravity =“fill_vertical”作为属性。

9 个答案:

答案 0 :(得分:9)

试试这个

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

答案 1 :(得分:9)

这只是设计支持库中的另一个bug,似乎是don't plan to fix it any time soon

  

确认,但可能很快就会被修复。 adjustResize有一些很好的用例,但使用带有CollapsingToolbarLayout的AppBarLayout并不是其中之一。

令人不安的是,在开发设计支持库时,没有人试图将EditText添加到CoordinatorLayout android:windowSoftInputMode="adjustResize"

答案 2 :(得分:8)

我用它来解决CoordinatorLayout bug

在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 图片来源:Mikepenz,Agustinsivoplas

答案 3 :(得分:6)

我的布局

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

我遇到了完全相同的问题。我想通了,如果我在例如NestedScrollViewFrameLayout我会假设处理滚动本身,CoordinatorLayout不会adjustResize /按您想要的方式行事。忽略Manifest中的adjustResize | adjustPan设置。

对我而言,这很难弄明白,因为我自己写了一些(合并的)观点,其中包含RelativeLayoutScrollViews等等。

如果我只是避免使用RelativeLayouts或除NestedScrollView之外的其他任何东西来处理视图滚动,它就会表现出来,至少我想要它。

但我认为,CoordinatorLayout中存在一个Bug,或者我们都需要了解更好的行为以避免此类问题......

也许这对某些人来说很有用......

我的设置是:

  • support / design / appcompat:22.2.1
  • 不需要layout_gravity

答案 4 :(得分:2)

嗨我遇到了同样的问题,我只是把

        android:windowSoftInputMode="adjustPan"

在你的相关活动的清单中,键盘现在相应地向上移动视图

答案 5 :(得分:1)

adjustResize无法使用

app:layout_behavior="@string/appbar_scrolling_view_behavior"

删除此行:

app:layout_behavior="@string/appbar_scrolling_view_behavior" 

答案 6 :(得分:1)

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);
    }
});

答案 7 :(得分:1)

如果您在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>

答案 8 :(得分:0)

目前,我正在使用androidx.drawerlayout.widget.DrawerLayout进行包装来解决该问题:

CoordinatorLayout,AppBarLayout,CollapsingToolbarLayout,工具栏,NestedScrollView

这也许不是最好的主意,但是对我有用;)

我的项目中有一个示例:https://github.com/maiconpintoabreu/Kupping-Mobile/blob/master/app/src/main/res/layout/activity_event_new.xml