出现软键盘时如何避免只有BottomNavbar向上推
Posted
技术标签:
【中文标题】出现软键盘时如何避免只有BottomNavbar向上推【英文标题】:How to avoid only BottomNavbar to pushed up when soft keyboard appears 【发布时间】:2021-02-04 08:30:51 【问题描述】:我的安卓应用中有这样的视图
有一个mainActivity
,它有那个bottomNavBar
,并且在activity里面有一个片段,底部有两个按钮。
我应该做的是,当软键盘出现时bottomNavBar
应该留在底部(键盘后面)但是这两个按钮应该向上推并在键盘顶部可见
如果我在manifest
文件中为mainActivity 设置android:windowSoftInputMode="adjustResize"
,那么键盘也会向上推bottomNavBar 和按钮。
如果我将android:windowSoftInputMode="adjustResize"
仅设置为片段(以编程方式),那么它仍然会显示相同的行为。
我该怎么做?任何建议将不胜感激
这是我的活动 xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<LinearLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:id="@+id/container"
android:layout_
android:layout_>
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_
android:layout_
app:defaultNavHost="true"
app:navGraph="@navigation/mobile_navigation"
android:layout_weight="@integer/int_two"/>
<com.google.android.material.bottomnavigation.BottomNavigationView
app:itemIconTint="@drawable/bottom_navigation_selector"
app:itemTextColor="@drawable/bottom_navigation_selector"
android:id="@+id/nav_view"
android:layout_
android:layout_
android:layout_weight="@integer/int_zero"
android:background="?android:attr/windowBackground"
app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
app:menu="@menu/bottom_nav_menu" />
</LinearLayout>
</layout>
【问题讨论】:
你试过 android:windowSoftInputMode="adjustPan|stateHidden" 吗? 【参考方案1】:我也面临同样的问题,经过多次努力,我找到了一个适合我的解决方案。我做什么,当 keyboard appers 使 bottomNavBar 可见性 GONE 和 反之亦然。
试试这个获取键盘open和close事件 -
view.getViewTreeObserver().addOnGlobalLayoutListener(() ->
Rect r = new Rect();
view.getWindowVisibleDisplayFrame(r);
if (view.getRootView().getHeight() - (r.bottom - r.top) > 500)
// on Keyboard Open
llBottomNavBarLayout.setVisibility(View.GONE);
else
// on keyboard close
llBottomNavBarLayout.setVisibility(View.VISIBLE);
);
为了获得视图我使用
LayoutInflater layoutInflater = getLayoutInflater();
View view = layoutInflater.inflate(R.layout.activity_abc, null);
【讨论】:
它成功了,谢谢,但你能告诉我为什么我们使用价值 500 吗?【参考方案2】:感谢您的更新。我试过你的布局。在适当的活动上添加到您的清单android:windowSoftInputMode="adjustNothing"
请注意,这也会影响 FAB 和其他锚视图
<activity
android:name=".activities.MainActivity"
android:windowSoftInputMode="adjustNothing">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
【讨论】:
我试过了,但没用。我已经为你更新了问题。可以看到活动代码以上是关于出现软键盘时如何避免只有BottomNavbar向上推的主要内容,如果未能解决你的问题,请参考以下文章
部分安卓手机上出现切换界面时软键盘无法收回的情况,请问该如何解决?
软键盘出现时如何保持Android webview中的固定页脚不覆盖输入字段?