我的代码(及更多): 我有一个协调员布局如下
<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调整大小。任何帮助将不胜感激
我试过的事情:
答案 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类
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>
我遇到了完全相同的问题。我想通了,如果我在例如NestedScrollView
或FrameLayout
我会假设处理滚动本身,CoordinatorLayout
不会adjustResize
/按您想要的方式行事。忽略Manifest中的adjustResize | adjustPan设置。
对我而言,这很难弄明白,因为我自己写了一些(合并的)观点,其中包含RelativeLayout
或ScrollViews
等等。
如果我只是避免使用RelativeLayouts
或除NestedScrollView
之外的其他任何东西来处理视图滚动,它就会表现出来,至少我想要它。
但我认为,CoordinatorLayout
中存在一个Bug,或者我们都需要了解更好的行为以避免此类问题......
也许这对某些人来说很有用......
我的设置是:
答案 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
这也许不是最好的主意,但是对我有用;)