如何在Android Studio中创建一个colors.xml selectorr.xml文件

android&studio里面没看到新建selector
studio里面得下载一个插件android-selector-chapek&
下载地址:
这款插件主要是为开发者快速自动生成selectors文件。我们可以使用Android
Studio直接联网安装,进入Android Studio找到Preferences→Plugins→Browse
repositories搜索SelectorChapek点击安装即可;也可以下载完成然后进入Preferences→Plugins→Install
plugin from disk离线安装。
如何使用:
右键资源文件夹,例如'drawable-xhdpi'
<img src="/blog7style/images/common/sg_trans.gif" real_src ="/inmite/android-selector-chapek/raw/master/img/select_folder.png" ALT="" STYLE="border-style: border-width: max-width: 100%;"
TITLE="android&studio里面没看到新建selector" />
选择'Generate Android
Selectors'
<img src="/blog7style/images/common/sg_trans.gif" real_src ="/inmite/android-selector-chapek/raw/master/img/select_option.png" ALT="" STYLE="border-style: border-width: max-width: 100%;"
TITLE="android&studio里面没看到新建selector" />
所有的selector文件都自动生成放置于'drawable'文件夹下。
<img src="/blog7style/images/common/sg_trans.gif" real_src ="/inmite/android-selector-chapek/raw/master/img/selectors_generated.png" ALT="" STYLE="border-style: border-width: max-width: 100%;"
TITLE="android&studio里面没看到新建selector" />
http://blog.csdn.net/djl/article/details/
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Android中的Selector的原理及用法
android的selector对于android开发者而言再熟悉不过了,只要定义一个drawable目录下定义一个selector的xml文件,在布局文件中引用这个xml文件或者在代码中setBackgroundDrawable的时候使用此xml就可以实现控件按下或有焦点等不同状态的效果。
那么setBackgroundDrawable后为什么可以实现这个功能呢?
首先要了解一个Drawable类,Drawable是一个抽象的可绘制的图片类,这个类可以从一个本地路径中创建一个图片,也可以使用从定义好的xml中创建,他们分别对应Drawable的createFromPath和createFromXml函数,其中createFromPath是从路径中创建一个Bitmap对象并将它转换成BitmapDrawable,而createFromXml是从xml中定义的标签,例如selector的话就创建StateListDrawable对象,shape的话就创建GradientDrawable对象,color的话就创建ColorDrawable......而BitmapDrawable、StateListDrawable、GradientDrawable都是从Drawable类中派生而来。其中StateListDrawable类就是实现selector中定义的样式的Drawable.
其次我们看Drawable怎么跟View关联的。
Drawable类有维护了一个控件的不同状态的变量mStateSet,当View.setBackgroundDrawable时,会调用Drawable的isStateful函数判断是否有不同状态的,StateListDrawable返回的true,如果是有状态的就会将view的状态赋值给drawable即d.setState(getDrawableState());
if (d.isStateful()) {
d.setState(getDrawableState());
同时将传入的Drawable作为背景的Drawable.当控件接收到touch事件时会调用refreshDrawableState更新控件状态,同时也会更新背景的Drawable的状态
protected void drawableStateChanged() {
Drawable d = mBGD
if (d != null && d.isStateful()) {
d.setState(getDrawableState());
然后会调用invalidateDrawable这个回调函数来刷新界面,同时调用draw函数实现绘制。
再次我们来看实现Selector功能的Drawable即StateListDrawable是如何实现Selector功能的。
上面我们己经看到在View状态改变的时候,会调用Drawable的setState函数。在Drawable中是这样实现setState的
public boolean setState(final int[] stateSet) {
if (!Arrays.equals(mStateSet, stateSet)) {
mStateSet = stateS
return onStateChange(stateSet);
它在改变状态的时候会调用onStateChage来通知状态己经改变了。而StateListDrawable是继承Drawable的子类它复写了onStateChage函数
protected boolean onStateChange(int[] stateSet) {
int idx = mStateListState.indexOfStateSet(stateSet);
if (DEBUG) android.util.Log.i(TAG, onStateChange + this + states
+ Arrays.toString(stateSet) + found + idx);
if (idx & 0) {
idx = mStateListState.indexOfStateSet(StateSet.WILD_CARD);
if (selectDrawable(idx)) {
return super.onStateChange(stateSet);
从上面的实现可以看到它在改变状态的时候会调用selectDrawable来选择一个当前状态的drawable,这就是实现的关键了。StateListDrawable继承了DrawableContainer而DrawableContainer继承了Drawable,StateListState是StateListDrawable的内部类,它就是保存selector中定义的不同状态的drawable的实现,它提供了addStateSet函数来增加某个状态下对应的drawable对象并将它保存在mStateSets变量中,而indexOfStateSet函数则是查找某个状态下对应的drawable。selectDrawable是DrawableContainer的类,它是根据传入的状态的索引来找到对应的drawable来当作当前状态下的drawable。
OK,现我我们终于能理解为什么selector是如何实现不同状态不同样式了。View使用Drawable来实现背景图,selector对应StateListDrawable,当view状态改变时,会改变drawable的状态,StateListDrawable在改变状态时会根据当前状态选择对应的drawable,这样在view绘制时会调用drawable的draw函数,StateListDrawable draw的是当前状态对应的drawable。
中的Selector主要是用来改变ListView和Button控件的默认背景。其使用方法可以按一下步骤来设计:(以在mylist_view.xml为例)
1.创建mylist_view.xml文件
首先在res目录下新建drawable文件夹,再在新建的drawable文件夹中新建mylist_view.xml,其目录结构为:res/drawable/mylist_view.xml。
2.根据具体需求编辑mylist_view.xml文件
新建mylist_view.xml文件后,在没有添加任何属性时其内部代码结构为:
下面就可以根据项目需求,在其内部定义为自己想要的样式了,主要属性如下: [html] view plaincopy
android:drawable=@drawable/pic1 /&
3.引用mylist_view.xml文件
三种方法可以来引用刚才创建的文件:
(1)在ListView中添加如下属性代码
android:listSelector=@drawable/mylist_view (2)在ListView的item界面中添加如下属性代码
android:background=@drawable/mylist_view (3)利用JAVA代码直接编写 [java] view plaincopy
Drawable drawable = getResources().getDrawable(R.drawable.mylist_view);
listView.setSelector(drawable); 为了防止列表拉黑的情况发生,需要在ListView中添加以下的属性代码 [html
android:cacheColorHint=@android:color/transparent 属性介绍:
android:state_selected选中
android:state_focused获得焦点
android:state_pressed点击
android:state_enabled设置是否响应事件,指所有事件AndroidStudio中怎么设置xml与预览同时显示?
作者:佚名
字体:[ ] 来源:互联网 时间:07-21 13:39:19
Android Studio中怎么设置xml与预览同时显示?Android Studio开发的时候,需要来回切换xml界面与预览界面,该怎么设置同时显示呢?下面我们就来看看详细的教程,需要的朋友可以参考下
Android Studio做程序开发的时候,为了看程序运行结果和修改错误的地方,经常需要修改xml后就切换到预览去查看效果。经常切换很烦,想要同时显示xml与预览界面,下面我们就来看看详细的教程。
软件名称:Android Studio v2.2.2.0 官方最新版(apk应用开发工具)软件大小:1.6GB更新时间:
1、打开任意一个布局文件,默认显示Design页面,点击左下角按钮Text切换到text页面
2、点击text页面右边侧栏的Preview按钮,就可以在text傍边显示布局预览界面了。
3、布局预览页面默认是显示在text页面右侧的,不过还是可以调整其显示位置的。点击布局预览页面右上角的设置按钮,会显示下拉设置选项。
4、光标移动到Move to 设置下拉选项时,会弹出新的选项列表。选中Left后,布局预览页面就显示在text页面左边了。其他方向的设置方法类同。
以上就是设置xml与预览同时显示的方法,很简单吧,需要的朋友可以自己设置。
相关推荐:
大家感兴趣的内容
12345678910
最近更新的内容注册花火通行证,没有账号
智能硬件分类
&>&&>& > 正文
分享文章到微信
关注花火网微信公众号
  1、要进行创建资源文件之前,需要先把鼠标代码的文件中进行选中,或者进行选中项目。  2、然后点击菜单中菜单中的”file“的选项。  3、就会弹出了一个下拉的菜单中,进行选择下拉菜单中的“new”的选项按钮。  4、这样就会弹出了一个下一级的菜单中,进行选择菜单中的“Android resource file”的选项。  5、然后就会弹出了一个new resource file的选项,进入输入一个file name的文件名,在available
qualifiers的进行选择layout direction进行点击双箭头,然后就可以点击”OK“。  6、这样话在Android studio的资源文件就创建成功了。  Android studio中如何创建带标签的xml资源文件  除了创建values resources file
时生成的resources标签有用,selector和alpha、set这些标签如何手动创建。一直红字报错的解决方法:  声明:本文内容摘于互联网,刊登/转载此文目的在于更广泛的传播及分享,并不意味着赞同其观点或论证其描述。如有版权纠纷问题请与站长联系,谢谢!
加载更多新闻
Copyright @ 2015-, All Rights Reserved. 版权所有 花火网}

我要回帖

更多关于 c 创建xml文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信