android tipos personalizar - Evita que EditText se enfoque en el inicio de la actividad




15 Answers

¿El problema real es que simplemente no quieres que se centre? ¿O no desea que muestre el teclado virtual como resultado de enfocar EditText ? Realmente no veo un problema con el EditText centrado en el inicio, pero definitivamente es un problema tener la ventana softInput abierta cuando el usuario no solicitó explícitamente enfocarse en el EditText (y, como resultado, abrió el teclado).

Si es el problema del teclado virtual, consulte la documentación del elemento AndroidManifest.xml <activity> .

android:windowSoftInputMode="stateHidden" : android:windowSoftInputMode="stateHidden" siempre cuando ingrese la actividad.

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

validar studio solo

Tengo una Activity en Android, con dos elementos:

  1. EditText
  2. ListView

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

EditText.setSelected(false);

Sin suerte. ¿Cómo puedo convencer a EditText para que no se seleccione cuando comience la Activity ?




La única solución que he encontrado es:

  • Cree un LinearLayout (no sé si funcionarán otros tipos de Layout)
  • Establezca los atributos android:focusable="true" y android:focusableInTouchMode="true"

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




Usando la información proporcionada por otros carteles, usé 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();
}



Pruebe clearFocus() lugar de setSelected(false) . Cada vista en Android tiene tanto capacidad de enfoque como de selección, y creo que solo desea aclarar el enfoque.




Ninguna de estas soluciones funcionó para mí. La forma en que arreglo el autofocus fue:

<activity android:name=".android.InviteFriendsActivity" android:windowSoftInputMode="adjustPan">
    <intent-filter >
    </intent-filter>
</activity>



Simplemente puede configurar "enfocable" y "enfocable en modo táctil" para valorar verdadero en el primer TextView del layout . De esta manera, cuando se inicie la actividad, TextView se enfocará pero, debido a su naturaleza, no verá nada enfocado en la pantalla y, por supuesto, no se mostrará ningún teclado ...




Necesitaba despejar el enfoque de todos los campos programáticamente. Acabo de agregar las siguientes dos declaraciones a mi definición de diseño principal.

myLayout.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
myLayout.setFocusableInTouchMode(true);

Eso es. Arreglado mi problema al instante. Gracias, Silver, por indicarme la dirección correcta.




La respuesta más simple, simplemente agregue esto en el diseño principal del XML.

android:focusable="true" 
android:focusableInTouchMode="true"



Prueba esto antes de tu primer campo editable:

<TextView  
        android:id="@+id/dummyfocus" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="@string/foo"
        />

----

findViewById(R.id.dummyfocus).setFocusableInTouchMode(true);
findViewById(R.id.dummyfocus).requestFocus();



Tarde, pero tal vez útil. Cree un EditText ficticio en la parte superior de su diseño y luego llame a myDummyEditText.requestFocus() en onCreate()

<EditText android:id="@+id/dummyEditTextFocus" 
android:layout_width="0px"
android:layout_height="0px" />

Eso parece comportarse como espero. No es necesario manejar los cambios de configuración, etc. Necesitaba esto para una Actividad con un TextView largo (instrucciones).




Sí, hice lo mismo: crear un diseño lineal "ficticio" que tenga un enfoque inicial. Además, establezco las "siguientes" identificaciones de enfoque para que el usuario no pueda enfocarlas más después de desplazarse una vez:

<LinearLayout 'dummy'>
<EditText et>

dummy.setNextFocusDownId(et.getId());

dummy.setNextFocusUpId(et.getId());

et.setNextFocusUpId(et.getId());

mucho trabajo solo para deshacerse del enfoque en una vista ..

Gracias




Para mí, lo que funcionó en todos los dispositivos es esto:

    <!-- fake first focusable view, to allow stealing the focus to itself when clearing the focus from others -->

    <View
    android:layout_width="0px"
    android:layout_height="0px"
    android:focusable="true"
    android:focusableInTouchMode="true" />

Simplemente ponga esto como una vista antes de la vista enfocada problemática, y eso es todo.




Lo más simple que hice fue enfocar otra vista en onCreate:

    myView.setFocusableInTouchMode(true);
    myView.requestFocus();

Esto detuvo la activación del teclado virtual y no había ningún cursor parpadeando en el texto de edición.




<TextView
    android:id="@+id/TextView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    android:focusable="true"
    android:focusableInTouchMode="true"
    style="@android:style/Widget.EditText"/>



Puede lograr esto creando un EditText ficticio con el ancho y la altura del diseño establecidos en 0dp y solicitando el enfoque en esa vista. Agregue el siguiente fragmento de código en su diseño xml:

<EditText
    android:id="@+id/editText0"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:hint="@string/dummy"
    android:ems="10" 
    >
     <requestFocus />
    </EditText>



Related