一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

android開發(fā)

 走出塵埃 2016-03-18

一個(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)化
  1. Android布局官方建議不超過(guò)10層。
  2. 布局盡量用相對(duì)布局,盡量使用layout_above、layout_toLeftOf、layout_alignLeft、layout_margin、padding等方法達(dá)到想要的布局效果。
  3. 重用布局文件
  4. 減少視圖層級(jí),替換相應(yīng)的層級(jí)開頭,并不會(huì)改變層級(jí)的結(jié)構(gòu)
  5. 需要時(shí)才加載
  6. 不要嵌套多個(gè)使用layout_weight屬性的LinearLayout
  7. 重用布局文件
  8. 減少視圖層級(jí)

兩個(gè)小工具:

  1. Android lint:刪除無(wú)用的資源、布局、文件、引用、類、控件。
  2. HierarchyViewer:分析布局層級(jí)
巧用LayoutInflater

LayoutInflater(加載資源文件格式)

LayoutInflater 是一個(gè)抽象類。LayoutInflater這個(gè)類,它的作用類似于findViewById; 不同點(diǎn)是LayoutInflater是用來(lái)找res/layout/下的xml布局文件,并且實(shí)例化;而 findViewById是找xml布局文件下的具體widget控件。

在文檔中如下聲明: public abstract class LayoutInflater extends Object

    1. LayoutInflater inflater = getLayoutInflater;//調(diào)用Activity的getLayoutInflater
    2. LayoutInflater inflater = LayoutInflater.from(context);
    3. LayoutInflater inflater = (LayoutInflater)context.getSystemService (Context.LAYOUT_INFLATER_SERVICE);

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)系:

所以,界面顯示的步驟是:

  1. 建立數(shù)據(jù)源
  2. 建立adapter,連接數(shù)據(jù)源
  3. 綁定adapter到界面組件

ArrayAdapter最為簡(jiǎn)單,只能展示一行字。

SimpleAdapter有最好的擴(kuò)充性,可以自定義出各種效果。

SimpleCursorAdapter可以認(rèn)為是SimpleAdapter對(duì)數(shù)據(jù)庫(kù)的簡(jiǎn)單結(jié)合,可以方面的把數(shù)據(jù)庫(kù)的內(nèi)容以列表的形式展示出來(lái)。

ListView

常用屬性:

  1. listSelector 選中時(shí)時(shí)的背景
  2. scrollingCahce 滑動(dòng)緩存顏色
  3. cacheColorHint 緩存顏色值
  4. fastScrollEnable 快速滑動(dòng)條(類似微博)

常用方法:

  1. addHeaderView 設(shè)置頭
  2. addFooterView 設(shè)置尾

數(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 
private Context mContext;45 private LayoutInflater mLayoutInflater;67 private String mNames = {'小明', '小花'};89 public PhoneBookAdapter(Context context) {10      //構(gòu)造器11      mContext = context;12      mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);13 }1415 @Override16 public int getCount {17     // 有多少條數(shù)據(jù)18     return mNames.length;19 }2021 @Override22 public Object getItem(int position) {23     // 返回某一條數(shù)據(jù)對(duì)象24     return mNames[position];25 }2627 @Override28 public long getItemId(int position) {2930     return position;31 }3233 @Override34 public View getView(int position, View convertView, ViewGroup parent) {35     // 返回一個(gè)視圖36      convertView = mLayoutInflater.inflate(R.layout.item_phone_book_friend, null);37     //獲取控件38     TextView nameTextView = (TextView) convertView.findViewById(R.id.name_text_view);39     //和數(shù)據(jù)之間進(jìn)行綁定40     nameTextView.setText(mNames[position]);41     return convertView;//返回視圖42 }

PhoneBookAdapter

注:

getView(int position, View convertView, ViewGroup parent)

postion表示位置

convertView表示視圖

parent表示所有者

convertView = mLayoutInflater.inflate(R.layout.item_phone_book_friend, null); 將找到的布局變?yōu)橐晥D

TextView nameTextView = (TextView) convertView.findViewById(R.id.name_text_view); 讀出來(lái)的視圖里面找到TextView

構(gòu)造器負(fù)責(zé)傳遞上下文

LayoutInflater負(fù)責(zé)解析Layout 調(diào)用時(shí),需要使用getSystemService(Context.LAYOUT_INFLATER_SERVICE)方法

更新ListView中的數(shù)據(jù):

phoneBookAdapter.refreshData(mUserInfos);

phoneBookAdapter.notifyDataSetChanged; //執(zhí)行刷新功能

在對(duì)應(yīng)的Adapter方法中加入刷新方法:

public void refreshData(UserInfo userInfos) {

mUserInfos = userInfos;

}

GridView

GridView和ListView的相似與區(qū)別:

相同:

  1. GridView extends AbsListView;ListView extends ABSListView。
  2. adapter、數(shù)據(jù)、點(diǎn)擊事件、刷新都一樣。

不同之處:

樣式(宮格式)

下面是GridView特有重要的屬性:

android:numColumns='3' //顯示3列

android:columnWidth='50dp' //每一列的寬度

android:horizontalSpacing='110dp' //橫向間距

android:verticalSpacing='110dp' //縱向間距

ScrollView

讓不是列表的內(nèi)容區(qū)滾動(dòng)

extents自FrameLayout

支持垂直滾動(dòng)HorizontalScrollView

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    中文字幕乱码免费人妻av| 91精品视频免费播放| 久热这里只有精品九九| 亚洲一级二级三级精品| 91久久国产福利自产拍| 一级片二级片欧美日韩| 日本高清一道一二三区四五区| 成人午夜视频在线播放| 国产免费一区二区不卡| 东京热电东京热一区二区三区| 国产真人无遮挡免费视频一区| 欧美日韩国产成人高潮| 亚洲天堂精品一区二区| 久久人人爽人人爽大片av| 国语久精品在视频在线观看| 日本婷婷色大香蕉视频在线观看| 99久久国产亚洲综合精品| 国产免费成人激情视频| 99久久精品久久免费| 午夜国产成人福利视频| 国产又色又粗又黄又爽| 91人人妻人人爽人人狠狠| 国产日韩欧美一区二区| 丝袜人妻夜夜爽一区二区三区| 搡老妇女老熟女一区二区| 欧美成人国产精品高清| 欧美日韩有码一二三区| 91欧美日韩一区人妻少妇| 五月婷婷综合激情啪啪| 欧美黑人黄色一区二区| 国产在线日韩精品欧美| 91麻豆视频国产一区二区| 国产精品推荐在线一区| 欧美在线观看视频免费不卡| 欧美日韩精品一区免费| 亚洲内射人妻一区二区| 欧美精品亚洲精品日韩精品| 国产精品亚洲综合天堂夜夜| 最近日韩在线免费黄片| 日韩欧美高清国内精品| 又色又爽又黄的三级视频|