本文主要是介绍安卓用代码来实现selector,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
android可以通过XML文件来创建selector,以Drawable对象的形式安装到组件上,以提供统一的风格设置。但是在某些时候,我们需要通过代码的形式来实现相同的功能,例如组件数量非常多,对应不同的图片,这时候如果还用XML的话就需要创建大量的selector文件,非常繁琐。例如一个TextView使用了如下的selector
<
TextView
android:id
=
"@+id/TextView_title"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:focusable
=
"true"
android:drawableTop
=
"@drawable/selector_tabwidget_icon"
android:textAlignment
=
"center"
/>
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
selector
xmlns:android
=
"http://schemas.android.com/apk/res/android"
>
<!-- Non focused states -->
<
item
android:state_focused
=
"false"
android:state_selected
=
"false"
android:state_pressed
=
"false"
android:drawable
=
"@drawable/contact"
/>
<
item
android:state_focused
=
"false"
android:state_selected
=
"true"
android:state_pressed
=
"false"
android:drawable
=
"@drawable/contact_sel"
/>
<!-- Focused states -->
<
item
android:state_focused
=
"true"
android:state_selected
=
"false"
android:state_pressed
=
"false"
android:drawable
=
"@drawable/contact_sel"
/>
<
item
android:state_focused
=
"true"
android:state_selected
=
"true"
android:state_pressed
=
"false"
android:drawable
=
"@drawable/contact_sel"
/>
<!-- Pressed -->
<
item
android:state_selected
=
"true"
android:state_pressed
=
"true"
android:drawable
=
"@drawable/contact_sel"
/>
<
item
android:state_pressed
=
"true"
android:drawable
=
"@drawable/contact_sel"
/>
</
selector
>
里面所引用的图片资源文件非常多,如果每个文件都对应一个XML的文件的话,就会非常繁琐,修改起来非常麻烦。
实际上,所有XML设定能做的事情,android里同样可以用编码的方式来实现,像上面那个XML文件,就可以就下面的代码来实现:
StateListDrawable drawable =
new
StateListDrawable();
//Non focused states
drawable.addState(
new
int
[]{-android.R.attr.state_focused, -android.R.attr.state_selected, -android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.contact));
drawable.addState(
new
int
[]{-android.R.attr.state_focused, android.R.attr.state_selected, -android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.contact_sel));
//Focused states
drawable.addState(
new
int
[]{android.R.attr.state_focused,-android.R.attr.state_selected, -android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.contact_sel));
drawable.addState(
new
int
[]{android.R.attr.state_focused,android.R.attr.state_selected, -android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.contact_sel));
//Pressed
drawable.addState(
new
int
[]{android.R.attr.state_selected, android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.contact_sel));
drawable.addState(
new
int
[]{android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.contact_sel));
TextView textView = (TextView) findViewById(R.id.TextView_title);
textView.setCompoundDrawablesWithIntrinsicBounds(
null
, drawable,
null
,
null
);
注意:里面的“-”号,当XML的设定是false时,就需要使用资源符号的负值来设定。
这篇关于安卓用代码来实现selector的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!