標籤:不同 位移量 duration 掃描 滑動 nim sla 介面布局 字型
代碼與資源分離原則:便於維護與修改
shape:定義圖形selector:按照不同的情況載入不同的color或drawablelayer-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;
shape6種標籤: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:drawable屬性除了引用@drawable資源,也可以引用@color顏色值;但android:color只能引用@color;
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資源檔