1.文本框(TextView)和編輯框(EditText)
文本框(TextView)不允許用戶編輯文本內(nèi)容,而編輯框(EditText)允許用戶編輯文本內(nèi)容
2.按鈕(Button)和圖片按鈕(ImageButton)
Button顯示文字菠红,ImageButton顯示圖片牙肝。
為ImageButton指定android:text屬性沒用脾猛,不會顯示文字
可以指定android:background為按鈕增加背景圖片箍镜,但這圖片是固定的
可以指定android:src為圖片按鈕增加圖片屬性
其實,src才是設置圖標渔欢,而background只是設置背景墓塌。
如果控件的大小是100100 圖片資源是8080的話,那么用src奥额,圖片就會居中顯示苫幢,如果使用background那么圖片就會被拉伸充滿控件。
重要的是披坏,background是底層的圖片資源态坦,src是覆蓋在background上面的資源,他們可以疊加使用棒拂,實現(xiàn)選中的效果伞梯。
3.單選按鈕(RadioButton)和復選框(CheckBox)
多了一個android:checked屬性,用于指定初始時是否被選中
checkBox.setOnCheckedChangeListener( new OnCheckedChangeListener(){
public void onCheckedChanged( CompoundButton buttonView, Boolean isChecked ){
if( checkbox.isChecked() ){
checkbox.getText();
}
}
} )
4.計時器組件Chronometer用法
紅色字體表示常用的方法
final Chronometer ch = (Chronometer)findViewById(R.id.test); //獲取計時器組件
Button start = (Button)findViewById(R.id.start); //獲取“開始”按鈕
start.setOnClickListener(new OnClickListener(){
public void onClick(View source)
{
//設置開始計時時間
ch.setBase(SystemClock.elapsedRealtime());
//啟動計時器
ch.start();
}
});
ch.setOnChronometerTickListener(new OnChronometerTickListener(){
public void onChronometerTick(Chronometer ch)
{
//如果從開始計時到現(xiàn)在超過了20s帚屉。
if(SystemClock.elapsedRealtime() - ch.getBase() > 20 * 1000)
ch.stop();
}
});
5.圖像視圖(ImageView)
它支持屬性android:scaleType setScaleType(ImageView.ScaleType)
matrix(ImageView.ScaleType.MATRIX):使用matrix方式進行
fixXY(ImageView.ScaleType.FIX_XY):對圖片橫向縱向獨立縮放谜诫,會改變縱橫比
fitStart(ImageView.ScaleType.FIT_START):保持縱橫比,圖片較長的邊長與ImageView相應的邊長相等攻旦,縮放后放在左上角
fitCenter(ImageView.ScaleType.FIT_CENTER):保持縱橫比喻旷,圖片較長的邊長與ImageView相應的邊長相等,縮放后放在中央
fitEnd(ImageView.ScaleType.FIT_END):保持縱橫比牢屋,圖片較長的邊長與ImageView相應的邊長相等且预,縮放后放在右下角
center(ImageView.ScaleType.CENTER):放中間,不縮放
centerCrop(ImageView.ScaleType.CENTER_CROP):保持縱橫比烙无,使圖片能完全覆蓋ImageView
centerInside(ImageView.ScaleType.CENTER_INSIDE):保持縱橫比锋谐,使ImageView能完全顯示圖片
6.spinner的功能和用法
如果可以確定spinner里面的列表項,那么直接在/res/layout/main.xml里面指定
<Spinner
……
android:entries=”@string/books”
/>
然后在/res/value/string.xml里面指定
<resources>
<string name="books">
<item>瘋狂Java講義</item>
<item>瘋狂Ajax講義</item>
<item>瘋狂XML講義</item>
</string-array>
</resources>
如果不確定里面的列表項截酷,那么必須要提供一個Adapter涮拗,這個Adapter負責決定Spinner列表每項的內(nèi)容
BaseAdapter ba = new BaseAdapter()
{
public int getCount(){ return 10; }
public Object getItem(int position){ return null; }
public long getItemId(int position){ return 0; }
//上面三個函數(shù)都是繼承的虛函數(shù)
//重寫該方法,該方法返回的View將作為列表框的每項
public View getView(int position, View convertView, ViewGroup parent)
{
//創(chuàng)建一個LinearLayout,并向其中添加組件
LinearLayout line = new LinearLayout(SpinnerTest2.this);
TextView text = new TextView(SpinnerTest2.this);
line.addView(text);
//返回LinearLayout實例
return line;
}
};
Spinner spinner = (Spinner)findViewById(R.id.test);
spinner.setAdapter(ba);
7.日期三热、時間選擇器(DatePicker和TimePicker)
//獲取當前的年鼓择、月、日就漾、小時呐能、分鐘
Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
hour = c.get(Calendar.HOUR);
minute = c.get(Calendar.MINUTE);
//初始化DatePicker組件,初始化時指定監(jiān)聽器
datePicker.init(year , month ,day , new OnDateChangedListener()
{
@Override
public void onDateChanged(DatePicker arg0, int year, int month, int day)
{
ChooseDate.this.year = year;
ChooseDate.this.month = month;
ChooseDate.this.day = day;
//顯示當前日期从藤、時間
showDate(year, month , day , hour, minute);
}
});
//為TimePicker指定監(jiān)聽器
timePicker.setOnTimeChangedListener(new OnTimeChangedListener()
{
@Override
public void onTimeChanged(TimePicker arg0, int hour, int minute)
{
ChooseDate.this.hour = hour;
ChooseDate.this.minute = minute;
//顯示當前日期催跪、時間
showDate(year, month , day , hour, minute);
}
});
8.自動完成文本框(AutoCompleteTextView)
比普通文本框多了一個功能:當用戶輸入一定字符后,自動完成文本框會顯示一個下拉菜單夷野,供用戶從中選擇懊蒸,當用戶選擇某個菜單后,組件會按用戶選擇自動填寫該文本框
使用該組件很簡單悯搔,只要為它設置一個Adapter骑丸,該Adapter封裝了AutoCompleteTextView預設的提示文本
//創(chuàng)建一個ArrayAdapter,封裝數(shù)組
ArrayAdapter<String> aa = new ArrayAdapter<String>(
this,
android.R.layout.simple_dropdown_item_1line,
books); // books是String數(shù)組
AutoCompleteTextView actv = (AutoCompleteTextView)findViewById(R.id.auto);
//設置Adapter
actv.setAdapter(aa);
9.進度條(ProgressBar)
通過style屬性可以為ProgressBar指定風格妒貌。該屬性可以有如下的屬性值:
1.@android:style/Widget.ProgressBar.Horizontal 水平進度條
2.@android:style/Widget.ProgressBar.Inverse 不斷跳躍通危、旋轉畫面的進度條
3.@android:style/Widget.ProgressBar.Large 大進度條
4.@android:style/Widget.ProgressBar.Large.Inverse不斷跳躍、旋轉畫面的大進度條
5.@android:style/Widget.ProgressBar.Small 小進度條
6.@android:style/Widget.ProgressBar.Small.Inverse不斷跳躍灌曙、旋轉畫面的小進度條
ProgressBar提供如下方法來操作進度
1.setProgress(int) 設置進度的完成百分比
2.incrementProgressBy(int) 設置進度條的增加或減少菊碟。參數(shù)為正增加,參數(shù)為負減少
實例:
public void onCreate(Bundle savedInstanceState)
{
final ProgressBar bar = (ProgressBar) findViewById(R.id.bar);
//創(chuàng)建一個負責更新的進度的Handler
final Handler mHandler = new Handler()
{
public void handleMessage(Message msg)
{
if (msg.what == 0x111)
bar.setProgress(status);
}
};
//啟動線程來執(zhí)行任務
new Thread()
{
public void run()
{
while (status < 100)
{
// 獲取耗時操作的完成百分比
status = doWork();
// 發(fā)送消息到Handler
Message m = new Message();
m.what = 0x111;
// 發(fā)送消息
mHandler.sendMessage(m);
}
}
}.start();
}
//模擬一個耗時的操作在刺。
public int doWork()
{
//為數(shù)組元素賦值
data[hasData++] = (int)(Math.random() * 100);
try
{
Thread.sleep(100);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
return hasData;
}
10.選項卡(TabHost)
TabHost僅僅只是一個簡單的容器逆害,它提供如下方法
1.newTabSpec(String tag) 創(chuàng)建選項卡
2.addTab(TabHost.TabSpec tabSpec) 添加選項卡
使用TabHost的一般步驟為:
? A. 在界面中定義TabHost組件,并為該組件定義該選項卡的內(nèi)容
? B. Activity應該繼承TabActivity
? C. 調(diào)用TabActivity的getTabHost()來獲取TabHost對象
? D. 通過TabHost對象的方法來創(chuàng)建選項卡蚣驼、添加選項卡
選項卡主要由TabHost魄幕、TabWidget、FrameLayout3個組件組成颖杏,三者缺一不可纯陨,想象一下選項卡的特點,多個卡重疊在一起留储,所以用FrameLayout即幀布局是必要的翼抠。另外需要注意的是TabHost、TabWidget获讳、FrameLayout三個組件的android:id必須使用系統(tǒng)默認的名稱机久,而不能自己隨意定義,否則會出錯赔嚎。
實例:
TabHost tabHost = getTabHost();或者findViewById也行,不過后面要有tabHost.setup();
//設置使用TabHost布局
LayoutInflater.from(this).inflate(R.layout.main, tabHost.getTabContentView(), true);
//添加第一個標簽頁
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("已接電話").setContent(R.id.tab01));
//添加第二個標簽頁,在標簽標題上放置圖標
tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("呼出電話" ,
getResources().getDrawable(R.drawable.icon)).setContent(R.id.tab02));
//添加第三個標簽頁
tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("未接電話").setContent(R.id.tab03));
11.圖像切換器(ImageSwitcher)
is.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
is.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));
is.setFactory(new ViewFactory(){
@Override
public View makeView() {
// TODO Auto-generated method stub
return iv;
}
});
12.網(wǎng)格視圖(GridView)
使用GridView一般指定numColumn大于1尤误,否則取默認值為1.那么GridView就變成了ListView
屬性android:stretchMode支持如下屬性
1.none 不拉伸
2.spacingWidth 僅拉伸元素之間的間距
3.spacingWidthUniform 表格侠畔、元素之間的間距一起拉伸
4.columnWidth 僅拉伸表格
13.畫廊視圖(Gallery)(現(xiàn)在已經(jīng)被棄用了,不過還是列出來吧)
Gallery用法很簡單——為它提供一個內(nèi)容Adapter损晤,該Adapter的getView方法所返回的View可作為Gallery的列表項软棺。可以通過OnItemSelectedListener監(jiān)聽選擇項的改變
14.列表試圖(ListView和ListActivity)
1.創(chuàng)建ListView由兩種方式:
2.直接使用ListView進行創(chuàng)建
讓Activity繼承ListActivity(繼承了ListActivity的類無需調(diào)用setContentView()來顯示頁面尤勋,可以直接設置適配器)
一旦獲得ListView后喘落,就要創(chuàng)建顯示的列表項了。需要借助內(nèi)容Adapter最冰,內(nèi)容Adapter負責提供需要顯示的列表項
ListView list2 = (ListView)findViewById(R.id.list2);
//定義一個數(shù)組
String[] arr ={"孫悟空" , "豬八戒" , "牛魔王"};
//將數(shù)組包裝ArrayAdapter
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
this , android.R.layout.simple_list_item_1 , arr);
//為ListView設置Adapter
list2.setAdapter(arrayAdapter);
創(chuàng)建ArrayAdapter時必須指定一個textViewResourceId瘦棋,該參數(shù)決定每個列表項的外觀
1.simple_list_item_1 每個列表項是普通的TextView
2.simple_list_item_2 每個列表項是普通的TextView(字體略大)
3.simple_list_item_checked 每個列表項是已勾選的列表項
4.simple_list_item_multiple_choice 每個列表項是帶多選框的文本
5.simple_list_item_single_choice 每個列表項是帶多單選按鈕的文本
15.使用AlertDialog
1.創(chuàng)建AlertDialog.Builder對象,該對象是AlertDialog的創(chuàng)建器
2.調(diào)用AlertDialog.Builder方法為對話框設置圖標暖哨、標題等
3.調(diào)用AlertDialog.Builder的create()方法創(chuàng)建AlertDialog對話框
4.調(diào)用AlertDialog的show()方法顯示對話框
AlertDialog ad = new AlertDialog.Builder(MainActivity.this).create();
ad.setIcon(R.drawable.a);
ad.setTitle("系統(tǒng)提示: ");
ad.setMessage("帶取消赌朋、中立和確定按鈕的對話框!");
ad.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "篇裁。沛慢。。", Toast.LENGTH_SHORT).show();
}
});
});
ad.show();
16.使用Toast顯示提示框
步驟如下:
? 調(diào)用Toast構造器或makeText方法創(chuàng)建Toast對象
? 調(diào)用Toast方法來設置該消息的對齊方式等
? 調(diào)用Toast的show()方法顯示出來
? Toast toast = Toast.makeText(ToastTest.this, "信息", Toast.LENGTH_LONG).show();
17.Notification(一般顯示網(wǎng)絡狀態(tài)达布、電池狀態(tài)团甲、時間等)
使用Notification發(fā)送Notification步驟:
? 調(diào)用getSystemService(NOTIFICATION_SERVICE)方法獲取系統(tǒng)的Notification Manager服務
? 通過構造器創(chuàng)建一個Notification對象
? 為Notification設置屬性
? 通過Notification Manager發(fā)送Notification
final NotificationManager nM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notify = new Notification(R.drawable.<id>, “顯示通知”, System.currentTimeMillis());
nM.notify(NOTIFY,notify); //NOTIFY是一個自己定義的ID