Android ApiDemo 分析(二)

来源:互联网 发布:java集合类有哪些 编辑:程序博客网 时间:2024/06/06 10:57
app/activity/custom dialog

这个界面主要展示用户自定义风格的功能。
首先整个页面只引用了布局文件custom_dialog_activity,没有其他任何功能。

在res/layout下找到此xml文件,发现页面是一个TextView(一直以为控件必须包含在布局中,如LinearLayout,看来不是这样。。。),里面引用了一个字符串资源custom_dialog_activity_text。


这里存在一个问题,在TextView中并没有定义其背景颜色,也就是说应该是黑乎乎的一片,可是用图像查看器发现是深红色的,不理解。。。


转到manifest文件,找到注册的activity,其中的android:theme="@style/Theme.CustomDialog"即是对这个activity风格的定义。在res/value/style中找到相应的标签,这里即风格定义的关键部分。它继承了android:style/Theme.Dialog的风格,同时自定义了窗口背景,引用资源在@drawable/filled_box,其中又有一系列属性,至此跟踪完毕。下面进行详细分析:

android可以通过风格和主题来统一各种屏幕和UI元素,就像手机的设置主题一样。风格和主题本质是一样的,只是用的地方不同,主题中会有一些特殊的属性。大范围使用,如一个应用程序或一个activity就叫主题,小范围如一个布局或一个控件就叫风格。

定义风格和主题的方式是一样的,之后统称风格。在res/values下建立style.xml文件,加<resource>标签,风格就定义在里面,标签为<style>。

<style name="MyText" //name用来指定该风格的名称
parent="@style/Text"> //parent用来指定继承父类风格
<item name="android:textSize">12sp</item> //具体的属性设定
<item name="android:textColor">#fff</item>
......
</style>

主题中就会多一些特殊属性,如:
<item name="android:windowNoTitle">true</item>
<item name="android:windowFrame">@drawable/screen_frame</item>
<item name="android:windowBackground">@drawable/screen_background_white</item>
<item name="android:panelForegroundColor">#FF000000</item>
<item name="android:panelBackgroundColor">#FFFFFFFF</item>
<item name="android:panelTextColor">?panelForegroundColor</item>
<item name="android:panelTextSize">14</item>
<item name="android:menuItemTextColor">?panelTextColor</item>
<item name="android:menuItemTextSize">?panelTextSize</item>
......

可以看到其中对资源的引用有两种方法,@***和?***,@引用的是当前主题外的资源,?引用的是当前主题中已定义的资源。如
<item name="android:panelForegroundColor">#FF000000</item>之后的
<item name="android:panelTextColor">?panelForegroundColor</item>

其他

这个例子中在定义style时应用了@drawable/filled_box资源,找到res/drawable/filled_box文件如下:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#f0600000"/>
<stroke android:width="3dp" color="#ffff8080"/>
<corners android:radius="3dp" />
<padding android:left="10dp" android:top="10dp"
android:right="10dp" android:bottom="10dp" />
</shape>
Android中常常使用shape来定义控件的一些显示属性,
solid:实心,填充的颜色;
gradient:渐变
stroke:描边
corners:圆角
padding:间隔
原创粉丝点击