FloatingActionButton над клавиатурой и BottomNavigationView скрыты под клавиатурой в Android
Я столкнулся с проблемой, которую просто не могу обернуть. Это довольно просто;
У меня есть мнение, в котором у меня есть 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>
2 ответа
Единственное, что я всегда использую, чтобы избавиться от этой проблемы.
- Оберните свой взгляд в ScrollView, что вы не хотите, чтобы появиться на клавиатуре.
- Держите представления вне Scrollview, которые вы хотите плавать на клавиатуре, когда клавиатура открывается.
Разве это не звучит хорошо и довольно легко:)
<?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"
имущество
Изменить свойство основного родительского макета android:fitsSystemWindows="false"
в android:fitsSystemWindows="true"
и положи android:windowSoftInputMode="adjustResize"
в вашей деятельности в AndroidManifest.xml
файл