Android控件的可見屬性:全部的Android控件都具備這個屬性,能夠經過android:visibility進行指定,可選值有三種,visible、invisible和gone。visible表示控件是可見的,這個值是默認值,不指定android:visibility時,控件都是可見的。invisible表示控件不可見,可是它仍然佔據着原來的位置和大小,能夠理解成控件變成透明狀態了。gone則表示控件不只不可見,並且再也不佔用任何屏幕空間。咱們還能夠經過代碼來設置控件的可見性,使用的是setVisibility()方法,能夠傳入View.VISIBLE、View.INVISIBLE和View.GONE三種值。java
<TextView android:id="@+id/text_view" //控件ID android:layout_width="match_parent" //文字寬度。fill_parent意義相同,但推薦match_parent android:layout_height="wrap_content" //文字高度 android:text="This is TextView" //文字內容 android:gravity="center"//文字對齊方式,可選值有top、bottom、left、right、center等,能夠用「|」來同時指定多個值,這裏咱們指定的"center",效果等同於"center_vertical|center_horizontal",表示文字在垂直和水平方向都居中對齊。 android:textSize="24sp" //文字大小 android:textColor="#00ff00" //文字顏色 />
<Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button" />
java代碼:android
定義 private Button button; 根據ID獲取控件 button = (Button) findViewById(R.id.button); 添加點擊事件 button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 在此處添加邏輯 } }); 或者 類 implements OnClickListener button.setOnClickListener(this); @Override public void onClick(View v) { switch (v.getId()) { case R.id.button: // 在此處添加邏輯 break; default: break; } }
<EditText android:id="@+id/edit_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword"//輸入類型爲密碼 android:hint="Type something here" //提示性文本,用戶輸入後消失 android:maxLines="2" //指定最大行數,超過期文本會滾動顯示 />
java代碼:git
private EditText editText; editText = (EditText) findViewById(R.id.edit_text); String inputText = editText.getText().toString(); //得到輸入的內容
<ImageView android:id="@+id/image_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" //指定圖片資源,也能夠經過代碼指定 />
java代碼:編程
private ImageView imageView; imageView = (ImageView) findViewById(R.id.image_view); imageView.setImageResource(R.drawable.jelly_bean); //指定圖片資源
<ProgressBar android:id="@+id/progress_bar" android:layout_width="match_parent" android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal" //水平進度條,不加style是默認圓形的 android:max="100" />
java代碼中動態改變進度條進度:設計模式
int progress = progressBar.getProgress(); progress = progress + 10; progressBar.setProgress(progress);
提示:Clean項目、若是遇到錯誤,提示如Caused by: java.lang.ClassCastException: android.widget.ProgressBar cannot be cast to android.widget.Button,代碼無誤的狀況下選擇eclipse的項目--清理,重構一下項目(從新編譯)後程序正常運行。網絡
(1)普通圓形框架
該類型進度條也就是一個表示運轉的過程,例如發送短信,鏈接網絡等等,表示一個過程正在執行中。沒有設置它的風格,那麼它就是圓形的,一直會旋轉的進度條。eclipse
(2)超大號圓形ide
style="?android:attr/progressBarStyleLarge"
(3)小號圓形函數
style="?android:attr/progressBarStyleSmall"
(4)標題型圓形
style="?android:attr/progressBarStyleSmallTitle"
代碼實現:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); //請求窗口特點風格,這裏設置成不明確的進度風格 setContentView(R.layout.second); setProgressBarIndeterminateVisibility(true); //設置標題欄中的不明確的進度條是否能夠顯示 }
(5)長方形進度條
<progressBar android:id="@+id/progressbar_updown" android:layout_width="200dp" android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal" android:layout_gravity="center_vertical" android:max="100"//最大進度值爲100 android:progress="50"//初始化的進度值 android:secondaryProgress="70"//初始化底層的第二個進度值 />
代碼應用:
private ProgressBar myProgressBar; myProgressBar = (ProgressBar) findViewById(R.id.progressbar_updown); myProgressBar.incrementProgressBy(5); //ProgressBar進度值增長5 myProgressBar.incrementProgressBy(-5); //ProgressBar進度值減小5 myProgressBar.incrementSecondaryProgressBy(5); //ProgressBar背後的第二個進度條 進度值增長5 myProgressBar.incrementSecondaryProgressBy(-5); //ProgressBar背後的第二個進度條 進度值減小5
(6)標題中的長進度條
代碼實現:
requestWindowFeature(Window.FEATURE_PROGRESS); //請求一個窗口進度條特性風格 setContentView(R.layout.main); setProgressBarVisibility(true); //設置進度條可視 setProgress(myProgressBar.getProgress() * 100); //設置標題欄中前景的一個進度條進度值 setSecondaryProgress(myProgressBar.getSecondaryProgress() * 100); //設置標題欄中後面的一個進度條進度值 //ProgressBar.getSecondaryProgress() 是用來獲取其餘進度條的進度值
在當前的界面彈出一個對話框,可以屏蔽掉其餘控件的交互能力。
代碼:
AlertDialog.Builder dialog = new AlertDialog.Builder (MainActivity.this); dialog.setTitle("This is Dialog"); dialog.setMessage("Something important."); dialog.setCancelable(false); //肯定按鈕的點擊事件 dialog.setPositiveButton("OK", new DialogInterface. OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); //取消按鈕的點擊事件 dialog.setNegativeButton("Cancel", new DialogInterface. OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); dialog.show();
和alertdialog相似,會在對話框中顯示一個進度條,通常是用於表示當前操做比較耗時,讓用戶耐心地等待。
(1)圖形
代碼實現:
ProgressDialog mypDialog=new ProgressDialog(this); //實例化 mypDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); //設置進度條風格,風格爲圓形,旋轉的 mypDialog.setTitle("Google"); //設置ProgressDialog 標題 mypDialog.setMessage(getResources().getString(R.string.second)); //設置ProgressDialog 提示信息 mypDialog.setIcon(R.drawable.android); //設置ProgressDialog 標題圖標 mypDialog.setButton("Google",this); //設置ProgressDialog 的一個Button mypDialog.setIndeterminate(false); //設置ProgressDialog 的進度條是否不明確 mypDialog.setCancelable(true); //設置ProgressDialog 是否能夠按退回按鍵取消 mypDialog.show(); //讓ProgressDialog顯示
(2)長方形
代碼實現:
ProgressDialog mypDialog=new ProgressDialog(this);//實例化 mypDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); //設置進度條風格,風格爲長形,有刻度的 mypDialog.setTitle("地獄怒獸"); //設置ProgressDialog 標題 mypDialog.setMessage(getResources().getString(R.string.second)); //設置ProgressDialog 提示信息 mypDialog.setIcon(R.drawable.android); //設置ProgressDialog 標題圖標 mypDialog.setProgress(59); //設置ProgressDialog 進度條進度 mypDialog.setButton("地獄曙光",this); //設置ProgressDialog 的一個Button mypDialog.setIndeterminate(false); //設置ProgressDialog 的進度條是否不明確 mypDialog.setCancelable(true); //設置ProgressDialog 是否能夠按退回按鍵取消 mypDialog.show(); //讓ProgressDialog顯示
ListView容許用戶經過手指上下滑動的方式將屏幕外的數據滾動到屏幕內,同時屏幕上原有的數據則會滾動出屏幕。
這個佈局會將它所包含的控件在線性方向上依次排列。
- android:orientation:指定方向,vertical垂直,horizontal水平。若是LinearLayout的排列方向是horizontal,內部的控件就絕對不能將寬度指定爲match_parent,由於這樣的話單獨一個控件就會將整個水平方向佔滿,其餘的控件就沒有可放置的位置了。一樣的道理,若是LinearLayout的排列方向是vertical,內部的控件就不能將高度指定爲match_parent。 - android:layout_gravity:控件在佈局中的對齊方式。當LinearLayout的排列方向是horizontal時,只有垂直方向上的對齊方式纔會生效,由於此時水平方向上的長度是不固定的,每添加一個控件,水平方向上的長度都會改變,於是沒法指定該方向上的對齊方式。一樣的道理,當LinearLayout的排列方向是vertical時,只有水平方向上的對齊方式纔會生效。 - android:layout_weight:用權值分配空間,此時寬度/高度應爲0。例如兩個控件,weight都爲1,表示1:1平分空間。
經過相對定位的方式讓控件出如今佈局的任何位置。
- 相對父佈局:android:layout_alignParentLeft、android:layout_alignParentTop、android:layout_alignParentRight、android:layout_alignParentBottom、android:layout_centerInParent:對齊父佈局的左上角、右上角、左下角、右下角,居中。 - 相對控件:android:layout_above、android:layout_below、android:layout_toLeftOf、android:layout_toRightOf:在某控件的上下左右,控件必定要定義在某控件的後面。android:layout_alignLeft、android:layout_alignRight、android:layout_alignTop、android:layout_ alignBottom:跟某控件對齊左右上下邊緣。
全部的控件都會擺放在佈局的左上角。能夠用來展現圖片。
使用表格的方式來排列控件。
每加入一個TableRow就表示在表格中添加了一行,而後在TableRow中每加入一個控件,就表示在該行中加入了一列,TableRow中的控件是不能指定寬度的。android:layout_span="2":可讓某控件佔兩列的寬度。
android:stretchColumns:容許將TableLayout中的某一列進行拉伸,以達到自動適應屏幕寬度的做用,android:stretchColumns="0" 指拉伸第一列。
全部控件的位置都是指定的,適應性比較差,不推薦使用。
android:layout_x,android:layout_y指定座標。
在佈局文件中指定寬高的固定大小有如下經常使用單位可供選擇:px、pt、dp和sp。px是像素的意思,即屏幕中能夠顯示的最小元素單元。pt是磅數的意思,1磅等於1/72英寸,通常pt都會做爲字體的單位來使用。 Android中的密度就是屏幕每英寸所包含的像素數,一般以dpi爲單位。代碼瞭解當前密度值:
float xdpi = getResources().getDisplayMetrics().xdpi; float ydpi = getResources().getDisplayMetrics().ydpi;
dp是密度無關像素的意思,也被稱做dip,和px相比,它在不一樣密度的屏幕中的顯示比例將保持一致。 sp是可伸縮像素的意思,它採用了和dp一樣的設計理念,解決了文字大小的適配問題。
根據Android的規定,在160dpi的屏幕上,1dp等於1px,而在320dpi的屏幕上,1dp就等於2px。所以,使用dp來指定控件的寬和高,就能夠保證控件在不一樣密度的屏幕中的顯示比例保持一致。
全部控件都是直接或間接繼承自View的,全部佈局都是直接或間接繼承自ViewGroup的。View是Android中一種最基本的UI組件,它能夠在屏幕上繪製一塊矩形區域,並能響應這塊區域的各類事件,所以,咱們使用的各類控件其實就是在View的基礎之上又添加了各自特有的功能。而ViewGroup則是一種特殊的View,它能夠包含不少的子View和子ViewGroup,是一個用於放置控件和佈局的容器。
- android:background:爲佈局/控件指定背景圖。 - android:layout_margin:控件在上下左右偏移的距離。(android:layout_marginLeft類推)
寫好一個佈局文件,在另外的佈局文件中:
<include layout="@layout/title" />
寫一個專門的類
public class TitleLayout extends LinearLayout { public TitleLayout(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater.from(context).inflate(R.layout.title, this); Button titleBack = (Button) findViewById(R.id.title_back); titleBack.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ((Activity) getContext()).finish(); } }); } }
重寫了LinearLayout中的帶有兩個參數的構造函數,在佈局中引入TitleLayout控件就會調用這個構造函數。而後在構造函數中須要對標題欄佈局進行動態加載,這就要藉助LayoutInflater來實現了。經過LayoutInflater的from()方法能夠構建出一個LayoutInflater對象,而後調用inflate()方法就能夠動態加載一個佈局文件,inflate()方法接收兩個參數,第一個參數是要加載的佈局文件的id,傳入R.layout.title,第二個參數是給加載好的佈局再添加一個父佈局,指定爲TitleLayout直接傳入this。在自定義的佈局中加入按鈕和按鈕的點擊事件。
在佈局文件中指明控件的完整類名,包名不可省略:
<com.example.uicustomviews.TitleLayout android:layout_width="match_parent" android:layout_height="wrap_content" > </com.example.uicustomviews.TitleLayout>
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 220/220 | 1/1 | 10/10 | |
第二週 | 400/620 | 1/2 | 18/28 | |
第三週 | 650/1120 | 1/3 | 12/40 | |
第四周 | 1443/2563 | 1/4 | 12/52 | |
第五週 | 3214/5777 | 1/5 | 20/72 | |
第六週 | 33/5800 | 1/6 | 10/82 | |
第七週 | 21/5800 | 1/7 | 10/92 |
- 《Android Programming: The Big Nerd Ranch Guide(Android 編程:權威指南)》; - 《Head First Android Development(深刻淺出Android 開發)》; - 《Android 開發藝術探索》; - 《Android 設計模式源碼分析》; - 《Android 開發精要》; - 《App 研發錄》。