Android中键盘上方的FloatingActionButton和隐藏在键盘下方的BottomNavigationView
Posted
技术标签:
【中文标题】Android中键盘上方的FloatingActionButton和隐藏在键盘下方的BottomNavigationView【英文标题】:FloatingActionButton above keyboard and BottomNavigationView hidden under keyboard in Android 【发布时间】:2018-09-26 05:48:47 【问题描述】:我遇到了一个我无法解决的问题。这很简单;
我有一个视图,其中有一个EditText
、一个FloatingActionButton
和一个BottomNavigationView
。当我选择EditText
时,键盘会弹出。这是我希望FloatingActionButton
浮动键盘和BottomNavigationView
保持隐藏键盘后面的时候。
我尝试将android:windowSoftInputMode
用作adjustResize
和adjustPan
。前者将使FloatingActionButton
和 BottomNavigationView
隐藏在键盘后面。后者会将FloatingActionButton
和BottomNavigationView
推到键盘上方。
除此之外,我尝试使用一个简单的 custom BottomNavigationView
元素,当检测到键盘时(使用 viewTreeObserver和 addOnGlobalLayoutListener)。这与adjustResize
配合使用,但是在你可以看到BottomNavigationView
的kayboard 弹出后会有一点延迟,使它看起来非常“跳跃”。
我现在的问题是;有其他解决方案吗?
编辑 这是我当前的 xml,非常简单。
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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_
android:layout_
tools:context=".MainActivity"
android:fitsSystemWindows="false">
<EditText
android:id="@+id/editText"
android:layout_
android:layout_
android:ems="10"
android:inputType="textPersonName"
android:text="Name" />
<android.support.design.widget.FloatingActionButton
android:layout_
android:layout_
app:layout_anchor="@id/navigation"
android:layout_margin="10dp"
android:layout_gravity="top|end"
app:layout_anchorGravity="right"/>
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_
android:layout_
android:layout_marginEnd="0dp"
android:layout_marginStart="0dp"
android:background="?android:attr/windowBackground"
android:layout_gravity="bottom"
android:elevation="20dp"
app:menu="@menu/navigation" />
</android.support.design.widget.CoordinatorLayout>
【问题讨论】:
您希望 FloatingActionButton 浮动在键盘上方,而 BottomNavigationView 则隐藏在键盘后面 请提供您的xml布局代码 @Khemraj 是的,我的帖子逐字逐句地说:) @HiteshSarsava 我添加了 xml 【参考方案1】:我总是用来解决这个问题的一件事。
-
将您的视图包裹在 ScrollView 中,您不希望键盘出现。
将视图保留在 Scrollview 之外,以便在键盘打开时浮动在键盘上。
这听起来不是很好而且很简单吗:)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
>
<ScrollView
android:layout_
android:layout_
android:layout_above="@+id/button_next"
android:background="#0ff"
>
// these views will not come up.
<LinearLayout
android:layout_
android:layout_
android:orientation="vertical"
>
<EditText
android:layout_
android:layout_
android:layout_marginTop="250dp"
android:hint="Hint"
/>
<TextView
android:layout_
android:layout_
android:text="ABC"
android:textSize="50sp"
/>
</LinearLayout>
</ScrollView>
// this will float on keyboard
<Button
android:id="@+id/button_next"
android:layout_
android:layout_
android:layout_alignParentBottom="true"
android:layout_margin="10dp"
android:text="Button Next"
/>
</RelativeLayout>
在 manifest.xml 中
<application
...
>
<activity android:name=".YourActivity"
android:windowSoftInputMode="adjustResize"
>
</activity>
</application>
编辑:
试试这个,它是用来在键盘上移动fab的。
将android:windowSoftInputMode="adjustResize"
添加到清单中的活动
确保布局 xml 中的根视图具有 android:fitsSystemWindows="true"
属性
【讨论】:
我看不到如何解决我的问题,我是否应该将此代码应用于我的问题。我应该使用什么Window Soft Input Mode
?
查看新的编辑答案,让我知道这是否适合您。【参考方案2】:
将您的主要父布局属性android:fitsSystemWindows="false"
更改为android:fitsSystemWindows="true"
并将android:windowSoftInputMode="adjustResize"
放入AndroidManifest.xml
文件中的活动中
【讨论】:
通过这样做,FAB 确实会向上移动,但 BottomNavigationView 也会向上移动,这是不可取的。 您是否从活动中删除了 viewTreeObserver 和 addOnGlobalLayoutListener?并且根据您的 xml 布局设计,您将其完美地为我工作。 @RasmusIsraelsson 是的,viewTreeObserver 从未在此特定示例中使用过。您能否提供解决方案结果的屏幕截图?以上是关于Android中键盘上方的FloatingActionButton和隐藏在键盘下方的BottomNavigationView的主要内容,如果未能解决你的问题,请参考以下文章