Pregunta Detener EditText para que no se centre en el inicio de la actividad


Yo tengo un Activity en Android, con dos elementos:

  1. EditText 
  2. ListView

Cuando mi Activity comienza, el EditText inmediatamente tiene un enfoque de entrada (cursor parpadeante). No quiero que ningún control tenga foco de entrada al inicio. Lo intenté:

EditText.setSelected(false);

Sin suerte. ¿Cómo puedo convencer al EditText para no seleccionarse cuando el Activity ¿empieza?


2386
2017-10-12 15:03


origen


Respuestas:


Excelentes respuestas de Luc y Mark, sin embargo, falta una buena muestra de código. Agregar la etiqueta android:focusableInTouchMode="true" a <LinearLayout> como el siguiente ejemplo solucionará el problema.

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:focusable="true" 
    android:focusableInTouchMode="true"
    android:layout_width="0px" 
    android:layout_height="0px"/>

<!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component
to prevent the dummy from receiving focus again -->
<AutoCompleteTextView android:id="@+id/autotext"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:nextFocusUp="@id/autotext" 
    android:nextFocusLeft="@id/autotext"/>

2026
2017-11-02 15:49



¿Es el problema real que simplemente no desea que tenga foco en absoluto? O no desea que muestre el teclado virtual como resultado de enfocar el EditText? Realmente no veo un problema con el EditText tener foco en el inicio, pero definitivamente es un problema tener la ventana de entrada de software abierta cuando el usuario no solicitó explícitamente enfocarse en el EditText (y abra el teclado como resultado).

Si es el problema del teclado virtual, vea el AndroidManifest.xml  elemento <actividad> documentación.

android:windowSoftInputMode="stateHidden" - siempre ocúltalo al ingresar a la actividad.

o android:windowSoftInputMode="stateUnchanged" - No lo cambie (por ejemplo, no lo haga espectáculo si aún no se muestra, pero si estaba abierto al ingresar a la actividad, déjalo abierto).


1565
2018-04-09 21:22



Existe una solución más simple. Establezca estos atributos en su diseño principal:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:descendantFocusability="beforeDescendants"
    android:focusableInTouchMode="true" >

Y ahora, cuando la actividad comience, este diseño principal se enfocará por defecto.

Además, podemos eliminar el enfoque de vistas secundarias en el tiempo de ejecución (por ejemplo, después de terminar la edición infantil) al volver a enfocar el diseño principal, como este:

findViewById(R.id.mainLayout).requestFocus();

Buen comentario de Guillaume Perrot:

android:descendantFocusability="beforeDescendants" parece ser el   por defecto (el valor entero es 0). Funciona simplemente agregando    android:focusableInTouchMode="true".

Realmente, podemos ver que beforeDescendants establecer como predeterminado en el ViewGroup.initViewGroup() método (Android 2.2.2). Pero no igual a 0. ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;

Gracias a Guillaume.


1012
2017-12-26 23:35



La única solución que he encontrado es:

  • Crear un LinearLayout (No sé si otros tipos de diseño funcionarán)
  • Establecer los atributos android:focusable="true" y android:focusableInTouchMode="true"

Y el EditText no obtendrá el enfoque después de comenzar la actividad


385
2017-10-23 08:12



El problema parece provenir de una propiedad que solo puedo ver en el XML form del diseño.

Asegúrese de eliminar esta línea al final de la declaración dentro del EditText Etiquetas XML:

<requestFocus />

Eso debería dar algo como eso:

<EditText
   android:id="@+id/emailField"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:inputType="textEmailAddress">

   //<requestFocus /> /* <-- without this line */
</EditText>

67
2018-03-13 09:57



usando la información proporcionada por otros carteles, utilicé la siguiente solución:

en el diseño XML

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:id="@+id/linearLayout_focus"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:layout_width="0px"
    android:layout_height="0px"/>

<!-- AUTOCOMPLETE -->
<AutoCompleteTextView
    android:id="@+id/autocomplete"
    android:layout_width="200dip"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dip"
    android:inputType="textNoSuggestions|textVisiblePassword"/>

en onCreate ()

private AutoCompleteTextView mAutoCompleteTextView;
private LinearLayout mLinearLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mylayout);

    //get references to UI components
    mAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autocomplete);
    mLinearLayout = (LinearLayout) findViewById(R.id.linearLayout_focus);
}

y finalmente, en onResume ()

@Override
protected void onResume() {
    super.onResume();

    //do not give the editbox focus automatically when activity starts
    mAutoCompleteTextView.clearFocus();
    mLinearLayout.requestFocus();
}

63
2018-05-26 21:07



Lo siguiente evitará que el texto de edición tome enfoque cuando se cree, pero tómelo cuando lo toque.

<EditText
    android:id="@+id/et_bonus_custom"
    android:focusable="false" />

Por lo tanto, configura focalizable en falso en el xml, pero la clave está en el java, al que agrega el siguiente oyente:

etBonus.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        v.setFocusable(true);
        v.setFocusableInTouchMode(true);
        return false;
    }
});

Como devuelve falsa, es decir, no consume el evento, el comportamiento de enfoque continuará de forma normal.


58
2018-06-15 04:45



Tratar clearFocus () en lugar de setSelected(false). Todas las vistas en Android tienen tanto capacidad de enfoque como de selección, y creo que quieres simplemente despejar el foco.


54
2017-10-12 19:02