Android常用控制元件,用執行緒寫一個進度條。
一、事件監聽(三種寫法)
1、標籤上直接繫結監聽方法
public void xxx(View view)
2、 建立監聽器物件,元件再繫結監聽器物件
2.1、匿名內部類
2.2、使用匿名內部類並定義成全域性的屬性
二、文字框(TextView)
1、TextView直接繼承View,作用就是在介面上顯示文字(類似於Swing中的JLabel),同時它還是EditText、Button兩個UI元件類的父類。另外Android關閉了它的文字編輯功能,如果想編輯內容,則可以使用EditText。
2、常用屬性
①、text
②、 autoLink
③、 singleLine(已過時,現在應為:android:lines)
④、 lines
⑤、 minLines
⑥、 textColor
⑦、 textSize
⑧、 textStyle :字型風格粗體、斜體
⑨、 backgroud :設定背景,可以是顏色或圖片
⑩、 drawableXX 設定文字的icon
⑪、 ellipsize 當文字長度超過textview寬度時的顯示方式
android:ellipsize="start" 省略號顯示在開頭 "...pedia"
android:ellipsize="end" 省略號顯示在結尾 "encyc..."
android:ellipsize="middle" 省略號顯示在中間 "en...dia"
android:ellipsize="marquee" 以橫向滾動方式顯示(另外還需要設定其它三個屬性,否則不滾動,即必須讓該控制元件獲得焦點)
3、編輯框(EdiText)
(1)、EditText和TextView非常相似,它與TextView共用了絕大總分XML屬性和文法,
二者最大區別在於:EditText可以接受使用者輸入。
(2)、常用屬性:
①、inputType:它是EditText元件最重要的屬性,它相當於HTML中<input>標籤的type屬性,用於EditText指定輸入元件的型別。
常用取值有:number|numberPassword|date|phone
②、hint:提示字元資訊
三、Toast(吐絲框)
1、Toast是Android中的一種簡易的訊息提示框(注意使用網格佈局:LinearLayout)
在activity_main.xml裡面配佈局,如下:
<Button
android:layout_width="match_parent"
android:onClick="studyToast"
android:text="點選彈出框"
android:layout_height="wrap_content" />
2、使用這個類的最簡單的方法是呼叫靜態方法構造您所需要的一切,並返回一個新的Toast物件。
Toast toast=Toast.makeText(getApplicationContext(), "預設的Toast", Toast.LENGTH_SHORT);
toast.show();
第一個引數:當前的上下文環境。可用getApplicationContext()或this
第二個引數:要顯示的字串。也可是R.string中字串ID
第三個引數:顯示的時間長短。Toast預設的有兩個LENGTH_LONG(長)和LENGTH_SHORT(短),也可以使用毫秒如2000ms
public void studyToast(View view) {
Toast.makeText(this, "你好,Toast", Toast.LENGTH_SHORT).show();
}
四、ImageView
1、注意事項:res下面的資源名不能使用大寫字母,特別是圖片資源中的圖片的檔名,會造成R.java檔案丟失,改正確後即可
例如:smallImage.png錯誤,small_image.png正確
2、scaleType(縮放型別)
(1)、scaleType的屬性值有:matrix fitXY fitStart fitCenter fitEnd center centerCrop centerInside
①、matrix 用矩陣來繪製(從左上角起始的矩陣區域)
②、fitXY 不按比例縮放圖片,目標是把整個圖片塞滿整個View
③、fitStart 把圖片按比例擴大或縮小到View的[[[寬度]]],然後置頂部顯示(圖片會完整顯示)
④fitCenter 把圖片按比例擴大或縮小到View的[[[寬度]]],然後居中顯示(圖片會完整顯示)
⑤、fitEnd 把圖片按比例擴大或縮小到View的[[[寬度]]],然後置底部顯示(圖片會完整顯示)
⑥、center 不縮放,將圖片按原來大小居中顯示,當圖片寬高超過View的寬高時,則擷取圖片的居中部分顯示
⑦、centerCrop 按比例擴大(或縮小)圖片的size居中顯示,使得圖片的長寬的[[[等於或大於]]]View的長寬
⑧、centerInside 按比例擴大(或縮小)圖片的size居中顯示,使得圖片的長寬的[[[等於或小於]]]View的長寬 (圖片會完整顯示)
ps:用得最多還是fitXY fitStart fitCenter fitEnd,預設是fitCenter
2、 scaleType屬性分二種情況分析
①、 圖片比ImageView小(android08_widget03_d01_v1)
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginRight="10dp"
android:background="#FF0000"
android:scaleType="matrix"
android:src="@drawable/small_image" />
②、圖片比ImageView大(android08_widget03_d01_v2)
<ImageView
android:layout_width="100dp"
android:background="@color/colorAccent"
android:src="@drawable/small_image"
android:scaleType="matrix"
android:layout_height="100dp" />
五、ProgressBar(進度條)
1、常用屬性
//預設為圓形
style="?android:attr/progressBarStyleHorizontal"
//進度條的進度
android:progress="33"
//進度條最大值
android:max="100"
2、執行緒休眠
①、Thread.sleep(100);//拋異常
②、SystemClock.sleep(100);//不拋異常
3、執行緒注意事項:
不能在主執行緒中執行耗時的操作,只能在子執行緒中操作
另外,在子執行緒中不能操作主執行緒中的控制元件(ProgressBar除外)
eg、SubThread->MainThread 錯誤
SubThread->Handler->MainThread 正確
4、用執行緒寫一個進度條
在activity_main_xml裡的佈局:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="60dp">
<TextView
android:id="@+id/tv_main_tv1"
android:textColor="@color/red"
android:textSize="80dp"
android:layout_width="90dp"
android:layout_height="match_parent" />
<ProgressBar
android:id="@+id/pb_main_pb1"
android:layout_width="match_parent"
style="?android:attr/progressBarStyleHorizontal"
android:max="100"
android:layout_height="60dp" />
</FrameLayout>
<Button
android:id="@+id/btn_main_btn1"
android:layout_width="match_parent"
android:text="啟動進度條"
android:onClick="setProgressBar"
android:layout_height="wrap_content" />
MainActivity.java裡面的方法
public class MainActivity extends AppCompatActivity {
//初始化進度條
private ProgressBar pb_main_pb1;
private int prosess;
private TextView tv_main_tv1;
private MyHandler myHandler = new MyHandler();
private int code = 1;
private class MyHandler extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(code == msg.what){
prosess ++;
pb_main_pb1.setProgress(prosess);
tv_main_tv1.setText(prosess + "%");
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pb_main_pb1 = this.findViewById(R.id.pb_main_pb1);
tv_main_tv1 = this.findViewById(R.id.tv_main_tv1);
}
//啟動進度條
public void setProgressBar(View view) {
//判斷進度條為0時方可啟動
if(0==prosess){
new MyThread().start();
}
}
//編寫子執行緒 進行具體操作
public class MyThread extends Thread{
@Override
public void run() {
super.run();
while (true){
//設定休眠時間
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
//判斷進度條的進度 如果執行完了 恢復原來的進度
if(prosess == 100){
prosess = 0;
break;
}
//觸發Handler 將子執行緒的請求通過Handler傳送給主執行緒
Message msg = new Message();
//為了方便多個執行緒同時進行
msg.what = 1;
myHandler.sendMessage(msg);
}
}
}