studio programacion para móviles lose libro edittext edición desarrollo curso aplicaciones android focus android-edittext

para - manual de programacion android pdf



Android: ¿Forzar el texto de edición para eliminar el foco? (19)

Esta pregunta ya tiene una respuesta aquí:

Me gustaría poder quitar el foco del EditText. Por ejemplo, si aparece el teclado y el usuario lo oculta con el botón Atrás, me gustaría que el enfoque y el cursor desaparezcan. ¿Cómo puede hacerse esto?


Quite el foco pero permanezca enfocable:

editText.setFocusableInTouchMode(false); editText.setFocusable(false); editText.setFocusableInTouchMode(true); editText.setFocusable(true);

EditText perderá el enfoque, pero puede obtenerlo nuevamente en un nuevo evento táctil.


Agregue LinearLayout antes de EditText en su XML.

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

O puede hacer lo mismo agregando estas líneas para ver antes de ''EditarTexto''.

<Button android:id="@+id/btnSearch" android:layout_width="50dp" android:layout_height="50dp" android:focusable="true" android:focusableInTouchMode="true" android:gravity="center" android:text="Quick Search" android:textColor="#fff" android:textSize="13sp" android:textStyle="bold" /> <EditText android:id="@+id/edtSearch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginRight="5dp" android:gravity="left" android:hint="Name" android:maxLines="1" android:singleLine="true" android:textColorHint="@color/blue" android:textSize="13sp" android:textStyle="bold" />


Agregue a su diseño principal donde colocó su EditText este android:focusableInTouchMode="true"


Agregue estas dos propiedades a su diseño principal (por ejemplo: Diseño lineal, Diseño relativo)

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

Hará el truco :)


En los comentarios, preguntó si se puede enfocar otra vista en lugar de Editar Texto. Sí puede. Use el método .requestFocus() para la vista que desea enfocar al principio (en el método onCreate ())

También enfocar otra vista recortará cierta cantidad de código. (código para ocultar el teclado por ejemplo)


Esta es mi primera respuesta en SO, así que no seas demasiado severo conmigo si hay errores. :RE

Hay pocas respuestas flotando alrededor del SO, pero siento la necesidad de publicar mi solución completa porque esto me volvió loco. He cogido trozos y piezas de todos lados, así que perdóname si no doy los créditos respectivos a todos ... :)

(Simplificaré mi resultado porque mi vista tiene demasiados elementos y no quiero spam con eso e intentaré hacerlo lo más genérico posible ...)

Para su diseño, necesita un elemento primario, su texto de edición y la vista principal han definido algo como esto:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/lytContainer" android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true"> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/etEditor" android:inputType="number" android:layout_gravity="center" android:hint="@string/enter_your_text" android:textColor="@android:color/darker_gray" android:textSize="12dp" android:textAlignment="center" android:gravity="center" android:clickable="true"/> </LinearLayout>

Por lo tanto, necesitaba algunas cosas aquí. Necesitaba tener un marcador de posición para mi EditText - que es eso -

android: hint = "hint"

También,

android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true"

hizo que suceda que EditText no se centre en ingresar la Actividad y más adelante en la propia Actividad al establecerla, esta configuración ayuda a que pueda configurar onTouchListener para robarle el enfoque a EditarTexto .

Ahora, en la Actividad:

package com.at.keyboardhide; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.view.View.OnTouchListener; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.LinearLayout; public class MainActivity extends Activity implements OnTouchListener{ private EditText getEditText; private LinearLayout getLinearLayout; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); setContentView(R.layout.keyboardmain); getEditText = (EditText)findViewById(R.id.etEditor); getLinearLayout = (LinearLayout)findViewById(R.id.lytContainer); getLinearLayout.setOnTouchListener(this); getEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_DONE) { Log.d("EDTA", "text was entered."); getEditText.clearFocus(); imm.hideSoftInputFromWindow(barcodeNo.getWindowToken(), 0); return true; } return false; } }); } @Override public boolean onTouch(View v, MotionEvent event) { if(v==getLinearLayout){ InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getEditText.getWindowToken(), 0); getEditText.clearFocus(); return true; } return false; } }

Pocas de las respuestas para los bits que encontré en esta página de preguntas, y la parte de la solución de actividad que encontré en este blog . El resto que extrañé y que tuve que averiguar yo mismo fue aclarar el foco en el Texto de Edición que agregué a ambos dentro de setOnEditorActionListener y onTouchLister para la vista principal .

Espero que esto ayude a alguien y ahorra tiempo. :)

Saludos, Z.


Para ocultar el teclado cuando comience la actividad ... escriba el siguiente código en onCreate () ..

InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);

Para borrar el enfoque y eliminar el cursor de edittext .....

editText.clearFocus(); editText.setCursorVisible(false);


Puede evitar enfocarse en sus elementos configurando el atributo android: descendantFocusability del elemento principal.

Aquí hay un ejemplo:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/search__scroller" android:descendantFocusability="blocksDescendants" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" > </ScrollView>

Aquí, el atributo android: descendantFocusability establecido en "blocksDescendants" está bloqueando el enfoque en los elementos secundarios.

Puedes encontrar más información here .


Puedes hacer que el cursor y el enfoque desaparezcan

edittext.clearFocus();

Pero detectar cuándo se oculta el teclado es un trabajo duro.


También puede incluir android:windowSoftInputMode="stateAlwaysHidden" en su sección de acción manifiesta.

Esto es equivalente a:

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);


También puede incluir android: windowSoftInputMode = "stateAlwaysHidden" en su sección de acción manifiesta.

Esto es equivalente a:

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

pero de forma XML.

Para su información, también puede ocultar el teclado con códigos:

// hide virtual keyboard InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mYourEditText.getWindowToken(), 0);


Trate de usar este en su opinión, funcionó para mí:

<View android:id="@+id/fucused" android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusable="true" android:focusableInTouchMode="true"/>


Yo tuve el mismo problema. Me hizo más que loca.

Tenía un Diálogo extendido con un ScrollView que tenía un TableLayout con un LinearLayout extendido que contenía un SeekBar y un EditText.

El primer EditText siempre tenía autofocus después de mostrar el diálogo y después de terminar de editar el texto sobre el teclado, el EditText aún tenía el foco y el teclado aún estaba visible.

Probé casi todas las soluciones de este hilo y ninguna funcionó para mí.

Así que aquí mi solución simple : (texto = EditarTexto)

text.setOnEditorActionListener( new OnEditorActionListener( ){ public boolean onEditorAction( TextView v, int actionId, KeyEvent event ){ if( (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) || (actionId == EditorInfo.IME_ACTION_DONE) ){ text.clearFocus( ); InputMethodManager iMgr = null; iMgr = (InputMethodManager)mContext.getSystemService( Context.INPUT_METHOD_SERVICE ); iMgr.hideSoftInputFromWindow( text.getWindowToken(), 0 ); } return true; } });

Por cierto , no utilicé ninguno de los siguientes fragmentos para resolverlo:

//setFocusableInTouchMode( true ) //setFocusable( true ) //setDescendantFocusability( ViewGroup.FOCUS_BEFORE_DESCENDANTS )

Y no usé un elemento espaciador como una Vista con ancho y alto de 1dp.

Esperemos que ayude a alguien: D


tienes que eliminar <requestFocus/>

Si no lo usas y sigue siendo el mismo problema.

LinearLayout usuario como padre y conjunto

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

Espero que sea de ayuda.


eliminar autofocus edittext android

Esta trabajando para mi

Editar En el enlace, sugieren usar LinearLayout, pero la vista simple funcionará.

<View android:id="@+id/focus_thief" android:layout_width="1dp" android:layout_height="1dp" android:focusable="true" android:focusableInTouchMode="true" />

Luego, si este "ladrón" se coloca en la parte superior del diseño (para ser el primer elemento clearFocus() ), las llamadas a clearFocus() funcionarán.


Puede agregar esto a onCreate y ocultará el teclado cada vez que se inicie la actividad.

También puede cambiar programáticamente el enfoque a otro elemento.

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);


EditText.setOnKeyListener(new OnKeyListener() { public boolean onKey(View view, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER) { InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(URLText.getWindowToken(), 0); EditText.setFocusable(false); EditText.setFocusableInTouchMode(true); return true; } else { return false; } } });


check your xml file <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp" > **<requestFocus />** </EditText> //Remove **<requestFocus />** from xml


editText.setFocusableInTouchMode(true)

El EditText podrá obtener el foco cuando el usuario lo toque. Cuando el diseño principal (actividad, diálogo, etc.) se vuelve visible, EditText no se EditText automáticamente aunque sea la primera vista en el diseño.