0. Overview
1. TextView
android.widget.TextView extends android.view.View
屬性 | 描述 |
---|---|
android:id | 唯一的標識控件ID |
android:autoLink | 設置是否將指定格式的文本轉換爲可單擊的超鏈接顯示,可選參數值:none;web:URL連接;email:郵箱;phone:電話號碼;map:地圖;all; |
android:gravity | 文本對齊顯示 |
android:height | 高度設置 |
android:minHeight | 最小高度 |
android:maxHeigt | 最大高度 |
android:layout_height | 相對於佈局的高度 |
android:hint | 當文本爲空時顯示該文本 |
android:text | 文本內容 |
android:textColor | 文本顏色 |
android:textSize | 文本大小 |
android:typeface | 文本字體 |
android:ellipsize | 當文字過長的時候,控件如何顯示,可選參數值:start:省略號顯示在開頭### 3.1 ;end:省略號顯示在結尾;middle:省略號顯示在中間;marquee:以跑馬燈顯示; |
2.EditView
android.widget.EditView extends android.widget.TextView
屬性 | 描述 |
---|---|
android:lines | 設置編輯文本行數 |
android:maxLines | 設置編輯文本最大行數 |
android:password | 設置文本框中的內容是否顯示爲密碼 |
android:phoneNumber | 設置內容只能是電話號碼 |
android:scrolHorizontally | 設置爲水平滾動 |
android:singleLine | 設置爲單行模式 |
android:maxLength | 設置最大顯示長度 |
android:autoText | 指定該TextView中有個文本輸入法,並自動糾正一些常見的拼寫錯誤。 |
android:drawableBottom | 可拉伸要繪製文本的下面 |
android:drawableRight | 可拉伸要繪製文本的右側 |
3. Button
android.widget.Button extends android.widget.TextView
3.1
CompoundButton: 一個帶有選中/未選中狀態的按鈕。當按鈕按下或點中時自動改變狀態。
CompoundButton extends Button
3.1.1
RadioButton 單選按鈕有兩種狀態:選中或未被選中。這允許用戶從一個組中選擇一個選項。
RadioButton extends CompoundButton
繼承自類 android.widget.TextView:
屬性 | 描述 |
---|---|
android:autoText | 如果設置,指定TextView中有一個文本輸入法,並自動糾正一些常見的拼寫錯誤 |
android:drawableBottom | 可拉伸要繪製的文本下面 |
android:drawableRight | 可拉伸要繪製的文本的右側 |
android:editable | 如果設置,指定 TextView 有一個輸入法 |
android:text | 要顯示的文本 |
繼承自類 android,view.View
屬性 | 描述 |
---|---|
android:background | 這是一個可拉伸爲背景來使用 |
android:contentDescription | 定義文本簡要介紹了視圖內容 |
android:id | 對這一觀點提供一個標識符名稱 |
android:onClick | 在本視圖的上下文視圖被點擊時調用的方法的名稱 |
android:visibility | 控制視圖的初始可視性 |
3.1.2
ToggleButton 會顯示一個按鈕,選中/取消選中狀態。它基本上是一個開/關按鈕的指示燈。
ToggleButton extends CompoundButton
屬性 | 描述 |
---|---|
android:disabledAlpha | alpha禁用時要應用到指示器 |
androidLtextoff | 這是文本按鈕,它未被選中的時候 |
android:textOn | 這是文本按鈕,它被選中時 |
4. ImageView
android.widget.ImageView extends android.view.View
在界面上展示圖片的一個控件。
android.widget.ImageButton extends android.widget.ImageView
android.widget.ZoomButton extends android.widget.ImageButton
5. ProgressBar
ProgressBar位於android.widget包下,其繼承於View,主要用於顯示一些操作的進度。應用程序可以修改其長度表示當前後臺操作的完成情況。因爲進度條會移動,所以長時間加載某些資源或者執行某些耗時的操作時,不會使用戶界面失去響應。ProgressBar類的使用非常簡單,只需將其顯示到前臺,然後啓動一個後臺線程定時更改表示進度的數值即可。
在界面上顯示一個進度條,表示我們的程序正在加載一些數據。
讓進度條消失使用一個屬性:
android:visibility 可選值:
visible 默認值,控件可見
invisible 控件不可見,但是仍然佔據原來的位置和大小
gone 控件不可見,且不佔用屏幕空間
代碼動態控制使用setVisibility()方法
style 修改爲其他樣式的進度條
android:max 設置進度條最大值
代碼動態控制進度條進程
int progress = progressBar.getProgress();
progress = progress + 10;
progressBar.setProgress(progress);
6. AlertDialog
AlertDialog 可以在當前的界面彈出一個對話框,這個對話框是置頂於所有界面元素之上的,能夠屏蔽掉其他空間的交互,因此AlertDialog 一般都是用於提示一些非常重要的內容或者警告信息。比如用戶刪除前彈出一個確認對話框。
7. ActionBar
過時。被Toolbar代替。
頂部操作欄。Action Bar取代了傳統的tittle bar和menu,在程序運行中一直置於頂部,對於Android平板設備來說屏幕更大它的標題使用Action Bar來設計可以展示更多豐富的內容,方便操控。
8. Toolbar
工具欄,對ActionBar的升級。
Toolbar與ActionBar的區別:
- ToolBar就是一個View,跟其它View一樣包含在佈局中。
- 像常規View一樣,Toolbar很容易來放置、實現動畫以及控制。
- 一個Activity中可以有多個Toolbar。
1.setNavigationIcon: 即設定 up button 的圖標,因爲 Material 的介面,在 Toolbar這裏的 up button樣式也就有別於過去的 ActionBar 哦。
2. setLogo: APP 的圖標。
3. setTitle: 主標題。
4. setSubtitle: 副標題。
5. setOnMenuItemClickListener: 設定菜單各按鈕的動作
9. ListView
9.1 Overview
ListView 以列表的形式展示具體內容,並且能夠根據數據的長度自適應顯示。
ListView 允許用戶通過手指上下滑動的方式將屏幕外的數據滾動到屏幕內,同時屏幕上原有的數據會滾動出屏幕。
9.2 定製ListView界面
ListView是展示大量數據的。
數據無法直接傳遞給ListView,需要藉助適配器來完成。例如,適配器ArrayAdapter。
1.新建一個ListView控件
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
2.一般定義一個實體類,作爲適配器的適配類型。
public class Fruit {
private String name;
private int imageId;
public Fruit(String name, int imageId) {
this.name = name;
this.imageId = imageId;
}
public String getName() {
return name;
}
public int getImageId() {
return imageId;
}
}
3.然後爲ListView的子項指定一個佈局,在layout目錄下創建一個新的xxxx.xml。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/fruit_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/fruit_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"
/>
</LinearLayout>
4.然後創建一個自定義的適配器,繼承自ArrayAdapter,並將泛型指定爲實體類。
public class FruitAdapter extends ArrayAdapter<Fruit>
5.重寫了父類的一組構造函數,用於將上下文、ListView子項佈局的id和數據傳遞進來。
public FruitAdapter(Context context, int textViewResourceId,
List<Fruit> objects) {
super(context, textViewResourceId, objects);
resourceId = textViewResourceId;
}
6.又重寫了getView()的方法,在每個子項被滾動到屏幕內時候會被調用。在getView()方法中,先使用getItem()方法得到當前項的實體類實例,然後使用LayoutInflater來爲這個子項加載我們傳入的佈局。調用View的findViewById()分別獲取到實例,分別調用它們的setImageView和SetText設置顯示的圖片和文字。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Fruit fruit = getItem(position);
View view = LayoutInflater.from(getContext()).inflate(resourceId, parent, false);
ImageView fruitImage = view.findViewById(R.id.fruit_image);
TextView fruitName = view.findViewById(R.id.fruit_name);
fruitImage.setImageResource(fruit.getImageId());
fruitName.setText(fruit.getName());
return view;
}
7.把數據按照實體類格式存儲入List fruitList中
private List<Fruit> fruitList = new ArrayList<>();
...
initFruits();
...
private void initFruits() {
for (int i = 0; i < 2; i++) {
Fruit apple = new Fruit("Apple", R.drawable.img_1);
fruitList.add(apple);
Fruit banana = new Fruit("Banana", R.drawable.img_2);
fruitList.add(banana);
Fruit orange = new Fruit("Orange", R.drawable.img_2);
fruitList.add(orange);
Fruit grape = new Fruit("Grape", R.drawable.img_2);
fruitList.add(grape);
}
}
6.最後調用ListView的setAdapter()方法,將構建好的適配器對象傳遞進入。
FruitAdapter adapter = new FruitAdapter(MainActivity.this,
R.layout.fruit_item, fruitList);
ListView listView = findViewById(R.id.list_view);
listView.setAdapter(adapter);
9.3 提升ListView 的運行效率
9.3.1
在之前的FruitAdapter的getVIew()方法中,每次都把佈局重新加載一遍,當ListView快速滾動時,這就成爲了性能的瓶頸。
View view = LayoutInflater.from(getContext()).inflate(resourceId, parent, false);
getVIew()方法中還有一個convertView參數,這個參數用於將之前加載好的佈局進行緩存,以便之後可以進行重用。
public View getView(int position, View convertView, ViewGroup parent) {
如果不爲null,重用佈局。
View view;
if (convertView == null) {
view = LayoutInflater.from(getContext()).inflate(resourceId, parent, false);
} else {
view = convertView;
}
9.3.2
每次在getVIew()方法中會調用View的findViewById()方法來獲取一次控件的實例。
ImageView fruitImage = view.findViewById(R.id.fruit_image);
TextView fruitName = view.findViewById(R.id.fruit_name);
創建一個內部類,用於對控件實例進行緩存。(注意內部類是 class 不是 Class)
class ViewHolder {
ImageView fruitImage;
TextView fruitName;
}
如果佈局爲空,則創建一個控件的實例,如果不爲空,則複用之前的控件實例,重新獲取ViewHolder
ViewHolder viewHolder;
if (convertView == null) {
view = LayoutInflater.from(getContext()).inflate(resourceId, parent, false);
viewHolder = new ViewHolder();
viewHolder.fruitImage = view.findViewById(R.id.fruit_image);
viewHolder.fruitName = view.findViewById(R.id.fruit_name);
view.setTag(viewHolder);
} else {
view = convertView;
viewHolder = (ViewHolder) view.getTag();
}
9.4 ListView的點擊事件
給ListView中的子項響應用戶點擊事件。
ListView listView = findViewById(R.id.list_view);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 響應點擊事件邏輯
}
});
10. RecycleView
ListView的不足有二:、
- 性能比較差,不得不使用一些技巧提升運行效率;
- 擴展性比較差,只能實現數據縱向滾動的效果,做不到橫向滾動。
因此使用RecyclerView替代ListView。
橫向流
網格流
瀑布流