一個(gè)好的APP不僅有美觀,好看的界面,更需要良好的性能和穩(wěn)定性。作為一名開發(fā)人員,需要理解界面設(shè)計(jì)原則并寫出優(yōu)秀的界面設(shè)計(jì)代碼。 本章主要講述基本控件的使用,界面布局及一些常用的界面設(shè)計(jì)屬性。 1.常用布局(1) LinearLayout 相對(duì)布局 android:android:layout_weight=”1” //百分比屬性 android:layout_above //表示與某個(gè)元素綁定后,在某個(gè)元素之上 android:layout_toLeftOf // 表示與某個(gè)元素綁定后,在某個(gè)元素左邊 android:layout_alignLeft //依賴于某個(gè)元素的左邊(平行對(duì)齊) android:layout_margin //表示與邊界的距離,沒有方向的margin是與四邊的距離 android:padding //是內(nèi)邊距 android:orientation=”vertical” //垂直展示子控件列表 android:orientation=”horizontal” //水平展示子控件列表 控件可見性設(shè)置: 設(shè)置成gone為隱藏(完全不在,不占用空間) 設(shè)置成invisible不可見(看不見,但還存在,占用空間) (2) RelativeLayout android:layout_alignParentRight //相對(duì)于父控件; android:layout_toRightOf //相對(duì)于xx控件 android:alighLeft //控件左邊和某控件的左邊平行 (3)FrameLayout 幀布局 控件會(huì)一直疊加在一起 (4)AbsoluteLayout(很少用) android不建議用,因?yàn)閍ndroid屏幕很多 (5)TableLayout(很少用) 2.布局技巧及優(yōu)化
兩個(gè)小工具:
LayoutInflater(加載資源文件格式) LayoutInflater 是一個(gè)抽象類。LayoutInflater這個(gè)類,它的作用類似于findViewById; 不同點(diǎn)是LayoutInflater是用來(lái)找res/layout/下的xml布局文件,并且實(shí)例化;而 findViewById是找xml布局文件下的具體widget控件。 在文檔中如下聲明: public abstract class LayoutInflater extends Object
layoutInflater在項(xiàng)目中的使用實(shí)例代碼: LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.custom, (ViewGroup)findViewById(R.id.test)); EditText editText = (EditText)view.findViewById(R.id.content); 對(duì)于上面代碼,指定了第二個(gè)參數(shù) ViewGroup root,當(dāng)然你也可以設(shè)置為 null 值。 View復(fù)用View復(fù)用可以有效的提高頁(yè)面加載的速度,從而提高整體程序的性能。View復(fù)用舉例如下: 1 public View getView(int i, View view, ViewGroup viewGroup) {2 LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);34 ViewHolder viewHolder;5 //1、view復(fù)用:只有當(dāng)view為空時(shí),才讀取xml布局文件;不為空則繼續(xù)使用view,取控件。6 if (view == null) {7 view = inflater.inflate(R.layout.item_listview, null);8 viewHolder = new ViewHolder;9 viewHolder.avatarImageView = (ImageView) view.findViewById(R.id.avatar_imageview);10 viewHolder.nameTextView = (TextView) view.findViewById(R.id.item_name);11 viewHolder.ageTextView = (TextView) view.findViewById(R.id.item_age);1213 //打標(biāo)簽14 view.setTag(viewHolder);15 } else {16 viewHolder = (ViewHolder) view.getTag;17 }1819 viewHolder.avatarImageView.setImageResource(R.drawable.avatar);20 viewHolder.nameTextView.setText(mUserInfo.get(i).getName);21 viewHolder.ageTextView.setText(mUserInfo.get(i).getAge + '');2223 return view;24 }25 }26 //2、創(chuàng)建一個(gè)類,用于緩存控件。27 class ViewHolder {28 ImageView avatarImageView;29 TextView nameTextView;30 TextView ageTextView;31 } ViewDemo 3.常用數(shù)據(jù)控件android中常用的數(shù)據(jù)控件包括,ScrollView,GridView,ListView。作為數(shù)據(jù)交互,一般會(huì)結(jié)合adapter使用。 Adapter是連接后端數(shù)據(jù)和前端顯示的適配器接口,是數(shù)據(jù)和UI(View)之間一個(gè)重要的紐帶。在常見的View(ListView,GridView) 等地方都需要用到Adapter。如下圖直觀的表達(dá)了Data、Adapter、View三者的關(guān)系: 所以,界面顯示的步驟是:
ArrayAdapter最為簡(jiǎn)單,只能展示一行字。 SimpleAdapter有最好的擴(kuò)充性,可以自定義出各種效果。 SimpleCursorAdapter可以認(rèn)為是SimpleAdapter對(duì)數(shù)據(jù)庫(kù)的簡(jiǎn)單結(jié)合,可以方面的把數(shù)據(jù)庫(kù)的內(nèi)容以列表的形式展示出來(lái)。 ListView常用屬性:
常用方法:
數(shù)據(jù)綁定: mPhoneBookListView = (ListView) findViewById(R.id.list_view); PhoneBookAdapter phoneBookAdapter = new PhoneBookAdapter(ListViewDemoActivity.this); mPhoneBookListView.setAdapter(phoneBookAdapter); adapter定義如下: 1 public class PhoneBookAdapter extends BaseAdapter {23 |
|
來(lái)自: 走出塵埃 > 《工控之路——編程篇》