在制作安卓按钮和输入框样式的时候,会有事件更换样式的问题。搜罗一番,找到方案。
以下以项目的登录按钮做为例子。
来先看下目录结构:
内容都集中在res文件夹中。
drawable是显示层调用的文件夹,显示层都会经过该文件夹去显示界面,存放图片文件和显示层的xml,简单点说类似于img文件夹。至于其他以drawable开头的文件夹是代表的不同的分辨率,在不同的分辨率下会自动调用不同的drawable文件夹里面的内容。
hdpi里面主要放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)
mdpi里面主要放中等分辨率的图片,如HVGA (320x480)
ldpi里面主要放低分辨率的图片,如QVGA (240x320)
详细请查阅:http://618119.com/archives/2011/01/12/205.html
layout是界面布局,用于控制元素在界面中的位置和大小。功能类似于html的那一套,界面中的元素个数和摆放以及元素的相关信息都在这里定义。
布局分为
LinearLayout 线性布局
RelativeLayout 相对位置布局
AbsoluteLayout 绝对对位置布局
TableLayout 表格布局
FrameLayout 框架布局
详细请查阅:http://wangjun.easymorse.com/?p=145
values是存值的,主要的一些属性值的定义都可以写在这里
看下代码:
login.xml
<Button
android:id="@+id/loginSubmit"
android:layout_marginLeft="14dp"
android:layout_marginRight="14dp"
android:text="@string/login"
style="@style/submit">
</Button>
string.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="login">登录</string>
</resources>
styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="submit">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#ffffff</item>
<item name="android:textSize">35px</item>
<item name="android:shadowColor">#000000</item>
<item name="android:shadowDx">0</item>
<item name="android:shadowDy">-1</item>
<item name="android:shadowRadius">1</item>
<item name="android:background">@drawable/keke_submit</item>
</style>
</resources>
keke_submit.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/submit_press" />
<item android:state_focused="true" android:drawable="@drawable/submit_press" />
<item android:drawable="@drawable/submit" />
</selector>
这个按钮使用了四个文件。
login.xml是显示层
最直接的显示层,性质和作用类似于html页面
string.xml是文本
按钮上面文本写在这里
style.xml是样式
按钮的字体大小、颜色宽和高都这里定义
keke_submit.xml是样式选择器。
按钮的样式根据不同的事件去判断选择样式
文件的互相访问是依靠 @文件夹/文件 来访问的,这里的文件可以是xml也可以是图片文件上面的keke_submit。xml里面的 @drawable/submit_press 这里其实是图片,而style里面的 @drawable/keke_submit 其实是xml文件,由此可以看出xml文件名称和img文件名是不能够重名的,在制作的时候应该要注意。