android - tamaño - propiedades de edit text
Android edittext elimina el enfoque después de hacer clic en un botón (8)
Tengo una actividad con un texto de edición y un botón. Cuando el usuario hace clic en el texto de edición, se muestra el teclado y puede escribir algo de texto - fino. Pero cuando el usuario hace clic en el botón, quiero que el EditText no esté más enfocado, es decir, el teclado se oculta hasta que el usuario vuelve a hacer clic en el EditText.
¿Qué puedo hacer para ''ocultar el foco'' de EditText, después de hacer clic en el botón? ¿Algún código que puedo agregar en el método OnClick del botón para hacer eso?
EDITAR:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/edt_SearchDest"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:textSize="18sp"
android:hint="Enter your look-up here.." />
<Button
android:id="@+id/btn_SearchDest"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:text="Search" />
</LinearLayout>
Atentamente
¿Por qué no simplemente deshabilitar el texto de edición en el código del botón? Eso debería deshacerse del teclado y el enfoque.
edt_SearchDest.setEnabled (false);
He utilizado con éxito lo siguiente en el código del botón onClick:
editText.setEnabled(false);
editText.setEnabled(true);
Algo menos complejo que otros métodos ...
La solución más elegante que pude encontrar es esta:
Puede guardar este método en su clase de utilidad:
public static void hideSoftKeyboard(Activity activity) {
if (activity == null) return;
if (activity.getCurrentFocus() == null) return;
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}
Simplemente llamando al método hideSoftKeyboad () ocultará el teclado, pero como puede ver, el enfoque seguirá presente.
Para eliminar el foco usaremos un simple truco. Justo sobre los controles de entrada, agregue una vista ficticia como esta:
<View
android:id="@+id/dummy"
android:layout_width="1dp"
android:layout_height="1dp"
android:focusable="true"
android:focusableInTouchMode="true" />
Luego, escribe esta línea de código en el lugar donde llamas al método de ocultación de foco:
theTextView.clearFocus();
Dado que la aplicación necesita pasar el enfoque al siguiente control, se pasará a nuestra vista invisible.
Lo siento tarde a la respuesta, pero espero que esta sea la respuesta correcta, ya que la arreglé usando
try {
InputMethodManager imm = (InputMethodManager) context
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (v != null) {
imm.hideSoftInputFromWindow(v.getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
}
} catch (Exception ignored) {
}
mEditText.setSelected(false);
mEditText.setFocusable(false);
mEditText.setFocusableInTouchMode(true);
Escribe el siguiente fragmento de código en tu botón.
Pon esto en tu oyente de botón:
InputMethodManager inputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
EDITAR
La solución anterior romperá tu aplicación si no se enfoca ningún EditText
. Modifique su código de esta manera:
agrega este método a tu clase:
public static void hideSoftKeyboard (Activity activity, View view)
{
InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getApplicationWindowToken(), 0);
}
Luego, en su escucha de botones, llame al método como este:
hideSoftKeyboard(MainActivity.this, v); // MainActivity is the name of the class and v is the View parameter used in the button listener method onClick.
Una solución alternativa es crear una vista falsa para transferir el enfoque cuando clearFocus
en su texto de edittext
:
<EditText
android:id="@+id/edt_thief"
android:layout_width="0dp"
android:layout_height="0dp"
android:focusable="true"
android:focusableInTouchMode="true"
Tenga en cuenta que esta vista es invisible, por lo que no requiere espacio en el diseño.
En la clase de control, puede agregar un método como el siguiente para activar esta transferencia de enfoque:
public void clearFocus(){
yourEdittext.clearFocus();
edtThief.requestFocus();
}
Luego, puede minimizar el teclado una vez que edtThief
tenga el foco:
public static void hideKeyboard(final View view) {
InputMethodManager imm = (InputMethodManager) view.getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
mTextView.setEnabled(!mTextView.isEnabled());
mTextView.setEnabled(!mTextView.isEnabled());
private void hideDefaultKeyboard() {
activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);//u have got lot of methods here
}
EDITAR:
LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN