Cómo hacer que EditText no se enfoque al crear la actividad
Antes de downvote y marca como duplicado, lea mi pregunta.
He leído las otras preguntas discutiendo esto, y todas ellas trabajan para mis diseños, excepto para el primero creado.
- El método getString (int) no está definido para el tipo Apps
- Android youtube API reproduce dos o más jugadores de Youtube en una actividad principal
- Cómo dar formato a longs en android para siempre mostrar dos dígitos
- Crear aplicaciones multi-SDK para Android en Eclipse sin perder controles de tiempo de compilación
- Es la biblioteca Java.util.concurrent mejor al hacer cualquier tipo de tarea sobre el estándar Android AsyncTask
Por el momento, esto está en la parte superior de mi método onCreate
:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
^ Eso lo hace tan por lo menos el teclado no aparece en el arranque, pero el EditText
todavía se centra en.
Este es el XML
para mi EditText
:
<EditText android:id="@+id/password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/changePass" android:layout_centerHorizontal="true" android:layout_marginTop="167dp" android:ems="10" android:imeOptions="flagNoExtractUi" android:inputType="textPassword" android:maxLength="30" > </EditText>
Esto es lo que parece cuando abro mi actividad:
El problema es que con algunos teléfonos, cuando un EditText
está enfocado de esta manera, no pueden escribir en él. Quiero que no se enfoque.
Lo que he hecho funciona para los próximos diseños planteados en que los EditTexts
no se centran en y se vería más como este:
Tenga en cuenta que es el mismo diseño, sin embargo. Esta es la pantalla después de que el usuario ha vuelto a esta pantalla, lo que no indicaría nada malo con el XML
porque este es el mismo XML
, pero el problema es que el EditText
sólo se centra en cuando se crea la actividad.
He hecho la investigación y todas las otras preguntas no me ayudan con esto (sin embargo ayudaron a que el teclado no aparezca, afortunadamente). ¿Cómo puedo hacer que el EditText
en el inicio se verá como la segunda captura de pantalla, en lugar de la primera?
- Concate JSONArray
- no llamar a través de super.oncreate y estoy seguro de que añadió thet super.oncreate
- Separar horas de minutos en un valor de tiempo dado
- Aviary para Android - Cómo forzar la imagen de la cosecha usando editor.launch
- Diferencia entre AAR, JAR, DEX, APK en Android
- Reemplazar cada palabra con etiqueta
- ICS Spinner ("desplegable" en lugar de diálogo) en versiones anteriores de Android
- División de clases grandes con clases internas en Java
Puedes establecer la propiedad de Layout como android:descendantFocusability="beforeDescendants"
and android:focusableInTouchMode="true"
Ejemplo:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mainLayout" android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true" > <EditText android:id="@+id/password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/changePass" android:layout_centerHorizontal="true" android:layout_marginTop="167dp" android:ems="10" android:imeOptions="flagNoExtractUi" android:inputType="textPassword" android:maxLength="30" > </EditText> </RelativeLayout>
Que este útil;)
Código XML:
<EditText android:id="@+id/password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/changePass" android:layout_centerHorizontal="true" android:layout_marginTop="167dp" android:ems="10" android:focusable="false" android:imeOptions="flagNoExtractUi" android:inputType="textPassword" android:maxLength="30" > </EditText>
Código Java:
EditText edPwd = (EditText)findViewById(R.id.password); edtPwd.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { v.setFocusable(true); v.setFocusableInTouchMode(true); return false; } });
Establece focusable false en xml y establece true a través del código
En su main_layout añadir este 2 líneas:
android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true"
ejemplo:
<RelativeLayout 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:layout_width="match_parent" android:layout_height="match_parent" android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true"> *YOUR LAYOUT CODE* </RelativeLayout>
Puede hacerlo mediante programación. editText.setEnabled(false)
en su método onStart()
de su actividad (no en onCreate () – porque este es un método para inicializar componentes GUI)
Código XML
<EditText android:imeOptions="flagNoExtractUi" android:focusable="false" />
Código Java en onClickListerner
mEdtEnterPhoneNumber.setFocusable(true); mEdtEnterPhoneNumber.setFocusableInTouchMode(true);
Es posible usar android:focusable="false"
para desactivarlo, pero si eso no funciona por alguna razón, entonces simplemente puede poner un LinearLayout
y tomará el foco sin interrumpir su diseño.
NOTA: Eclipse le dará un error diciendo que su LinearLayout
es inútil porque no tiene contenido. Usted debe ser capaz de ignorarlo sin problemas.
Por ejemplo:
<LinearLayout android:focusable="true" android:focusableInTouchMode="false" android:layout_width="0dp" android:layout_height="0dp" /> <EditText android:id="@+id/password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/changePass" android:layout_centerHorizontal="true" android:layout_marginTop="167dp" android:ems="10" android:imeOptions="flagNoExtractUi" android:inputType="textPassword" android:maxLength="30" > </EditText> </LinearLayout>
Añadir esto en onCreate ()
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
O en onCreateView ()
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
La mejor solución está aquí: https://stackoverflow.com/a/45139132/3172843
La solución correcta y simple es setFocusable false y setFocusableInTouchMode true . Por lo que el enfoque de edición de texto sólo cuando toque el usuario que EditText
android:focusable="false" android:focusableInTouchMode="true"
android:focusable="false"
para deshabilitar el enfoque
<EditText android:id="@+id/password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/changePass" android:layout_centerHorizontal="true" android:layout_marginTop="167dp" android:ems="10" android:imeOptions="flagNoExtractUi" android:inputType="textPassword" android:maxLength="30" android:focusable="false" > </EditText>
- No se pueden actualizar las herramientas SDK de Android
- Android Studio: Debe especificar una ruta de acceso a la carpeta Genymotion para usar esta función