安卓学习 之 UI控件(三)
一、常用控件
1.TextView(文本)
- match_parent:控件與父類相同(基本不用fil_parent)wrap_content:剛好包裹里面內容。
- android:gravity調節文字對齊方式,可選參數包括top、bottom、left、right、center等。可用|來同時指定多個值。文字采用sp為單位,文字顏色使用#XXXXXX來表示。
- android:textSize 屬性可以指定文字的大小,通過 android:textColor 屬性可以指定文字的顏色。
2.Button(按鈕)
Button可以通過注冊監聽器調用,也可以通過實現接口的方式實現調用。
- button.setOnClickListener(new OnClickListener(){})
- 或者讓活動類實現 OnClickListener 接口,重寫onclick方法 onClick(View v),可以通過參數v的id判斷是哪一個按鈕。
3.EditText(編輯框)
- android.hint:指定一段提示性文字
- android:maxLines指定EditText的最大行數
- editText_01.getText().toString()來獲取輸入內容。
4.ImageView(圖片控件)
- android:src為ImageView指定一張照片。
- setImageResource()動態設置ImageView里面的圖片。
5.ProgressBar(進度條)
- Android:visibility設置控件可見屬性,visible可見invisible不可見,gone消失。設置控件可見性setVisiblity(View.visible);獲取控件可見性progress_bar01.getVisiblity()
- 設置Prograssbar的進度條進度。 progressBar.getProgress()獲得進度,progressBar.setProgress(progress)設置進度。
6.AlterDialog(對話框)
- 一般 AlertDialog 都是用于提示一些非常重要的內容或者警告信息。
- 先new一個AlterDialog.Builder對象,setTitle、setMessage、SetCancelable、setPositiveButton、setNegativeButton完成。
- 最后一定要dialog.show();
7.ProgressDialog
- ProgressDialog 會在對話框中顯示一個進度條,一般是用于表示當前操作比較耗時,讓用戶耐心地等待。
- 與AlterDialog類似,設置progressdialog.setCaceled(true),可通過返回鍵back回去,否則回不去.
二、四種基本的布局
1.線性布局(Linearlayout)
- android:orientation="vertical"豎直方向。horizontal水平方向。
- android:gravity 用于指定文字在控件中的對齊方式,而android:layout_gravity用于指定控件在布局中的對齊方式。
- .dp是Android中用于指定控件大小、間距等屬性 , android:layout_width=“0dp” android:layout_weight="1"若兩個控件都為1則平分屏幕。
2.相對布局 (RelativeLayout)
- 相對父布局定位:
//兩個屬性來確定置。
- 相對于控件定位
3.幀布局 (FrameLayout)
應用場景較少,將元素放在左上方
4.百分比布局(PercentFrameLayout)
三、自定義控件
控件的繼承結構
需求,添加一個類似蘋果的菜單欄,左邊是返回按鈕,中間是內容,右邊是編輯
在res/layout 新建一個布局文件 title.xml,
然后在需要引入這個布局的xml文件中加上<include layout="@layout/title"/> 就可以了。
每次引入Title.xml 點擊事件都要寫,不如改成動態加載形成自定義控件。
- 上一步引入布局后;
- 新建TitleLayout繼承自LinearLayout,對標題欄動態加載
- 3.重新引入布局,引入TitleLayout,而非title.xml;
- 4.在布局的構造函數中中添加點擊事件,形成自定義控件。
四、ListView
簡單用法
- 在一個布局中中加入ListView
- 提供顯示數據
- 構建適配器,目的是傳遞數據進入ListView,適配器是ArrayAdapter,可以通過泛型傳遞數據。
這里我們使用了android.R.layout.simple_list_item_1 作為 ListView 子項布局的 id,這是一個 Android 內置的布局文件,里面只有一個TextView,可用于簡單地顯示一段文本。
3.setAdapter將適配器傳遞進去,完成Listview與數據的關聯。
listView.setAdapter(adapter);高級用法(定制ListView的界面)
2.建立Fruit_item.xml,完善布局;
定義了一個 ImageView 用于顯示水果的圖片, 又定義了一個TextView 用于顯示水果的名稱
<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" android:layout_marginLeft="10dip" /> </LinearLayout>3.建立自定義適配器,繼承ArrayAdapter,泛型為Fruit類,FruitAdapter將上下文、ListView子布局的id和數據傳遞進來。
public class FruitAdapter extends ArrayAdapter<Fruit> { private int resourceId;public FruitAdapter(Context context, int textViewResourceId, List<Fruit> objects) {super(context, textViewResourceId, objects);resourceId = textViewResourceId;} }4.重寫getView方法,其功能是每個子項滾動到屏幕內的時候會被調用。
- 獲取當前項的Fruit實例;L
- ayoutInflater.from(getContext()).inflate為這個子項加載傳入的布局;
- setImageResource和setText設置圖片和文字。返回布局最后。
5.使用initFruits初始化所有水果數據,將水果名稱和水果圖片ID添加進來;建立Adapter,將其作為適配器傳入Listview,只要修改fruit_intem.xml,就可以修改出復雜界面了。
FruitAdapter adapter = new FruitAdapter(MainActivity.this, R.layout.fruit_item, fruitList);private void initFruits() {//初始化所有水果的數據; }getView()方法中還有一個 convertView 參數,這個可以理解成上次加載成功的view。
public class FruitAdapter extends ArrayAdapter<Fruit> {@Overridepublic View getView(int position, View convertView, ViewGroup parent) { Fruit fruit = getItem(position);View view;ViewHolder viewHolder;if (convertView == null) {view = LayoutInflater.from(getContext()).inflate(resourceId, null); viewHolder = new ViewHolder();viewHolder.fruitImage = (ImageView) view.findViewById (R.id.fruit_image);viewHolder.fruitName = (TextView) view.findViewById (R.id.fruit_name);view.setTag(viewHolder); // 將ViewHolder存儲在View中} else {view = convertView;viewHolder = (ViewHolder) view.getTag(); // 重新獲取ViewHolder}viewHolder.fruitImage.setImageResource(fruit.getImageId()); viewHolder.fruitName.setText(fruit.getName());return view;}class ViewHolder { ImageView fruitImage; TextView fruitName;} }我們新增了一個內部類 ViewHolder,用于對控件的實例進行緩存。當 convertView 為空的時候,創建一個 ViewHolder 對象,并將控件的實例都存放在 ViewHolder 里,然后調用 View 的 setTag()方法,將 ViewHolder 對象存儲在 View 中。當 convertView 不為空的時候則調用
View 的 getTag()方法,把 ViewHolder 重新取出。這樣所有控件的實例都緩存在了 ViewHolder
里,就沒有必要每次都通過 findViewById()方法來獲取控件實例了。
五、長度單位怎么使用
px 是像素的意思,即屏幕中可以顯示的最小元素單元,在像素不同的設備顯示的大小會有出入。pt字體單位同理。
dp 是密度無關像素,比如手機寬是 2 英寸長是 3 英寸,如果它的分辨率是 320*480 像素,那么他的密度比是160dpi。pt字體單位同理。
總結一下,在編寫 Android 程序的時候,盡量將控件或布局的大小指定成 match_parent 或 wrap_content,如果必須要指定一個固定值,則使用 dp 來作為單位,指定文字大小的時候使用 sp 作為單位。
總結
以上是生活随笔為你收集整理的安卓学习 之 UI控件(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓学习 之 Activity(二)
- 下一篇: 安卓学习 之 碎片(四)