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();
}
});