EditTextPreference和默认光标位置

dmo*_*mon 16 android cursor android-edittext

这主要是我的一个小小的烦恼,但是让我感到厌烦的是,默认行为或EditTextPreferences是将光标放在字符串的开头.这对我来说根本没有意义.在人类已知的几乎任何其他界面(精细,ME)中,聚焦于文本字段会自动将光标发送到END.

所以.是否有(简单)方法来覆盖这个?我知道我可以延伸EditTextPreferencesetSelection()手动调用,但对于这样一个简单的问题,这似乎是一个非常复杂的解决方案.

小智 12

另一个角度:我只是在XML定义中或者以编程方式在对象上设置'selectAllOnFocus'为true.

它基本上完成了我想要的:让最终用户能够立即替换内容.


Tol*_*Hon 7

与lukeuser的解决方案类似,您可以定义OnPreferenceClickListener内联或类变量:

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 );
Run Code Online (Sandbox Code Playgroud)

要么

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;
        }
    } );
Run Code Online (Sandbox Code Playgroud)


dmo*_*mon 3

我最终扩展EditTextPreference并覆盖了该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());
      }
    });
  }
Run Code Online (Sandbox Code Playgroud)