1. 程式人生 > >android資源文件

android資源文件

否則 展示 sca 方式 tco 半徑 優先 cti list

代碼與資源分離原則:便於維護與修改
shape:定義圖形 selector:按照不同的情況加載不同的color或drawable layer-list:從下往上圖形層疊加載

資源文件有:/res/drawable(圖形資源及幀動畫.xml)、/res/layout(界面布局資源)、/res/values(各種數據資源,eg:strings、colors、dimens etc.)
/res/menu(菜單布局資源)、/res/anim(動畫資源‘補間動畫’)、/res/raw(原始資源 eg:*.txt、*.mp3 etc)
/res/animator(屬性動畫資源)、/res/xml(xml資源文件)

values文件夾下常用文件有:
strings.xml arrays.xml(數組) colors.xml dimens.xml(尺寸) drawables.xml styles.xml(樣式) themes.xml(主題)

這些資源文件在Java中的引用方式有:
getResources().getString(R.string.xx); 其他資源引用類似

對於colors:#000000、三原色(RGB)、ARGB
#RGB 三位16進制,例如#00F
#RRGGBB 六位16進制,例如#7700FF
#ARGB 四位含透明度的顏色值,例如#F00F
#AARRGGBB 八位含透明度的顏色值,例如#7700FF00

尺寸:像素 px、 點 pt、 密度獨立像素(dpi) dp、比例獨立像素 sp
官方推薦:控件尺寸 dp、字體尺寸 sp
尺寸轉換:px to dp(dip): dp = pxValue / scale + 0.5f

常用圖像資源類型: 便攜式網絡圖像.png 其他:9格拉伸圖像.9.png *.jpg *.jpeg .gif

動畫分三類:anim(視圖動畫)、animator(屬性動畫)、AnimatorDrawable(幀動畫) animation-list
anim: alpha(漸變透明度)、scale(漸變尺寸拉伸)、translate(畫面轉換位置移動)、rotate(畫面轉移旋轉)
javaCode中:AlphaAnimation etc. tweened animation(漸變動畫) frame by frame(畫面轉換)

不受Android平臺約束的文件夾:/assets
AssetManager assets = getAssets(); assets.open(fileName);

***************
android shape使用:
shape的屬性:rectangle、oval、line、ring(矩形、橢圓形、線性形狀、環形)
如下屬性只有當shape=ring時可用:
innerRadius 內環半徑 innerRadiusRatio 浮點型,以環的寬度比率來表示內環半徑
thickness 環的厚度 thicknessRatio 浮點型,以環的寬度比率來表示環的厚度
useLevel 如果當做是LevelListDrawable使用時值為true,否則為false
當shape=ring時:必須 useLevel=false;


shape 6種標簽:corners、gradient、padding、size、solid、stroke
solid與gradient 不能同時用?會相互影響嗎?
corners(圓角):radius(全部圓角的半徑)與其他屬性不能共用
gradient(漸變色):
屬性:type=[linear|radial|sweep]漸變類型:線性漸變(默認)|放射漸變|掃描式漸變
angle=45 漸變角度,為45的倍數 0從左到右 90從上到下,僅對線性漸變有效
centerX centerY 漸變中心點的相對位置,範圍:0~1,僅當放射漸變時有效
startColor centerColor endColor
gradientRadius=5 漸變的半徑,只當type=radial時才能使用
useLevel=true|false 用於指定是否將該shape當成一個LevelListDrawable來使用,默認值為false
solid(內部填充色):只有一個屬性 color
stroke(描邊屬性):width、color、dashWidth、dashGap 後兩個屬性設置虛線:寬度(值為0時實線)與間隔(值為尺寸)
size、padding: 圖形大小、內部邊距(基本不用)

****************
android selector使用:
selector分兩種:color-selector、drawable-selector
作drawable資源使用時,放於drawable下,item 指定為drawable屬性;作color資源使用時,放於/res/color下,且item指定屬性為:color
item android:[email protected]

/* */,[email protected];但android:[email protected]
item是從上往下匹配的,如果匹配到一個item那它就將采用這個item,而不是采用最佳匹配的規則
設置默認的狀態,一定要寫在最後,如果寫在前面,則後面所有的item都不會起作用了
<!-- 默認時 -->
<item android:color="@android:color/white" />
selector標簽下:
android:enterFadeDuration 狀態改變時,新狀態展示時的淡入時間,以毫秒為單位
android:exitFadeDuration 狀態改變時,舊狀態消失時的淡出時間,以毫秒為單位

android:state_enabled: 設置觸摸或點擊事件是否可用狀態,一般只在false時設置該屬性,表示不可用狀態
android:state_pressed: 設置是否按壓狀態,一般在true時設置該屬性,表示已按壓狀態,默認為false
android:state_selected: 設置是否選中狀態,true表示已選中,false表示未選中
android:state_checked: 設置是否勾選狀態,主要用於CheckBox和RadioButton,true表示已被勾選,false表示未被勾選
android:state_checkable: 設置勾選是否可用狀態,類似state_enabled,只是state_enabled會影響觸摸或點擊事件,而state_checkable影響勾選事件
android:state_focused: 設置是否獲得焦點狀態,true表示獲得焦點,默認為false,表示未獲得焦點
android:state_window_focused: 設置當前窗口是否獲得焦點狀態,true表示獲得焦點,false表示未獲得焦點,例如拉下通知欄或彈出對話框時,當前界面就會失去焦點;另外,ListView的ListItem獲得焦點時也會觸發true狀態,可以理解為當前窗口就是ListItem本身
android:state_activated: 設置是否被激活狀態,true表示被激活,false表示未激活,API Level 11及以上才支持,可通過代碼調用控件的setActivated(boolean)方法設置是否激活該控件
android:state_hovered: 設置是否鼠標在上面滑動的狀態,true表示鼠標在上面滑動,默認為false,API Level 14及以上才支持


關於ListView的ListItem樣式,有兩種設置方式,一種是在ListView標簽裏設置android:listSelector屬性,另一種是在ListItem的布局layout裏設置android:background。但是,這兩種設置的結果卻有著不同。同時,使用ListView時也有些其他需要註意的地方,總結如下:

android:listSelector設置的ListItem默認背景是透明的,不管你在selector裏怎麽設置都無法改變它的背景。所以,如果想改ListItem的默認背景,只能通過第二種方式,在ListItem的布局layout裏設置android:background。
當觸摸點擊ListItem時,第一種設置方式下,state_pressed、state_focused和state_window_focused設為true時都會觸發,而第二種設置方式下,只有state_pressed會觸發。
當ListItem裏有Button或CheckBox之類的控件時,會搶占ListItem本身的焦點,導致ListItem本身的觸摸點擊事件會無效。那麽,要解決此問題,有三種解決方案:

將Button或CheckBox換成TextView或ImageView之類的控件
設置Button或CheckBox之類的控件設置focusable屬性為false
設置ListItem的根布局屬性android:descendantFocusability="blocksDescendants"
第三種是最方便,也是推薦的方式,它會將ListItem根布局下的所有子控件都設置為不能獲取焦點。android:descendantFocusability屬性的值有三種,其中,ViewGroup是指設置該屬性的View,本例中就是ListItem的根布局:

beforeDescendants:ViewGroup會優先其子類控件而獲取到焦點
afterDescendants:ViewGroup只有當其子類控件不需要獲取焦點時才獲取焦點
blocksDescendants:ViewGroup會覆蓋子類控件而直接獲得焦點

*********************
layer-list的使用:
paddingMode=nest|stack
item是按照從下往上的順序疊加的,即先定義的item在下面,後面的依次往上面疊放
android:top 頂部的偏移量
android:bottom 底部的偏移量
android:left 左邊的偏移量
android:right 右邊的偏移量

android資源文件