(1)控件获得焦点的属性
物理按键时获得焦点的属性
android:focusable="false"
android:focusable="true"
触屏时获得焦点的属性
android:focusableInTouchMode="true"
android:focusableInTouchMode="false"
(2)父布局(控件)和子布局(控件)获得焦点的先后顺序的属性
android:descendantFocusability= "blocksDescendants"
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
(3)设置当前控件获得焦点的属性
<requestFocus /> 在哪个控件中就意味着该空间现在获得焦点
<Button android:id="@+id/start_alarm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/start_alarm_service">
<requestFocus />
</Button>
(4)焦点的移动顺序
android:nextFocusUp="@+id/button11"
android:nextFocusLeft="@+id/button11"
android:nextFocusRight="@+id/button1"
android:nextFocusDown="@+id/button1">
这里的id为布局中参考控件的id
(5)控件获得焦点以后的背景
在drawable 下写一个selector.xml文件
如下:
?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 默认时的背景图片-->
<item android:drawable="@drawable/pic1" />
<!-- 没有焦点时的背景图片,也可以设置背景颜色 -->
<item android:state_window_focused="false" android:drawable="@drawable/pic1" />
<!-- 非触摸模式下获得焦点并单击时的背景图片 -->
<item android:state_focused="true" android:state_pressed="true" android:drawable= "@drawable/pic2" />
<!-- 触摸模式下单击时的背景图片-->
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/pic3" />
<!--选中时的图片背景-->
<item android:state_selected="true" android:drawable="@drawable/pic4" />
<!--获得焦点时的图片背景-->
<item android:state_focused="true" android:drawable="@drawable/pic5" />
</selector>
android:state_selected 选中
android:state_focused 获得焦点
android:state_pressed 点击
android:state_enabled 设置是否响应事件,指所有事件
(6)ImageView TextView 等相比Button 等控件是没有焦点的背景色的,
需要自己手动设置,这跟各自的构造方法有关,
构造方法中button引用的stytle
<style name="Widget.Button">
<item name="background">@drawable/btn_default</item>
<item name="focusable">true</item>
<item name="clickable">true</item>
<item name="textAppearance">?attr/textAppearanceSmallInverse</item>
<item name="textColor">@color/primary_text_light</item>
<item name="gravity">center_vertical|center_horizontal</item>
</style>
TextView等控件是继承与View的,若果想让其获得焦点时有背景显示,同样可以自己手动设置stytle,然后在xml文件里引用。