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 用作adjustResizeadjustPan。前者将使FloatingActionButton BottomNavigationView 隐藏在键盘后面。后者会将FloatingActionButtonBottomNavigationView 推到键盘上方。

除此之外,我尝试使用一个简单的 custom BottomNavigationView 元素,当检测到键盘时(使用 viewTreeObserveraddOnGlobalLayoutListener)。这与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的主要内容,如果未能解决你的问题,请参考以下文章

在键盘上方显示 Android SnackBar?

Android:如何按下软键盘上方的按钮

键盘上方的android按钮[重复]

Android view显示在软键盘上方

Android 固定View在键盘上方

android popupwindow在虚拟键盘上方