本文主要是介绍安卓用代码来实现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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!