如何在方向更改后将光标移动到EditText行的末尾?

时间:2015-09-08 03:28:51

标签: android android-edittext android-orientation

我在UI屏幕上有一个EditText行,供用户输入一个句子。如果用户将光标留在句子的中间,然后改变方向,我希望光标移动到句子的末尾。我的理解是操作系统创建了一个新的活动,并重点关注方向改变,所以我设置了下面的代码,但无济于事。请指教。

部分活动文件:

...
cListenerEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
         @Override
         public void onFocusChange(View v, boolean hasFocus) {
             if (hasFocus && (cListenerEditText.getText().length() > 0)) {
                cListenerEditText.setSelection(cListenerEditText.getText().length());
             }
         }
    });

3 个答案:

答案 0 :(得分:3)

尝试在onResume中执行此操作,检查布尔字段以使其仅用于娱乐。

if(!initialized) {
    initialized = true; 
    cListenerEditText.setSelection(cListenerEditText.getText().length());
}

修改

示例活动

public class MainActivity extends AppCompatActivity {

  private EditText cListenerEditText;
  private boolean initialized = false;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    cListenerEditText = findViewById(R.id.listenerEditText);
  }

  @Override
  protected void onResume() {
    super.onResume();
    if(!initialized) {
      initialized = true;
      cListenerEditText.setSelection(cListenerEditText.getText().length());
    }
  }
}

答案 1 :(得分:1)

首先,您需要在Manifest.xml文件中添加活动的属性,如下所示:android:configChanges="orientation"

然后,在您的活动中,覆盖onConfigurationChanged,因为每个方向都会更改,此方法会被调用。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    cListenerEditText.setSelection(cListenerEditText.getText().length());
}

答案 2 :(得分:0)

public void onRestoreInstanceState(Bundle savedInstanceState)

中添加requestFocus