without teclado setonnavigationitemselectedlistener pulsar ocultar library fuera edittext color bottom bar android android-softkeyboard bottomnavigationview

setonnavigationitemselectedlistener - ocultar teclado android edittext



Cómo ocultar BottomNavigationView debajo del teclado con el conjunto de ajuste de tamaño (4)

De acuerdo con la especificación de diseño del material , cuando aparece el teclado, el BottomNavigationView debe esconderse debajo de él. Sin embargo, si configuro android:windowSoftInputMode="adjustResize" en el manifiesto de la Actividad, el BottomNavigationView mueve por encima del teclado.

Necesito configurar adjustResize para permitir el desplazamiento a la parte inferior de la pantalla mientras el teclado está abierto. Sin embargo, no quiero que BottomNavigationView esté visible. Se puede hacer esto?

Cómo se ve actualmente:

El diseño XML (en realidad habría un FrameLayout donde se encuentra el EditText y el EditText dentro de él):

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Input" android:layout_gravity="center" android:layout_centerVertical="true"/> <android.support.design.widget.BottomNavigationView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" app:itemBackground="@color/colorPrimary" app:menu="@menu/menu_bottom_navigation" app:itemIconTint="@android:color/white" app:itemTextColor="@android:color/white"/> </RelativeLayout>


Añade esto a tu actividad en el manifiesto.

android:windowSoftInputMode="adjustPan"

Asi como

<activity android:name=".feature.home.HomeActivity" android:windowSoftInputMode="adjustPan"/>


Como una forma alternativa con su android:windowSoftInputMode="adjustResize" puede intentar esto.

llame a este método desde su OnCreate : una vez que el teclado está arriba, puede cambiar la visibilidad de las vistas que no necesita mostrar. Cuando el teclado está abajo, despliégalos de nuevo.

public void checkKeyBoardUp(){ rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect r = new Rect(); rootView.getWindowVisibleDisplayFrame(r); int heightDiff = rootView.getRootView().getHeight() - (r.bottom - r.top); if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard... //ok now we know the keyboard is up... whatEverView.setVisibility(View.INVISIBLE); }else{ //ok now we know the keyboard is down... whatEverView.setVisibility(View.VISIBLE); } } }); }


Hay otra solución, que no requiere adjustSpan , pero funciona solo para API >= 21 . Puede detectar si el teclado se muestra / oculta mediante el seguimiento de las inserciones del sistema. Digamos que tienes BottomNavigationView , que es hijo de LinearLayout y necesitas ocultarlo cuando se muestra el teclado:

> LinearLayout > ContentView > BottomNavigationView

Todo lo que necesitas hacer es extender LinearLayout de tal manera:

public class KeyboardAwareLinearLayout extends LinearLayout { public KeyboardAwareLinearLayout(Context context) { super(context); } public KeyboardAwareLinearLayout(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public KeyboardAwareLinearLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public KeyboardAwareLinearLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } @Override public WindowInsets onApplyWindowInsets(WindowInsets insets) { int childCount = getChildCount(); for (int index = 0; index < childCount; index++) { View view = getChildAt(index); if (view instanceof BottomNavigationView) { int bottom = insets.getSystemWindowInsetBottom(); if (bottom >= ViewUtils.dpToPx(200)) { view.setVisibility(GONE); } else { view.setVisibility(VISIBLE); } } } return insets; } }

La idea es que cuando se muestra el teclado, las inserciones del sistema se cambian con un valor bastante grande de .bottom .


agregue la siguiente línea en su manifiesto: android: windowSoftInputMode = "adjustPan"

<activity android:name=".main.MainActivity" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan" />