type style studio propiedades example edittext android android-edittext hint

android - style - ¿Cómo hacer desaparecer la pista cuando se toca edittext?



focus edittext android (10)

Aquí está mi solución, donde la sugerencia desaparece cuando el usuario enfoca editText y aparece de nuevo cuando el foco cambia a otro lugar si el texto de edición aún está vacío:

editText.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { editText.setHint(""); return false; } }); editText.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { editText.setHint("Hint"); } } });

Espero que esto ayude a alguien

En mi aplicación en Android hay muchos campos EditText. Y me encontré con un problema con la pista. No está desapareciendo cuando EditText está activado, pero en desaparece cuando estoy empezando a escribir algo. ¿Cómo se puede solucionar este problema? Porque necesito una pista para desaparecer cuando se toca el campo Editar texto.

Es por ejemplo:

<EditText android:layout_width="260dp" android:layout_height="30dp" android:ems="10" android:inputType="text" android:id="@+id/driv_lic_num_reg" android:hint="@string/driver_license_numb" android:textColor="@color/black" android:textColorHint="@color/grey_hint" android:background="@drawable/input_field_background" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_margin="2dp" android:textCursorDrawable="@color/black" android:textSize="15dp" android:paddingLeft="10dp" android:nextFocusDown="@+id/pass_reg" android:imeOptions="actionNext" android:maxLines="1" android:maxLength="50" android:focusableInTouchMode="true"/>


Aquí he usado un poco de código para ocultar y mostrar una pista que puede ser útil.

txt_username.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(txt_username.getText().toString().isEmpty()){ if(hasFocus){ txt_username.setHint(""); }else{ txt_username.setHint(R.string.username); } } } });


Cada solución dada puede funcionar o no, no lo sé, pero los siguientes pasos definitivamente ayudarían.

Primero, crea un foco ficticio para evitar que EditText gane el enfoque al

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

Luego, normalmente establezca una pista en su EditText como ejemplo:

<EditText android:layout_width="match_parent" android:layout_height="match_parent" android:inputType="text" android:ems="10" android:id="@+id/editText" android:hint="Your Hint" android:focusableInTouchMode="true" />

Finalmente, agregue el siguiente código en su actividad o fragmento donde desee

editText.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { editText.setHint(""); return false; } });


Esta es mi solución:

final EditText editText = (EditText) findViewById(R.id.activity_edittext); editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { editText .setHint("my little hint"); } else { editText .setHint(""); } } });


La solución de selección propuesta por windyzboy no funciona para EditTexts con texto centrado, porque el cursor permanece detrás del texto de la pista transparente en lugar de moverse hacia el centro.

Una buena manera de no contaminar su código es hacer un EditText personalizado, ya que probablemente necesite el mismo estilo en toda la aplicación. De esa manera, puede evitar agregar cheques para cada EditText por separado.

public class HideHintEditText extends EditText { CharSequence hint; public HideHintEditText(Context context) { super(context); hint = this.getHint(); } public HideHintEditText(Context context, AttributeSet attrs) { super(context, attrs); hint = this.getHint(); } public HideHintEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); hint = this.getHint(); } @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(focused, direction, previouslyFocusedRect); this.setHint(focused ? "" : hint); } }


La sugerencia solo desaparece cuando escribes cualquier texto, no el foco. No creo que haya una forma automática de hacerlo, puede ser que me equivoque. Sin embargo, como solución alternativa, uso el siguiente código para eliminar pistas sobre el enfoque en EditarTexto

myEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) myEditText.setHint(""); else myEditText.setHint("Your hint"); } });


También puede personalizar su código XML utilizando Selector. Aquí hay un código de ejemplo.

Crear un selector. En el archivo selector.xml

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:color="@android:color/transparent" /> <item android:color="@color/gray" /> </selector>

En su opinión

android:textColorHint="@drawable/selector"


Tratar

EditText editText = (EditText) findViewById(...); editText.setHint("");

en su lógica onTouch .
Sin embargo, su sugerencia debe desaparecer al hacer clic en editar texto. Así que vuelve a comprobar la lógica de tu aplicación.


android:hint="User Name"

Esta línea de código se puede hacer de esa manera fácil!

<EditText android:id="@+id/edtUserName" android:layout_width="match_parent" android:layout_height="50dp" android:layout_weight="1" android:ems="10" android:inputType="textPersonName" android:hint="User Name" />


findViewById(R.id.mainLayout).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { hideKeyboard(); editText.clearFocus(); if (TextUtils.isEmpty(editText.getText().toString())) { editText.setHint("your hint"); } } }); editText.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { editText.setHint(""); return false; } }); editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) editText.setHint(""); else editText.setHint("your hint"); } });