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");
}
});