这主要是我的宠物,但它让我感到不安,默认行为或EditTextPreference
s是将光标放在字符串的开头。这对我来说毫无意义。在几乎任何人们熟知的其他界面中(精细,ME),关注文本字段会自动将光标发送到END。EditTextPreference和默认光标位置
所以。有没有一种(简单)的方法来覆盖这个?我知道我可以从EditTextPreference
延长并手动拨打电话setSelection()
,但对于这样一个简单的问题,这似乎是一个非常复杂的解决方案。
这主要是我的宠物,但它让我感到不安,默认行为或EditTextPreference
s是将光标放在字符串的开头。这对我来说毫无意义。在几乎任何人们熟知的其他界面中(精细,ME),关注文本字段会自动将光标发送到END。EditTextPreference和默认光标位置
所以。有没有一种(简单)的方法来覆盖这个?我知道我可以从EditTextPreference
延长并手动拨打电话setSelection()
,但对于这样一个简单的问题,这似乎是一个非常复杂的解决方案。
我结束了延长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());
}
});
}
我得到了另一种解决方案!
class opcl implements OnPreferenceClickListener{
@Override
public boolean onPreferenceClick(Preference pref) {
EditTextPreference et = (EditTextPreference) pref;
et.getEditText().setSelection(et.getText().length());
return true;
}
}
那么这对你所有的EditTextPreferences
opcl mopcl = new opcl();
etpref1.setOnPreferenceClickListener(mopcl);
etpref2.setOnPreferenceClickListener(mopcl);
etpref3.setOnPreferenceClickListener(mopcl);
到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);
或者
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;
}
});
关于此问题的另一个角度:我只是在XML定义中将“selectAllOnFocus”设置为true,或者在对象上以编程方式结束。
它基本上完成了我想要的:让最终用户能够立即替换内容。
如果您想让用户替换整个内容,而不仅仅是将文本附加到末尾,那么这是最短的方式。 – TDG 2017-10-06 16:07:40
这为我做的伎俩,只是覆盖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;
}
请记住,我已经使用PreferenceFragment,但它是PreferenceActivity相同。
酷适于,但的EditText不会保留在旋转选择/光标位置了。 – 2014-02-12 09:31:16