我遇到了一个我无法解决问题的问题。它相当直接;
我有一个视图,其中有EditText
,FloatingActionButton
和BottomNavigationView
。当我选择EditText
键盘弹出时。这是我希望FloatingActionButton
浮在键盘上方,而BottomNavigationView
保持隐藏键盘后面。
我尝试将android:windowSoftInputMode
同时用作adjustResize
和adjustPan
。前者会使FloatingActionButton
和 BottomNavigationView
隐藏在键盘后面。后者会将FloatingActionButton
和BottomNavigationView
推到键盘上方。
除此之外,我尝试使用一个简单的自定义 BottomNavigationView
元素,在检测到键盘时将其设置为visibility
到hidden
(使用 viewTreeObserver 和 addOnGlobalLayoutListener )。这与adjustResize
同时发挥作用,但是在kayboard弹出之后会有一点点延迟,您可以看到BottomNavigationView
,使其看起来非常"跳跃"。
我现在的问题是;是否有其他解决方案?
修改的 这是我目前的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_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:fitsSystemWindows="false">
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:text="Name" />
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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_width="match_parent"
android:layout_height="wrap_content"
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>
答案 0 :(得分:0)
我总是使用一件事来解决这个问题。
这听起来不是很好而且非常简单:)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/button_next"
android:background="#0ff"
>
// these views will not come up.
<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:layout_marginTop="250dp"
android:hint="Hint"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ABC"
android:textSize="50sp"
/>
</LinearLayout>
</ScrollView>
// this will float on keyboard
<Button
android:id="@+id/button_next"
android:layout_width="match_parent"
android:layout_height="60dp"
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"
属性
答案 1 :(得分:0)
将您的主要父级布局属性android:fitsSystemWindows="false"
更改为android:fitsSystemWindows="true"
,并将android:windowSoftInputMode="adjustResize"
放入AndroidManifest.xml
文件中的活动