1? ? ? 基本UI(二)
【
常用屬性:
style進度條樣式
Android:max進度最大值
android:progress進度值
setMax(intmax)設置進度最大值
常用方法:
setMax(intmax)設置進度最大值
getMax()獲取進度最大值
setProgress(intprogrss)設置進度值
getProgress()獲取進度值
==練習
android:id="@+id/pdar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
android:max="100"
android:progress="30"/>
@Override
publicvoid onClick(View v) {
//TODO Auto-generated method stub
switch(v.getId()) {
caseR.id.btn_add:
pdar1.setProgress(pdar1.getProgress()+ 10);
break;
caseR.id.btn_minus:
pdar1.setProgress(pdar1.getProgress()- 10);
break;
default:
break;
}
tv_progress.setText(pdar1.getProgress()+"%");
}
}
//如果需要執(zhí)行耗時操作,那么耗時操作就應該放在子線程中執(zhí)行
newThread(){
booleanisRight = true;? //記錄滾動條的滾動方向
publicvoid run() {
//自動來回滾動
while(true){
try{
Thread.sleep(50);
//獲取當前進度
int progress = pbar.getProgress();
//判斷當前的進度的位置,如果是0或最大值,就需要改變方向
if(progress<=0){
isRight= true;? //代表方向往右
}elseif(progress >= pbar.getMax()){
isRight = false;? //代表方向往左
}
//根據滾動的方向修改滾動條的值
if(isRight){
pbar.setProgress(pbar.getProgress()+1);
}else{
pbar.setProgress(pbar.getProgress()-1);
}
}catch (InterruptedException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}.start();
】
【
publicclass MainActivity extends Activity {
privateButton button1;
privateSeekBar seekBar1;
privateSeekBarAutoRun seekBarAutoRun;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViews();
bindListener();
}
privatevoid bindListener() {
//設置View的觸摸事件
button1.setOnTouchListener(newOnTouchListener() {
@Override
publicboolean onTouch(View v, MotionEvent event) {
//TODO Auto-generated method stub
switch(event.getAction()) {
caseMotionEvent.ACTION_DOWN://手指按下
Log.i("msg","手指按下");
//進度條自動開始滾動
if(seekBarAutoRun==null){
seekBarAutoRun= new SeekBarAutoRun();
seekBarAutoRun.start();
}
break;
caseMotionEvent.ACTION_MOVE://手指移動
Log.i("msg","手指移動");
break;
caseMotionEvent.ACTION_UP://手指離開
Log.i("msg","手指離開");
//進度條自動停止?jié)L動
if(seekBarAutoRun!= null){
seekBarAutoRun.autoStopRunTask();
seekBarAutoRun= null;
}
break;
default:
break;
}
returntrue;????? //事件消費的問題
}
});
}
privatevoid findViews() {
button1= (Button) this.findViewById(R.id.button1);
seekBar1= (SeekBar) this.findViewById(R.id.seekBar1);
}
classSeekBarAutoRun extends Thread{
@Override
publicvoid run() {
while(!isInterrupted()){
try{
Thread.sleep(50);
seekBar1.setProgress(seekBar1.getProgress()+ 1);
}catch (InterruptedException e) {
e.printStackTrace();
break;
}
}
}
/**
* 停止自動滾動
*/
publicvoid autoStopRunTask(){
interrupt();
}
}
}
】
【
SeekBar是ProgressBar的子類,功能很相似
SeekBar可以與用戶進行交互,在展示進度的同時允許用戶手動改變進度
特有屬性和方法:
android:thumb設置滑塊所使用的圖片
setOnSeekBarChangeListener(listener)? 設置滑動監(jiān)聽器
】
【特有屬性和方法
android:numberStars設置星星的數量(默認5顆星)
android:rating設置被點亮的星星的個數
android:stepSize設置最小評分的顆粒度
setOnRatingBarChangeListener(listener)設置監(jiān)聽器
】
【
private void bindListener() {
seekbar.setOnSeekBarChangeListener(newOnSeekBarChangeListener() {
@Override
public voidonStopTrackingTouch(SeekBar seekBar) {
// TODOAuto-generated method stub
}
@Override
public voidonStartTrackingTouch(SeekBar seekBar) {
// TODOAuto-generated method stub
}
@Override
public voidonProgressChanged(SeekBar seekBar, int progress,
booleanfromUser) {
if(progress<=30){
//imageview.setImageResource(R.drawable.img1);
imageview.setImageResource(imges[0]);
}elseif(progress<=60){
//imageview.setImageResource(R.drawable.img2);
imageview.setImageResource(imges[1]);
}else if(progress<=90){
//imageview.setImageResource(R.drawable.img3);
imageview.setImageResource(imges[2]);
}
}
});
}
】
【
1、id
2、布局
3、字符串
4、數組
5、樣式和主題
6、菜單
7、已編譯的任意XML資源文件:res/xml
8、未編譯的原始資源文件:res/raw
9、圖像
普通圖像資源:drawable
xml圖像資源:bitmap
圖層(Layer)資源:layer-list
圖像狀態(tài)(State)資源:selector
圖像級別(Level)資源:level-list
淡入淡出(CrossFade)資源:transition
外形(Shape)資源:shape(shape、gradient、padding、corners、stroke)
10、動畫資源
逐幀動畫:res/drawable
補間動畫:res/anim
透明度補間動畫 alpha
縮放補間動畫 scale
旋轉動畫 rotate
移動補間動畫translate
屬性動畫:res/animator(api11出現)
逐幀動畫:res/drawable
屬性動畫:res/animator(api11出現)
】
【
Android的國際化和本地化
internationalization(國際化)簡稱 i18n,因為在i和n之間還有18個字符
localization(本地化),簡稱L10n
一般說明一個地區(qū)的語言時,用語言-地區(qū)的形式,如? zh-CN, zh-TW
//獲取字符串資源
StringssString = getResources().getString(R.string.app_name);
getString(R.string.app_name);????? //等價
】
【
在Android中,推薦使用數組資源文件來定義數組
位置:res/values/arrays.xml
小明
小亮
1
2
//字符串數組
String[]names=getResources().getStringArray(R.array.nameaa);
Log.i("MainActivity",names.toString());
//獲取整型數組資源
int[] intArray=getResources().getIntArray(R.array.interarray);
Log.i("MainActivity",intArray.toString());
】
【
位置:res/xml目錄下
Java代碼中的獲取方式:getResources().getXml(R.xml.文件名稱)
哈利波特
99.9
Thinking In Java
120
小李飛刀
50
//原始xml資源
XmlResourceParserparser =getResources().getXml(R.xml.books);
//解析省略
//這里注意的是,XmlResourceParser是一個pull解析器,不過多了一個方法,就是close方法
//在解析完xml文件后,記得一定要調用close()方法釋放資源
】
【可以新建一個與分辨率無關適配的圖形資源文件夾:drawble
1、普通圖像資源
2、? 圖像狀態(tài)(selector)資源
slt_play.xml
引用:
android:background="@drawable/slt_play"
3、? 外形(shape)資源
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape=["rectangle" | "oval" |"line" | "ring"] >
android:radius="integer"
android:topLeftRadius="integer"
android:topRightRadius="integer"
android:bottomLeftRadius="integer"
android:bottomRightRadius="integer" />
android:angle="integer"
android:centerX="integer"
android:centerY="integer"
android:centerColor="integer"
android:endColor="color"
android:gradientRadius="integer"
android:startColor="color"
android:type=["linear" | "radial" |"sweep"]
android:useLevel=["true" | "false"] />
android:left="integer"
android:top="integer"
android:right="integer"
android:bottom="integer" />
<size
android:width="integer"
android:height="integer" />
android:color="color" />
android:width="integer"
android:color="color"
android:dashWidth="integer"
android:dashGap="integer" />
引用:
android:background="@drawable/shape_demo"
】
【
在代碼中可以通過style和theme來提高代碼的復用性和可維護性。
作用范圍不同,樣式作用于單個小控件,而主題作用于Activity或整個APP
引用位置不同,樣式都是在布局文件中被引用,而主題是在清單文件中被引用
Values\ styles.xml
#F00
italic
//注意:樣式可以實現繼承
引用:
style="@style/text_style2"
主題:定義同樣式,在Style.xml中,引用的形式不同:是在清單文件中引用。
background">#D2E6D7
parent="@android:style/Theme.DeviceDefault.Dialog.NoActionBar">
#32FE32
windowTitleSize">40dip
windowBackground">@drawable/abc
windowNoTitle">true
windowFullscreen">true
在清單文件中引用:
android:name="com.example.day05theme.Activity2"
android:theme="@style/blue_XYSTheme"/>
android:theme="@style/girl_XYSTheme"/>
】
Values下的
color:顏色資源
位置:res/values/colors.xml
dimen:尺寸資源
位置:res/values/dimens.xml
id:id資源
【常見使用形式:values
"1.0"encoding="utf-8"?>
"id"name="tv1"/>
引用:
android:id="@id/tv2"
】
使用的注意事項:
1)在布局中引用id資源的話,必須要保證在引用之前先創(chuàng)建過這個id
也可以在引用時候使用@+id,保證id肯定存在,
PS:@+id的意思就是在使用這個id之前先會判斷id是否存在,如果不存在就創(chuàng)建,如果存在就直接引用
2)在同一個布局文件中不能出現同名的id,但是在不同的布局文件中可以出現相同的id
3)我們可以預先將需要使用的id全部抽取出來作為資源定義在資源文件中
提示:在Android支持資源類型有很多,如果要學習其他資源的使用,那么建議查看官方文檔進行學習,如果要看資源使用的格式,可以查看SDK自帶的資源文件,SDK自帶的資源文件位置:SDK根目錄\platforms\android-XX\data\res