键盘上方的FloatingActionButton和Android

时间:2018-04-16 13:08:10

标签: android keyboard bottomnavigationview floating-action-button window-soft-input-mode

我遇到了一个我无法解决问题的问题。它相当直接;

我有一个视图,其中有EditTextFloatingActionButtonBottomNavigationView。当我选择EditText键盘弹出时。这是我希望FloatingActionButton 浮在键盘上方,而BottomNavigationView保持隐藏键盘后面。

我尝试将android:windowSoftInputMode同时用作adjustResizeadjustPan。前者会使FloatingActionButton BottomNavigationView隐藏在键盘后面。后者会将FloatingActionButtonBottomNavigationView推到键盘上方。

除此之外,我尝试使用一个简单的自定义 BottomNavigationView元素,在检测到键盘时将其设置为visibilityhidden (使用 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>

2 个答案:

答案 0 :(得分:0)

我总是使用一件事来解决这个问题。

  1. 将您的视图包裹在您不想使用键盘的ScrollView中。
  2. 保持Scrollview外部的视图,当键盘打开时,您希望它在键盘上浮动。
  3. 这听起来不是很好而且非常简单:)

    <?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文件中的活动