一、requestFocus介紹
requestFocus()是View類的一個方法,它的作用是請求該View獲取焦點,當View獲取焦點後,會獲得鍵盤輸入焦點,這時候View會響應鍵盤的事件(比如用戶輸入的字符),與此同時也會相應觸摸屏或者trackball等其他輸入焦點的事件。
在用戶界面設計中,當一個Activity打開時,我們通常需要將焦點設置在某個View上,這時候就需要調用requestFocus()方法來請求該View獲取焦點。
二、requestFocus的使用
1、在XML文件中使用:可以在布局的XML文件中通過設置某個View的android:foucsable、android:focusableInTouchMode兩個屬性來控制View是否可獲取焦點,同時可以通過設置android:nextFocusDown、android:nextFocusLeft、android:nextFocusRight、android:nextFocusUp等屬性來定義View獲取焦點的下一個View是哪個。
2、在Java代碼中使用:使用View的requestFocus()方法可以讓該View請求獲取焦點。
Button btn = findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText et = findViewById(R.id.et);
et.requestFocus();
}
});
三、requestFocus注意事項
1、requestFocus()方法不能保證View一定會獲取焦點,這還需要考慮到View本身的以及其它View的foucsable(是否可以獲取焦點)屬性,以及該View所在的層次結構中ViewGroup的焦點獲取策略等。
2、一個Activity中有多個View都可以獲取焦點,可以通過調用requestFocusFromTouch()方法來讓某個View在觸屏模式下獲取焦點。
Button btn = findViewById(R.id.btn);
btn.setOnTouchListener(new View.OnTouchListener() {
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent event) {
EditText et = findViewById(R.id.et);
et.requestFocusFromTouch();
return true;
}
});
3、注意在Activity中使用requestFocus()方法時,最好在Activity的onWindowFocusChanged()方法中調用,以保證該View在界面顯示後立即獲取焦點。
private EditText et;
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
et.requestFocus();
}
}
四、requestFocus的局限性
雖然requestFocus()方法可以讓View獲取焦點,但是有時候也會因為某些原因(比如ViewGroup可能會干擾View的獲取焦點),導致View並不能真正的獲取焦點。另外,如果在Activity的布局中出現了多個可獲取焦點的View,有可能會導致用戶的操作失去預期效果。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/200970.html
微信掃一掃
支付寶掃一掃