關于Android界面組件的基本用法

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
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市黍聂,隨后出現(xiàn)的幾起案子躺苦,更是在濱河造成了極大的恐慌,老刑警劉巖分冈,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件圾另,死亡現(xiàn)場離奇詭異,居然都是意外死亡雕沉,警方通過查閱死者的電腦和手機集乔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坡椒,“玉大人扰路,你說我怎么就攤上這事【蟮穑” “怎么了汗唱?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丈攒。 經(jīng)常有香客問我哩罪,道長授霸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任际插,我火速辦了婚禮碘耳,結果婚禮上,老公的妹妹穿的比我還像新娘框弛。我一直安慰自己辛辨,他們只是感情好,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布瑟枫。 她就那樣靜靜地躺著斗搞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪慷妙。 梳的紋絲不亂的頭發(fā)上僻焚,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音景殷,去河邊找鬼溅呢。 笑死,一個胖子當著我的面吹牛猿挚,可吹牛的內(nèi)容都是我干的咐旧。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼绩蜻,長吁一口氣:“原來是場噩夢啊……” “哼铣墨!你這毒婦竟也來了?” 一聲冷哼從身側響起办绝,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤伊约,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后孕蝉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屡律,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年降淮,在試婚紗的時候發(fā)現(xiàn)自己被綠了超埋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡佳鳖,死狀恐怖霍殴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情系吩,我是刑警寧澤来庭,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站穿挨,受9級特大地震影響月弛,放射性物質(zhì)發(fā)生泄漏肴盏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一尊搬、第九天 我趴在偏房一處隱蔽的房頂上張望叁鉴。 院中可真熱鬧,春花似錦佛寿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蜡饵,卻和暖如春弹渔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背溯祸。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工肢专, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人焦辅。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓博杖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親筷登。 傳聞我的和親對象是個殘疾皇子剃根,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容