2011-05-06 12 views
14

Esto es principalmente un problema mío, pero me molesta que el comportamiento predeterminado o EditTextPreference s es poner el cursor al comienzo de la cadena. Esto NO tiene sentido para mí. En casi cualquier otra interfaz conocida por el hombre (bien, ME), enfocando un campo de texto automáticamente envía el cursor al FINAL.EditTextPreference y la posición predeterminada del cursor

So. ¿Hay una manera (fácil) de anular esto? Sé que puedo extenderme desde EditTextPreference y llamar al setSelection() manualmente, pero esto parece una solución realmente complicada para un problema tan simple.

Respuesta

3

que extendimos EditTextPreference y reemplazando el método showDialog:

@Override 
    protected void showDialog(Bundle state) { 
    super.showDialog(state); 
    Handler delayedRun = new Handler(); 
    delayedRun.post(new Runnable() { 
     @Override 
     public void run() { 
     EditText textBox = getEditText(); 
     textBox.setSelection(textBox.getText().length()); 
     } 
    }); 
    } 
+0

fresca, pero el EditarTexto no retendrá selección de posición/cursor en la rotación más. –

1

tengo otra solución!

class opcl implements OnPreferenceClickListener{ 
    @Override 
    public boolean onPreferenceClick(Preference pref) { 
     EditTextPreference et = (EditTextPreference) pref; 
     et.getEditText().setSelection(et.getText().length()); 
     return true; 
    } 
} 

Entonces esto para todos sus EditTextPreferences

opcl mopcl = new opcl(); 
    etpref1.setOnPreferenceClickListener(mopcl); 
    etpref2.setOnPreferenceClickListener(mopcl); 
    etpref3.setOnPreferenceClickListener(mopcl); 
7

Al igual que en la solución de lukeuser, se puede definir la línea OnPreferenceClickListener o como una variable de clase:

final OnPreferenceClickListener _moveCursorToEndClickListener = 
    new OnPreferenceClickListener() 
    { 
     @Override 
     public boolean onPreferenceClick(Preference preference) 
     { 
      EditTextPreference editPref = (EditTextPreference)preference; 
      editPref.getEditText().setSelection(editPref.getText().length()); 
      return true; 
     } 
    }; 

[...] 

EditTextPreference myPref = (EditTextPreference)findPreference("MyPref"); 
myPref.setOnPreferenceClickListener(_moveCursorToEndClickListener); 

O

EditTextPreference myPref = (EditTextPreference)findPreference("MyPref"); 
myPref.setOnPreferenceClickListener(
    new OnPreferenceClickListener() 
    { 
     @Override 
     public boolean onPreferenceClick(Preference preference) 
     { 
      EditTextPreference editPref = (EditTextPreference)preference; 
      editPref.getEditText().setSelection(editPref.getText().length()); 
      return true; 
     } 
    }); 
9

Otro ángulo sobre esto: acabo terminando configurando 'selectAllOnFocus' en verdadero en la definición XML, o programáticamente en el objeto.

Básicamente, logré lo que quería: lograr que el usuario final pueda reemplazar el contenido de inmediato.

+0

Si desea permitir al usuario reemplazar todo el contenido y no solo agregar texto al final, esa es la manera más corta. – TDG

1

Este hecho el truco para mí, sólo anula onPreferenceTreeClick():

/** 
* Automatically sets cursor to the last position in EditTextPreference 
* 
* @param preferenceScreen The {@link PreferenceScreen} that the 
*  preference is located in. 
* @param preference The preference that was clicked. 
* @return Whether the click was handled. 
*/ 
@Override 
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, @NotNull Preference preference) { 
    super.onPreferenceTreeClick(preferenceScreen, preference); 

    Preference clickedPreference = findPreference (preference.getKey()); 
    if (clickedPreference instanceof EditTextPreference) // check if EditTextPreference 
    { 
     Editable editable = ((EditTextPreference) clickedPreference).getEditText().getText(); 
     Selection.setSelection(editable, editable.length()) ; // set the cursor to last position 
     return true; 
    } 
    return false; 
} 

Tenga en cuenta que he utilizado PreferenceFragment, pero es lo mismo para PreferenceActivity.

Esta solución se adapta de http://www.phonesdevelopers.com/1816051/

Cuestiones relacionadas