關于Android 中常見控件以及使用

TextView文本框

TextView類的結構

TextView是用于顯示字符串的組件,對于用戶來說就是屏幕中一塊用于顯示文本的區域。TextView類的層次關系如下:

java.lang.Object

?android.view.View

?android.widget.TextView

直接子類:

Button, CheckedTextView, Chronometer, DigitalClock, EditText

間接子類:

AutoCompleteTextView, CheckBox, CompoundButton, ExtractEditText,MultiAutoCompleteTextView, RadioButton, ToggleButton

TextView的使用

我們可以在XML布局文件中聲明及設置TextView,也可以在代碼中生成TextView組件。

在xml布局中:

//顯示超鏈接:

"@+id/textView0"android:layout_width="fill_parent"android:layout_height="wrap_content"

android:textColor="#FF0000"

android:textSize="18dip"android:background="#FFFFFF"android:text="撥打手機:13888888888"

android:gravity="center_vertical|center_horizontal"android:autoLink="phone"/>

"@+id/textView1"android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:textColor="#FF0000"

android:textSize="18dip"android:background="#00FF00"

android:text="Google搜索:http://www.google.com.hk"android:gravity="center_vertical|center_horizontal"

android:autoLink="web"/>

"@+id/textView2"android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:textColor="#FF0000"

android:textSize="18dip"

android:background="#FFFF00"

android:text="發送郵件:1007857613@qq.com"

android:gravity="center_vertical|center_horizontal"android:autoLink="email"/>

//設置文字的滾屏

"@+id/textView3"android:layout_width="fill_parent"

android:layout_height="20dp"android:textSize="18dip"

android:ellipsize="marquee"android:focusable="true"

android:marqueeRepeatLimit="marquee_forever"

android:focusableInTouchMode="true"

android:scrollHorizontally="true"

android:text="文字滾屏文字跑馬燈效果加長加長加長加長加長加長加長加長加長加長加長加長"

android:background="#FF0000"

android:textColor="#FFFFFF">

//設置字符陰影

"@+id/TextView4"android:layout_width="fill_parent"

android:layout_height="wrap_content"android:textSize="18dip"

android:background="#69541b"android:textColor="#FFFFFF"android:text="設置字符串陰影顏色為綠色"

android:shadowColor="#45b97c"android:shadowRadius="3.0"

android:gravity="center_vertical|center_horizontal"/>

//設置字符的外形

"fill_parent"

android:layout_height="wrap_content"android:textSize="18dip"

android:background="#FFFFFF"android:textColor="#FF0000"android:text="設置文字外形為italic"

android:textStyle="italic"android:gravity="center_vertical|center_horizontal"/>

在代碼中:

/動態創建textView

linearLayout= (LinearLayout)findViewById(R.id.linearLayout01);

param=newLinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,

LinearLayout.LayoutParams.WRAP_CONTENT);

LinearLayout layout1 =newLinearLayout(this);

layout1.setOrientation(LinearLayout.HORIZONTAL);

TextView tv =newTextView(this);

tv.setId(200);

tv.setText("動態創建TextView");

tv.setBackgroundColor(Color.GREEN);

tv.setTextColor(Color.RED);

tv.setTextSize(20);

layout1.addView(tv,param);

linearLayout.addView(layout1,param);

EditText編輯框

EditText類的結構

EditText和TextView的功能基本類似,他們之間的主要區別在于EditText提供了可編輯的文本框。

java.lang.Object

android.view.View

android.widget.TextView

android.widget.EditText

直接子類:

AutoCompleteTextView, ExtractEditText

間接子類:

MultiAutoCompleteTextView

EditText的使用

EditText和TextView一樣,既可以在Xml中聲明實現,也可以在代碼中動態的生成,關于在代碼動態生成和TextView的類似,這里就不在贅述。下面以一個實例來說明EditText的簡單使用:

XML布局中:

"TextView"android:id="@+id/textView1"

android:layout_height="wrap_content"android:layout_width="fill_parent">

"@+id/editText1"android:inputType="date"

android:layout_width="fill_parent"android:layout_height="wrap_content"

android:maxLength="40"android:hint="輸入電話號碼"android:textColorHint="#FF000000"

android:phoneNumber="true"android:imeOptions="actionGo">

"@+id/editText2"android:inputType="date"

android:layout_width="fill_parent"android:layout_height="wrap_content"

android:maxLength="40"android:hint="輸入密碼"android:textColorHint="#FF000000"

android:password="true"android:imeOptions="actionSearch">

/rec/values/string.xml中:

stringname="RadioButton1">Windows

"RadioButton2">Linux

"RadioButton3">Mocos

"RadioButton4">Java

在Activity中讓editText顯示在屏幕上并實現監聽:

/**

*獲得TextView對象

*獲得兩個EditTextView對象

*/

textview= (TextView)findViewById(R.id.textView1);

edittext_num= (EditText)findViewById(R.id.editText1);

edittext_pass= (EditText)findViewById(R.id.editText2);

/**

*對EditText進行監聽

*獲得編輯框里面的內容并顯示

*/

edittext_num.addTextChangedListener(newTextWatcher() {

@Override

publicvoidonTextChanged(CharSequence s,intstart,intbefore,intcount) {

//if(!(textview.getText().toString()==null))

textview.setText("edittext_num:"+edittext_num.getText().toString());

}

@Override

publicvoidbeforeTextChanged(CharSequence s,intstart,intcount,

intafter) {

//TODOAuto-generated method stub

}

publicvoidafterTextChanged(Editable s) {

//TODOAuto-generated method stub

}

});

edittext_pass.addTextChangedListener(newTextWatcher() {

@Override

publicvoidonTextChanged(CharSequence s,intstart,intbefore,intcount) {

//if(!(textview.getText().toString()==null))

textview.setText("你正在編輯edittext_pass");

}

publicvoidbeforeTextChanged(CharSequence s,intstart,intcount,

intafter) {

//TODOAuto-generated method stub

}

publicvoidafterTextChanged(Editable s) {

//TODOAuto-generated method stub

}

});

}

Button按鈕

Button類的結構

Button類的層次關系如下:

java.lang.Object

?android.view.View

?android.widget.TextView

?android.widget.Button

直接子類:

CompoundButton

間接子類:

CheckBox, RadioButton, ToggleButton

Button的使用

Button可以在xml中聲明,也可以在代碼中動態創建。

在xml中:

"vertical"

android:layout_height="wrap_content"android:id="@+id/button1"

android:layout_width="wrap_content"

android:textColor="#0000FF"

android:text="這是button1,可以點擊"/>

"vertical"

android:layout_height="wrap_content"android:id="@+id/button2"

android:layout_width="wrap_content"

android:textColor="#CD0000"

android:text="這是button2,可以點擊"/>

"vertical"

android:layout_height="wrap_content"android:id="@+id/button3"

android:layout_width="wrap_content"

android:textColor="#000000"

android:text="這是button3,可以點擊"/>

在代碼中創建Button:

button4=newButton(this);

button4.setId(100);

button4.setText("動態創建的Button");

button4.setTextColor(Color.GREEN);

創建好了Button后,我們就可以對其進行監聽了,其中有兩種方式:

一種是繼承OnClickListenner接口:

publicclassButtonActivityextendsActivityimplementsOnClickListener{

button1= (Button)findViewById(R.id.button1);

button1.setOnClickListener(this);

publicvoidonClick(View v) {

switch(v.getId()){

caseR.id.button1:

.........

break;

}

}

}

另一種方式是:

publicclassButtonActivityextendsActivity{

button1= (Button)findViewById(R.id.button1);

button1.setOnClickListener(newButton.OnClickListener(){

publicvoidonClick(View v) {

//TODOAuto-generated method stub

..........

}

});

ImageView類的結構

ImageView顯示任意圖像,例如圖標。ImageView類可以加載各種來源的圖片(如資源或圖片庫),需要計算圖像的尺寸,比便它可以在其他布局中使用,并提供例如縮放和著色(渲染)各種顯示選項。

繼承關系

public classView.OnClickListnerextendsView

java.lang.Object

android.view.View

android.widget.ImageView

直接子類

ImageButton, QuickContactBadge

間接子類

ZoomButton

ImageView的使用

我們首先要在XML文件中聲明一個ImageView和一個TextView :

android:id="@+id/ImageView01"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

>

android:id="@+id/TextView01"

android:layout_below="@id/ImageView01"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

>

然后在Activity中設置顯示ImageView:

isrung=true;

//獲得ImageView的對象

imageview= (ImageView)this.findViewById(R.id.ImageView01);

textview= (TextView)this.findViewById(R.id.TextView01);

//設置imageview的圖片資源。同樣可以再xml布局中像下面這樣寫

//android:src="@drawable/logo"

imageview.setImageResource(R.drawable.imag2);

//設置imageview的Alpha值

imageview.setAlpha(image_alpha);

之后就需要用一個線程來實時更新alpha:

//開啟一個線程來讓Alpha值遞減

newThread(newRunnable() {

publicvoidrun()

{

while(isrung)

{

try

{

Thread.sleep(200);

//更新Alpha值

updateAlpha();

}

catch(InterruptedException e)

{

e.printStackTrace();

}

}

}

}).start();

//接受消息之后更新imageview視圖

mHandler=newHandler() {

@Override

publicvoidhandleMessage(Message msg)

{

super.handleMessage(msg);

imageview.setAlpha(image_alpha);

textview.setText("現在alpha值是:"+Integer.toString(image_alpha));

//更新

imageview.invalidate();

}

};

}

publicvoidupdateAlpha()

{

if(image_alpha- 7 >= 0)

{

image_alpha-= 7;

}

else

{

image_alpha= 0;

isrung=false;

}

//發送需要更新imageview視圖的消息

mHandler.sendMessage(mHandler.obtainMessage());

}

ProgressBar進度條

ProgressBar類概述

progressBar進度條是一個顯示進度的控件,Android提供了兩大類進度條樣式,長形進度條樣式progress-BarStyleHorizontal和圓形進度條progressBarStyleLarge.ProgressBar類的層次關系如下:

java.lang.Object

android.view.View

android.widget.Progress

ProgressBar的使用

要實現一個簡單的進度條的效果,我們可以首先在XML文件中聲明一個長形進度條和一個圓形進度條:

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"

/>

android:id="@+id/ProgressBar01"

style="?android:attr/progressBarStyleHorizontal"//設置樣式為長形進度條

android:layout_width="200dp"

android:layout_height="wrap_content"

android:visibility="gone"//設置當前不可見

/>

android:id="@+id/ProgressBar02"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

style="?android:attr/progressBarStyleLarge"//設置樣式為圓形進度條

android:max="100"

android:progress="50"

android:secondaryProgress="70"

android:visibility="gone"//設置當前不可見

/>

android:id="@+id/Button01"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="開始"/>

然后在Activity中實現監聽并通過線程來改變ProgressBar的值:

/設置窗口模式,,因為需要顯示進度條在標題欄

requestWindowFeature(Window.FEATURE_PROGRESS);

setProgressBarVisibility(true);

setContentView(R.layout.main);

//取得ProgressBar

m_ProgressBar= (ProgressBar) findViewById(R.id.ProgressBar01);

m_ProgressBar2= (ProgressBar) findViewById(R.id.ProgressBar02);

mButton01= (Button)findViewById(R.id.Button01);

m_ProgressBar.setIndeterminate(false);

m_ProgressBar2.setIndeterminate(false);

//當按鈕按下時開始執行,

mButton01.setOnClickListener(newButton.OnClickListener()

{

@Override

publicvoidonClick(View v)

{

//TODOAuto-generated method stub

//設置ProgressBar為可見狀態

m_ProgressBar.setVisibility(View.VISIBLE);

m_ProgressBar2.setVisibility(View.VISIBLE);

//設置ProgressBar的最大值

m_ProgressBar.setMax(100);

//設置ProgressBar當前值

m_ProgressBar.setProgress(0);

m_ProgressBar2.setProgress(0);

//通過線程來改變ProgressBar的值

newThread(newRunnable() {

publicvoidrun()

{

for(inti = 0; i < 10; i++)

{

try

{

intCounter= (i + 1) * 20;

Thread.sleep(1000);

if(i == 4)

{

Message m =newMessage();

m.what= ProgressBarActivity.GUI_STOP_NOTIFIER;

ProgressBarActivity.this.myMessageHandler.sendMessage(m);

break;

}

else

{

Message m =newMessage();

m.what= ProgressBarActivity.GUI_THREADING_NOTIFIER;

ProgressBarActivity.this.myMessageHandler.sendMessage(m);

}

}

catch(Exception e)

{

e.printStackTrace();

}

}

}

}).start();

}

});

}

HandlermyMessageHandler=newHandler()

{

// @Override

publicvoidhandleMessage(Message msg)

{

switch(msg.what)

{

//ProgressBar已經是對大值

caseProgressBarActivity.GUI_STOP_NOTIFIER:

m_ProgressBar.setVisibility(View.GONE);

m_ProgressBar2.setVisibility(View.GONE);

Thread.currentThread().interrupt();

break;

caseProgressBarActivity.GUI_THREADING_NOTIFIER:

if(!Thread.currentThread().isInterrupted())

{

//改變ProgressBar的當前值

m_ProgressBar.setProgress(intCounter);

m_ProgressBar2.setProgress(intCounter);

//設置標題欄中前景的一個進度條進度值

setProgress(intCounter*100);

//設置標題欄中后面的一個進度條進度值

setSecondaryProgress(intCounter*100);//

}

break;

}

super.handleMessage(msg);

}

};

Dialog對話框

Dialog對話框

Android中實現對話框可以使用AlertDialog.類,還可以自定義對話框。如果對話框設置了按鈕,那么就需要對其設置監聽OnClickListener。

然后在Activity中使用AlertDialog創建對話框:

Dialog dialog =newAlertDialog.Builder(DialogActivity.this)

.setTitle("登陸提示")//設置標題

.setMessage("這里需要登錄!")//設置內容

.setPositiveButton("確定",//設置確定按鈕

newDialogInterface.OnClickListener()

{

publicvoidonClick(DialogInterface dialog,intwhichButton)

{

//點擊“確定”轉向登陸框

LayoutInflater factory = LayoutInflater.from(DialogActivity.this);

//得到自定義對話框

finalView DialogView = factory.inflate(R.layout.dialog,null);

//創建對話框

AlertDialog dlg =newAlertDialog.Builder(DialogActivity.this)

.setTitle("登錄框")

.setView(DialogView)//設置自定義對話框的樣式

.setPositiveButton("確定",//設置"確定"按鈕

newDialogInterface.OnClickListener()//設置事件監聽

{

publicvoidonClick(DialogInterface dialog,intwhichButton)

{

//輸入完成后,點擊“確定”開始登陸

m_Dialog= ProgressDialog.show

(

DialogActivity.this,

"請等待...",

"正在為你登錄...",

true

);

newThread()

{

publicvoidrun()

{

try

{

sleep(3000);

}

catch(Exception e)

{

e.printStackTrace();

}

finally

{

//登錄結束,取消m_Dialog對話框

m_Dialog.dismiss();

}

}

}.start();

}

})

.setNegativeButton("取消",//設置“取消”按鈕

newDialogInterface.OnClickListener()

{

publicvoidonClick(DialogInterface dialog,intwhichButton)

{

//點擊"取消"按鈕之后退出程序

DialogActivity.this.finish();

}

})

.create();//創建

dlg.show();//顯示

}

}).setNeutralButton("退出",

newDialogInterface.OnClickListener()

{

publicvoidonClick(DialogInterface dialog,intwhichButton)

{

//點擊"退出"按鈕之后推出程序

DialogActivity.this.finish();

}

}).create();//創建按鈕

//顯示對話框

dialog.show();

ProgressDialog對話框中的進度條

ProgressDialog類概述

前面,我們學習了對話框和進度條,現在將進度條加入到對話框,使得對話框更加的完善。我們知道進度條有長形進度條和圓形進度條,所以也就有對話框中的長形進度條和對話框中的圓形進度條。

ProgressDialog中常用的方法

setProgressStyle: 設置進度條風格,風格為圓形,旋轉的或者風格為長形的;

setTitle: 設置ProgressDialog的標題

setMessage: 設置ProgressDialog的提示信息

setIcon:設置ProgressDialog的標題圖標

setIndeterminate:設置ProgressDialog的進度條是否不明確

setCancelable:設置ProgressDialog是否可以按回退鍵取消

setButton:設置ProgressDialog的一個Button(需要監聽Button事件)

show:顯示ProgressDialog

29.3 ProgressDialog的使用

要實現29.1節中圖形中所示的效果,我們首先在xml中聲明兩個Button:

android:id="@+id/yuan_button01"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="圓形進度條"/>

android:id="@+id/chang_button02"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="長形進度條"/>

在Activity中得到Button對象,并分別實現監聽,在監聽里面生成我們所需要的帶進度條的對話框,對于長形進度條我們需要用線程來實時更新進度條的值。具體代碼如下:

/得到按鈕對象

mButton01= (Button)findViewById(R.id.yuan_button01);

mButton02= (Button)findViewById(R.id.chang_button02);

//設置mButton01的事件監聽

mButton01.setOnClickListener(newButton.OnClickListener() {

@Override

publicvoidonClick(View v)

{

//TODOAuto-generated method stub

//創建ProgressDialog對象

m_pDialog=newProgressDialog(ProgressDialogActivity.this);

//設置進度條風格,風格為圓形,旋轉的

m_pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);

//設置ProgressDialog標題

m_pDialog.setTitle("提示");

//設置ProgressDialog提示信息

m_pDialog.setMessage("這是一個圓形進度條對話框");

//設置ProgressDialog標題圖標

m_pDialog.setIcon(R.drawable.imag1);

//設置ProgressDialog的進度條是否不明確

m_pDialog.setIndeterminate(false);

//設置ProgressDialog是否可以按退回按鍵取消

m_pDialog.setCancelable(true);

//設置ProgressDialog的一個Button

m_pDialog.setButton("確定",newDialogInterface.OnClickListener() {

publicvoidonClick(DialogInterface dialog,inti)

{

//點擊“確定按鈕”取消對話框

dialog.cancel();

}

});

//讓ProgressDialog顯示

m_pDialog.show();

}

});

//設置mButton02的事件監聽

mButton02.setOnClickListener(newButton.OnClickListener() {

@Override

publicvoidonClick(View v)

{

//TODOAuto-generated method stub

m_count= 0;

//創建ProgressDialog對象

m_pDialog=newProgressDialog(ProgressDialogActivity.this);

//設置進度條風格,風格為長形

m_pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

//設置ProgressDialog標題

m_pDialog.setTitle("提示");

//設置ProgressDialog提示信息

m_pDialog.setMessage("這是一個長形對話框進度條");

//設置ProgressDialog標題圖標

m_pDialog.setIcon(R.drawable.imag2);

//設置ProgressDialog進度條進度

m_pDialog.setProgress(100);

//設置ProgressDialog的進度條是否不明確

m_pDialog.setIndeterminate(false);

//設置ProgressDialog是否可以按退回按鍵取消

m_pDialog.setCancelable(true);

//讓ProgressDialog顯示

m_pDialog.show();

newThread()

{

publicvoidrun()

{

try

{

while(m_count<= 100)

{

//由線程來控制進度。

m_pDialog.setProgress(m_count++);

Thread.sleep(100);

}

m_pDialog.cancel();

}

catch(InterruptedException e)

{

m_pDialog.cancel();

}

}

}.start();

}

});

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容