私のアプリケーションでは、ユーザーが[テキストの編集]ビューをクリックまたはタッチすると、フォーカスが最初に設定されることがあります。たとえば、既存のテキストが「こんにちは」の場合。ユーザーはそれをクリックして「H1お元気ですか?」に変更したいと考えています。 「お元気ですか?」というテキストを追加します。でも、最初はピントが合っているので「お元気ですか?こんにちは」になります。そのため、選択したときにテキストの右端にフォーカスするように常に設定したいと思います。どうすればこれを行うことができますか。できればサンプルを教えてください。お手数をおかけしますが、よろしくお願いいたします。
テキストの最後の位置にキャレットを明示的に配置できます。
EditText editText = (EditText) findViewById(R.id.textId);
int pos = editText.getText().length();
editText.setSelection(pos);
あなたが尋ねることについてもっと具体的な何か、あなたは次のコードを使うことができます:
EditText editText = (EditText) findViewById(R.id.textId);
editText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
editText.setSelection(editText.getText().length());
}
}
});
メソッドsetOnFocusChangeLister()は、editTextがフォーカスを受け取ったときの検出に使用されます。
setSelectionは私には機能しませんでしたが、これは魅力のように機能します。 afterTextChangedでも機能します。
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
edittext.requestFocus(edittext.getText().length());
}
上記の解決策は機能していません。
ここでは、Android用のedittextのテキストの右側にフォーカスを設定するための新しいソリューションを提供します。そして、その正常に動作します。
私のコードは:
EditText edt_ans = (EditText)findViewById(R.id.edt_answer);
edt_ans.addTextChangedListener(new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
// TODO Auto-generated method stub
edt_ans.setSelection(edt_ans.getText().length());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after)
{
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s)
{
// TODO Auto-generated method stub
}
});
ハッピーコーディング.... :)
public void ontextchangelistner(){
if(s.toString().startsWith("0")) {
if (s.length() == 2) {
if (s.toString().contains("00")) {
editText.setText(s.toString().substring(1));
int pos = editText.getText().length();
editText.setSelection(pos);
}
}
}
編集テキストに最初にゼロを入力すると、次のように表示されます。しかし、2回目にゼロを押すと、このゼロは表示されません。お役に立てば幸いです。
addTextChangedListener()
の内部:
@Override
public void afterTextChanged(Editable editable) {
viewHolder.editText.setSelection(viewHolder.editText.getText().length()); //set cursor to the end
}
より顕著な方法は、選択の設定を常に手動で行う必要がない場合です。したがって、レイアウトではEditTextの代わりにCustomEditTextを使用してください。
public class CustomEditText extends EditText {
public CustomEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* This is a Fix of buggy behavior of Android, where after setting text using setText(...), selection remain on
* first character and not at last character.
*/
@Override
public void setText(CharSequence text, BufferType type) {
super.setText(text, type);
if (text != null && ! (text.toString().trim().length() == 0 )) {
final int textLength = text.length();
if (getSelectionEnd() != textLength) {
setSelection(textLength);
}
}
}
}
新しいAPIでは、次のようなものを使用できます。
//buttons setups
private void buttonsSetupForRecommendations() {
button2.setNextFocusRightId(R.id.ok_button);
button2.setNextFocusLeftId(R.id.ok_button);
button2.setNextFocusDownId(R.id.cancel_button);
button2.setNextFocusUpId(R.id.cancel_button);
button.setVisibility(View.GONE);
button2.setText(R.string.cancel_text);
button1.setText(R.string.clear_text);
button1.setNextFocusRightId(R.id.cancel_button);
button1.setNextFocusLeftId(R.id.cancel_button);
button1.setNextFocusUpId(R.id.ok_button);
button1.setNextFocusDownId(R.id.ok_button);
button1.requestFocus();
}
これはボタンや他のアイテムで動作します。 UはこれをJava code ^^またはxmlに追加できます