Android基本UI控件的介紹及使用

1? ? ? 基本UI

Zealer馋贤、CSDN彼乌、github

StormZhang我磁、

張弘揚(yáng)(Hyman):http://blog.csdn.net/lmj623565791?viewmode=contents

紊撕、任玉剛:http://blog.csdn.net/singwhatiwanna/article/details/38426471

蜡歹、徐宜生

Android官方文檔(最好的)

Android中文API:http://www.android-doc.com/

Android的開發(fā)者網(wǎng)站:http://developer.android.com/index.html

Android參考書

第一行代碼、Android瘋狂講義

推薦有經(jīng)驗(yàn)的人看的書:和源碼有關(guān)的憋沿,設(shè)計(jì)模式旺芽,Thinking InJava(Java編程思想)

www.javaapk.com

1.1????基本控件介紹

Android的SDK中定義了一個(gè)View類,它是所有Android控件和容器的父類辐啄。《View和ViewGroup》运嗜。

View和ViewGroup的概念

View:Android中所有控件的頂層基類

ViewGroup:是View的子類壶辜,代表一個(gè)View的容器,可以用于存放其他View對象

布局類(就是ViewGroup類的子類)

不同的布局管理內(nèi)部空間的方式不一樣担租,在這里我們先簡單認(rèn)識一個(gè)布局砸民,就是線性布局

線性布局(LinearLayout):是按照線性排列(橫向、縱向)的方式對內(nèi)部控件的位置進(jìn)行管理

常用屬性:android:orientation="vertical"[ horizontal]

1.2????View類的常用屬性

View類的常用屬性:

android:id設(shè)置控件的標(biāo)識符號

android:layout_width設(shè)置子組件的布局寬度

android:layout_height設(shè)置子組件的布局高度

android:background設(shè)置控件的背景色

android:onClick設(shè)置控件的單擊事件綁定監(jiān)聽器

android:visibility設(shè)置控件是否可見(invisible/visible/gone<不可見,不占位>

tv_name.setVisibility(View.VISIBLE);

android:alpha設(shè)置控件透明度(0-1之間的數(shù)值)

android:padding設(shè)置子組件的內(nèi)邊距

android:layout_margin設(shè)置子組件的外邊距

android:onClick為控件設(shè)置點(diǎn)擊事件對應(yīng)的回調(diào)方法

android:layout_width

android:layout_height

屬性值:1)具體的長度?? 2)wap_content, 包裹內(nèi)容(根據(jù)內(nèi)容的大小調(diào)整控件的大辛氩巍)? 3)fill_parent:填充父控件(從Android2.1開始被match_parent替代)??????? 4)match_parent:填充父控件

PS:以上兩個(gè)屬性是任何一個(gè)控件都必須要設(shè)置的反惕,并且長度單位推薦使用:dp常用的基本控件:

1.3????TextView

TextView:基本文本標(biāo)簽,用于展示一個(gè)簡單文本

常用屬性:

android:text:文本的內(nèi)容

android:textSize:文字的大小

android:textColor:文本的顏色《#RGB

#ARGB

#RRGGBB

#AARRGGBB

android:textColor="@android:color/holo_green_light"

》????????? android:gravity:控制控件內(nèi)容的位置

android:drawableXXX:在控件中放置圖片

android:autoLink:設(shè)置超鏈接

需要了解的屬性:

android:shadowDx -------陰影的橫坐標(biāo)偏移

android:shadowDy-------陰影的縱坐標(biāo)偏移

android:shadowRadius--------陰影的半徑

android:shadowColor---------陰影的顏色

android:textAllCaps-------所有字母大寫

android:password? ------------將文字設(shè)置為密文

代碼操作法:

//在代碼中修改TextView的文本內(nèi)容

//根據(jù)id在當(dāng)前的頁面中尋找控件

tv_name = (TextView)this.findViewById(R.id.tv_name);

//設(shè)置文本的內(nèi)容演侯,大多數(shù)情況下姿染,一個(gè)控件在布局中設(shè)置的屬性都有對應(yīng)的方法可以在代碼中去設(shè)置

tv_name.setText("修改了,文件的文本秒际!");

//?????????????? tv_name.setTextColor(Color.BLUE);

tv_name.setTextColor(Color.parseColor("#FF0000"));

tv_name.setTextSize(30);

1.3.1? 使用TextView實(shí)現(xiàn)跑馬燈效果

需要設(shè)置以下屬性:

1)??????android:singleLine="true"

2)??????android:ellipsize="marquee"??? //跑馬燈效果

3)??????android:focusable="true"?????//讓控件可獲取焦點(diǎn)

4)??????android:focusableInTouchMode="true"???????? // 讓控件在觸摸模式下獲取焦點(diǎn)

5)??????可選的屬性:android:marqueeRepeatLimit//文本滾動(dòng)的次數(shù)

屬性值:-1或marquee_forever悬赏,代表無限滾動(dòng)

具體的滾動(dòng)次數(shù)(比如設(shè)置為2)

使用跑馬燈的前提:1)文本內(nèi)容必須要超出控件的寬度?????? 2)必須單行顯示

android:singleLine="true"

android:maxEms="8"

android:ellipsize="end"

android:singleLine="true"

android:ellipsize="end"

android:ems="15"

設(shè)置TextView的行間距、行高娄徊。

1闽颇、android:lineSpacingExtra

設(shè)置行間距,如”8dp”寄锐。

2兵多、android:lineSpacingMultiplier

設(shè)置行間距的倍數(shù),如”1.5″橄仆。

設(shè)置每行的最大字?jǐn)?shù)

maxLength和固定15個(gè)字的寬度或代碼控制加\n

android:singleLine="false".

android:maxEms

setText(Html.fromHtml()

關(guān)于文本顏色的操作代碼設(shè)置:

private voidsetText(TextView t){

String text =t.getText().toString().trim();

SpannableStringspan =newSpannableString(text);

span.setSpan(newForegroundColorSpan(Color.WHITE),0,1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

t.setText(span);

}

tv_lingqu_tishi.setTextColor(Color.parseColor("#ffffff"));

1.4????Button 按鈕

繼承自TextView中鼠,具有TextView的所有屬性

注冊監(jiān)聽事件的四種方式:

1、 設(shè)置 android:onClick 屬性

《android:onClick="onBtnClick"

// 當(dāng)按鈕被點(diǎn)擊的時(shí)候調(diào)用的方法

publicvoid onBtnClick(View v) {

System.out.println("使用onClick屬性");

Toast.makeText(MainActivity.this,"使用onClick屬性", 1).show();

}

2沿癞、 成員內(nèi)部類

《//方式二:使用成員內(nèi)部類

privateclass MyListener implements OnClickListener{

@Override

publicvoid onClick(View v) {

//TODO Auto-generated method stub

System.out.println("方式二:使用成員內(nèi)部類");

Toast.makeText(MainActivity.this,"方式二:使用成員內(nèi)部類", 1).show();

}

}

button2.setOnClickListener(newMyListener());

3援雇、 匿名內(nèi)部類

//方式三:使用匿名內(nèi)部類

button3= (Button) this.findViewById(R.id.button3);

button3.setOnClickListener(newView.OnClickListener() {

@Override

publicvoid onClick(View v) {

System.out.println("方式三:使用匿名內(nèi)部類");

Toast.makeText(MainActivity.this,"方式三:使用匿名內(nèi)部類", 1).show();

}

});

4、 當(dāng)前Activity實(shí)現(xiàn)監(jiān)聽接口(OnClickListener)

《public class MainActivity extends Activity implementsOnClickListener {

//方式四:實(shí)現(xiàn)監(jiān)聽接口

@Override

publicvoid onClick(View v) {

//TODO Auto-generated method stub

switch(v.getId()) {

caseR.id.button4:

System.out.println("方式四:實(shí)現(xiàn)監(jiān)聽接口1");

Toast.makeText(MainActivity.this,"方式四:實(shí)現(xiàn)監(jiān)聽接口1", 1).show();

break;

caseR.id.button5:

System.out.println("方式四:實(shí)現(xiàn)監(jiān)聽接口2");

Toast.makeText(MainActivity.this,"方式四:實(shí)現(xiàn)監(jiān)聽接口2", 1).show();

break;

default:

break;

}

}

}》

1.5????EditText 文本編輯框

【ems

--EditText類繼承自TextView類椎扬,具有TextView的所有屬性

--EditText與TextView最大的不同就是用戶可以對EditText控件進(jìn)行編輯惫搏,同時(shí)還可以為EditText控件設(shè)置監(jiān)聽器,用來判斷用戶的輸入是否合法

android:hint輸入提示

android:textColorHint提示的顏色

android:textColorHighlight選中字體的背景顏色

android:inputType輸入類型的可選項(xiàng)

監(jiān)聽輸入框中文本內(nèi)容的變化:addTextChangedListener(TextWatcher watcher)

《//監(jiān)聽EditText中文本變化

name.addTextChangedListener(newMyWather());

//監(jiān)聽EditText中文本變化

classMyWather implements TextWatcher{

@Override

publicvoid onTextChanged(CharSequence s,int start, int before,

int count) {

//TODO Auto-generated method stub

System.out.println("文本發(fā)生改變....."+s);

}

}

if(TextUtils.isEmpty(namea) || TextUtils.isEmpty(pwd))

1.6????CheckBox 復(fù)選框

繼承自CompoundButton(帶選擇狀態(tài)的按鈕)

CheckBox繼承于Button蚕涤,所以具有普通按鈕的各種屬性筐赔,但是與普通按鈕不同的是,CheckBox 提供了可選中的功能揖铜。

private class MyListener? implements OnCheckedChangeListener{

@Override

publicvoid onCheckedChanged(CompoundButton buttonView,

booleanisChecked) {

switch(buttonView.getId()) {

caseR.id.cbox_color:

if(isChecked){

tv.setTextColor(Color.RED);

}else{

tv.setTextColor(Color.BLACK);

}

break;

}

}

cbox_color.setOnCheckedChangeListener(newMyListener());

練習(xí)

publicclass MainActivity extends Activity implements OnCheckedChangeListener {

private TextView show_text;

private CheckBox cb1, cb2, cb3, cb_all;

@Override

protected void onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViews();

initListener();

}

private void initListener() {

cb1.setOnCheckedChangeListener(this);

cb2.setOnCheckedChangeListener(this);

cb3.setOnCheckedChangeListener(this);

//為了避免選中狀態(tài)處理的沖突茴丰,我們只需要考慮點(diǎn)擊“全選”按鈕時(shí)的業(yè)務(wù)邏輯

cb_all.setOnClickListener(newOnClickListener() {

@Override

public voidonClick(View v) {

boolean checked = cb_all.isChecked();

cb1.setChecked(checked);

cb2.setChecked(checked);

cb3.setChecked(checked);

}

});

}

private void findViews() {

show_text = (TextView)this.findViewById(R.id.show_text);

cb1 = (CheckBox)this.findViewById(R.id.cb1);

cb2 = (CheckBox)this.findViewById(R.id.cb2);

cb3 = (CheckBox)this.findViewById(R.id.cb3);

cb_all = (CheckBox)this.findViewById(R.id.cb_all);

}

@Override

public voidonCheckedChanged(CompoundButton buttonView, boolean isChecked) {

//根據(jù)當(dāng)前三個(gè)復(fù)選框的選中狀態(tài)修改“全選/取消全選”的選中狀態(tài)

if(cb1.isChecked()&&cb2.isChecked()&&cb3.isChecked()){

cb_all.setChecked(true);

}else{

cb_all.setChecked(false);

}

updateText();

}

private void updateText() {

//

show_text.setText("");

//逐個(gè)判斷三個(gè)復(fù)選框的選中狀態(tài),顯示被選中的

if(cb1.isChecked()){

//??????????????????????? show_text.setText(cb1.getText()+"");

show_text.append(cb1.getText()+"");

}

if(cb2.isChecked()){

//??????????????????????? show_text.setText(cb2.getText()+"");

show_text.append(cb2.getText()+" ");

}

if(cb3.isChecked()){

//??????????????????????? show_text.setText(cb3.getText()+"");

show_text.append(cb3.getText()+"");

}

}

}

1.7????Android的四大組件

Activity與用戶交互的界面

Service后臺服務(wù)

BroadcastReceiver廣播接收器

ContentProvider內(nèi)容提供者(可以通過該組件實(shí)現(xiàn)不同進(jìn)程間的數(shù)據(jù)交互)

1.8????RadioButton天吓、RadioGroup 單選按鈕(組)

==RadioButton繼承于Button贿肩,所以具有普通按鈕的各種屬性,但是與普通按鈕不同的是龄寞,在使用RadioButton的時(shí)候汰规,要使用RadioGroup來包圍起RadioButton

==RadioGroup是LinearLayout的子類,所以RadioGroup本質(zhì)上是一個(gè)存放RadioButton的布局容器

==默認(rèn)的LinearLayout布局的Orientation屬性是水平的物邑,而默認(rèn)的RadioGroup的Orientation屬性是垂直的

==RadioGroup類中的getCheckedRadioButtonId()根據(jù)id獲得RadioGroup里指定的RadioButton

示例說明:

radio_group= (RadioGroup)this.findViewById(R.id.radio_group);

radio_group.setOnCheckedChangeListener(newOnCheckedChangeListener() {

/**

*當(dāng)RadioGroup中的單選按鈕被選擇時(shí)調(diào)用的方法

*

*/

@Override

publicvoidonCheckedChanged(RadioGroup group,intcheckedId) {

switch(checkedId) {

caseR.id.ra_male://男

Toast.makeText(MainActivity.this,"你的選擇是溜哮,男",0).show();

break;

caseR.id.ra_female://女

Toast.makeText(MainActivity.this,"你的選擇是滔金,女",0).show();

break;

default:

break;

}

}

});

switch(radio_group.getCheckedRadioButtonId()){

caseR.id.ra_male:

weiht= (in_height-80)*0.7;

break;

caseR.id.ra_female:

weiht= (in_height-70)*0.6;

break;

default:

break;

}

1.8.1? 導(dǎo)航效果相關(guān)

android:id="@+id/radio_data"

android:drawableTop="@drawable/slt_data"

android:text="DATA"

style="@style/radiobutton_style"/>

0dp

wrap_content

1

@null

@null

center

@color/select_text_color

android:id="@+id/radio0"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:button="@drawable/radio_select"

android:clickable="false"

android:checked="true"/>

@Override

publicvoidonPageSelected(intpotion) {

//TODOAuto-generated method stub

//獲取應(yīng)該被選中的radiobutton對象,getChildAt方法:獲取radiogroup中位于position位置的子控件對象

RadioButton rb =(RadioButton)rGroup.getChildAt(potion);

//設(shè)置讓參數(shù)中指定的id對應(yīng)RadioButton對象變?yōu)檫x中效果

rGroup.check(rb.getId());

}

1.9????ImageView 圖形視圖

繼承自View

andorid:src設(shè)置圖片來源

android:adjustViewBounds用于設(shè)置ImageView 是否調(diào)整自己的邊界茂嗓,來保持所顯示圖片的長寬比例

android:maxHeight設(shè)置 ImageView 的最大高度

《需要先設(shè)置android:adjustViewBounds為true餐茵,否則不起作用》

andorid:maxWidth設(shè)置 ImageView 的最大寬度

android:scaleType設(shè)置所顯示的圖片如何縮放或移動(dòng),以適應(yīng)ImageView的大小述吸。

setImageBitmap()設(shè)置Bitmap作為圖片源

setImageDrawable()設(shè)置Drawable作為圖片源

setImageResource()設(shè)置Resource作為圖片源

//方式一:Drawable類描述的是資源文件中的圖像資源

//Drawabledrawable = getResources().getDrawable(R.drawable.hjgh_n);

//iv.setImageDrawable(drawable);

//方式二:在Android中是用Bitmap類來描述圖片

//通過BitmapFactory(位圖工廠)生成Bitmap對象

/* Bitmap bm =BitmapFactory.decodeResource(getResources(),R.drawable.hjgh_n);

iv.setImageBitmap(bm);*/

//方式三:

iv.setImageResource(R.drawable.hjgh_n);

獲取資源文件實(shí)現(xiàn)切換效果:

private int[] imgs ={R.drawable.lz1,R.drawable.lz2,R.drawable.lz3};

int index = 0;

public void xiaClick(View v){

if(index ==(imgs.length-1))?????? {

index=0;

}else{

index++;

}

imView.setImageResource(imgs[index]);

}

怎么在代碼中設(shè)ImageView的src屬性

setImageDrawable(drawable);

setImageBitmap(bm);

setImageResource(resId);

怎么在代碼中設(shè)ImageView的background屬性

setBackgroundResource(R.drawable.down_finish);

//???????????????????iv_startguid.setImageDrawable(getResources().getDrawable(R.drawable.btn_start_guide));

iv_startguid.setBackgroundResource(R.drawable.btn_start_guide);

1.10???????常見問題

1.10.1?????????????異常處理

1忿族、先看是什么異常(首先找caused by)

3、自上而下查找第一行自己寫的代碼

2刚梭、再看異常的描述信息

1.10.2?????????????R文件丟失

1肠阱、資源文件命名錯(cuò)誤:文件名只能包含小寫字母、數(shù)字和下劃線朴读,并且不能以數(shù)字開頭

2屹徘、資源文件夾命名錯(cuò)誤:文件夾名只能用Android定義好的

1.10.3?????????????清單文件丟失

1、應(yīng)用程序包名出錯(cuò)(比如:包含中文)

2衅金、誤刪除

設(shè)備斷開連接(連接超時(shí))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末噪伊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子氮唯,更是在濱河造成了極大的恐慌鉴吹,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惩琉,死亡現(xiàn)場離奇詭異豆励,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瞒渠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門良蒸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人伍玖,你說我怎么就攤上這事嫩痰。” “怎么了窍箍?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵串纺,是天一觀的道長。 經(jīng)常有香客問我椰棘,道長纺棺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任晰搀,我火速辦了婚禮五辽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘外恕。我一直安慰自己杆逗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布鳞疲。 她就那樣靜靜地躺著罪郊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尚洽。 梳的紋絲不亂的頭發(fā)上悔橄,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機(jī)與錄音腺毫,去河邊找鬼癣疟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛潮酒,可吹牛的內(nèi)容都是我干的睛挚。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼急黎,長吁一口氣:“原來是場噩夢啊……” “哼扎狱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勃教,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤淤击,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后故源,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體污抬,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年绳军,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了印机。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡删铃,死狀恐怖耳贬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情猎唁,我是刑警寧澤咒劲,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站诫隅,受9級特大地震影響腐魂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逐纬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一蛔屹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧豁生,春花似錦兔毒、人聲如沸漫贞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迅脐。三九已至,卻和暖如春豪嗽,著一層夾襖步出監(jiān)牢的瞬間谴蔑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工龟梦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留隐锭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓计贰,卻偏偏與公主長得像欺旧,于是被迫代替她去往敵國和親羽历。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

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