嗨,我对BottomNavigationView
位置行为有点困惑。
为什么启用/禁用滚动条会影响BottomNavigationView
的布局和位置大小调整?
我创建了一个简单的示例项目来展示我的问题...
使用此代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="sandbox.jarda.cz.bottomnavigationtest.MainActivity">
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="test" />
</LinearLayout>
</ScrollView>
</FrameLayout>
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="?android:attr/windowBackground"
app:menu="@menu/navigation" />
</LinearLayout>
BottomNavigationView
是否会保留在键盘下(打开时)......
但是:)
当我删除行/启用滚动条
时 <ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
主要布局是“调整大小”,BottomNavigationView
位于键盘顶部...
WHY吗
答案的答案:)
答案 0 :(得分:3)
这不是因为滚动,这是因为你的应用程序的键盘行为。
您需要在windowSoftInputMode
的{{1}}标记中指定activity
有关manifest
的更多信息,请查看此link
windowSoftInputMode
答案 1 :(得分:1)
这不是因为滚动条只是你需要在清单标签中的活动中指定windowSoftInputMode使用android:windowSoftInputMode="adjustPan|adjustResize"
<activity android:name=".MainActivity"
android:windowSoftInputMode="adjustPan|adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
答案 2 :(得分:1)
原因是ScrollView。当您打开键盘时,它会使用除键盘+底部导航视图高度之外的可用空间调整自身大小。
键盘未显示时使用可用高度,不包括导航视图的高度。
为了更加清晰,实现键盘监听器并计算滚动视图的高度。您可以修改以下代码
致电代码。可以进入onCreate
container.getViewTreeObserver().addOnGlobalLayoutListener(mOnGlobalLayoutListener); // Here container is topmost LinearLayout in your layout
而mOnGlobalLayoutListener
将是
private ViewTreeObserver.OnGlobalLayoutListener mOnGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
mActivityRootView.getWindowVisibleDisplayFrame(r);
int screenHeight = mActivityRootView.getRootView().getHeight();
int keyboardheight = screenHeight - r.bottom;
/**
*
* We are taking 15% of the screen height as it should be sufficient space for the keyboard to determine if keyboard is open.
*/
if (keyboardheight > screenHeight * 0.15) {
// Keyboard showing
// PRINT HEIGHT OF SCROLLVIEW while keyboard is showing
} else {
// Keyboard hidden
// PRINT HEIGHT OF SCROLLVIEW while keyboard not showing
}
}
};