android:focusable
用键盘是否能获得焦点,如果设置为true,则键盘上下左右选中,焦点会随之移动
android:focusableInTouchMode
非键盘是否能获得焦点,如果设置为true,点击屏幕的上的某个控件时,不要立即执行相应的点击逻辑,而是先显示焦点(即控件被选中),再点击才执行逻辑。
focusableInTouchMode这种属性,多半是设给EditText这种即使在TouchMode下,依然需要获取焦点的控件.比如Button之类的控件,自身拥有focusableInTouchMode,就没有必要获取焦点
android:focusable=“true”不会改变android:focusableInTouchMode,因此只在键盘状态下显示焦点,在非键盘状态下,依旧无法显示焦点。
android:focusable=“false”,一定会使android:focusableInTouchMode=“false”
android:focusableInTouchMode=”true”,一定会使android:focusable=“true”
android:focusableInTouchMode=“false”,不会影响android:focusable
非键盘开发,如果要获取焦点,只需要设置android:foucusableInTouchMode=“true”
android:clickable
所有的获取焦点,都要有一个前提,那就是该控件必须设置android:clickable=”true”,如果都点击不了,设置焦点应该没什么意义;设置为true时,表明控件可以点击,如果为false,就不能点击;setOnClickListener方法会默认把控件的setClickable设置为true。
setEnabled()
设置是否激活控件,如果设置为false,该控件永远不会活动,不管设置为什么属性,都无效;
设置为true,表明激活该控件,控件处于活动状态,处于活动状态,就能响应事件了,比如触摸、点击、按键事件等;setEnabled就相当于总开关一样,只有总开关打开了,才能使用其他事件。
requestFocus()
设置是否获得焦点。
一般想让某个控件获得焦点:
view.requestFocus();
用键盘是否能获得焦点,如果设置为true,则键盘上下左右选中,焦点会随之移动
android:focusableInTouchMode
非键盘是否能获得焦点,如果设置为true,点击屏幕的上的某个控件时,不要立即执行相应的点击逻辑,而是先显示焦点(即控件被选中),再点击才执行逻辑。
focusableInTouchMode这种属性,多半是设给EditText这种即使在TouchMode下,依然需要获取焦点的控件.比如Button之类的控件,自身拥有focusableInTouchMode,就没有必要获取焦点
android:focusable=“true”不会改变android:focusableInTouchMode,因此只在键盘状态下显示焦点,在非键盘状态下,依旧无法显示焦点。
android:focusable=“false”,一定会使android:focusableInTouchMode=“false”
android:focusableInTouchMode=”true”,一定会使android:focusable=“true”
android:focusableInTouchMode=“false”,不会影响android:focusable
非键盘开发,如果要获取焦点,只需要设置android:foucusableInTouchMode=“true”
android:clickable
所有的获取焦点,都要有一个前提,那就是该控件必须设置android:clickable=”true”,如果都点击不了,设置焦点应该没什么意义;设置为true时,表明控件可以点击,如果为false,就不能点击;setOnClickListener方法会默认把控件的setClickable设置为true。
setEnabled()
设置是否激活控件,如果设置为false,该控件永远不会活动,不管设置为什么属性,都无效;
设置为true,表明激活该控件,控件处于活动状态,处于活动状态,就能响应事件了,比如触摸、点击、按键事件等;setEnabled就相当于总开关一样,只有总开关打开了,才能使用其他事件。
requestFocus()
设置是否获得焦点。
一般想让某个控件获得焦点:
view.requestFocus();
view.setFocusable(true);
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_0: Toast.toastInfo(this, "你按下数字键0"); break; case KeyEvent.KEYCODE_DPAD_CENTER: Toast.toastInfo(this, "你按下中间键"); break; case KeyEvent.KEYCODE_DPAD_DOWN: Toast.toastInfo(this, "你按下下方向键"); break; case KeyEvent.KEYCODE_DPAD_LEFT: Toast.toastInfo(this, "你按下左方向键"); break; case KeyEvent.KEYCODE_DPAD_RIGHT: Toast.toastInfo(this, "你按下右方向键"); break; case KeyEvent.KEYCODE_DPAD_UP: Toast.toastInfo(this, "你按下上方向键"); break; case KeyEvent.KEYCODE_ALT_LEFT: Toast.toastInfo(this, "你按下组合键alt+←"); break; } return super.onKeyDown(keyCode, event); }
坑1:
代码创建button,给button设置setX()或者setY(),无法获取焦点
setX()或者setY()改成leftMargin或者topMargin