安卓----第二章(布局技巧与列表控件)

1.五大布局


android中的布局包括:LinearLayout(线性布局)、RelativeLayout(相对布局)、FrameLayout(框架布局)、AbsoluteLayout(绝对布局)、TableLayout(表格布局),在实际中主要实用的是前面三种。

1.1LinearLayout(线性布局)

LinearLayout方法全解

特点:

线性方向上依次排列

一些需要注意的点:

weight(权重)的解释:按比例划分水平方向:将涉及到的View的android:width属性设置为0dp,然后设置为android weight属性设置比例即可;类推,竖直方向,只需设android:height为0dp,然后设weight属性!

android:orientation="vertical" 时, 只有水平方向的设置才起作用,垂直方向的设置不起作用。 即:left,right,center_horizontal 是生效的。 当 android:orientation="horizontal" 时, 只有垂直方向的设置才起作用,水平方向的设置不起作用。 即:top,bottom,center_vertical 是生效的。

1.2RealtiveLayout(相对布局)

RelativeLayout方法图

一些需要注意的点:

margin与padding的区别

初学者对于这两个属性可能会有一点混淆,这里区分下: 首先margin代表的是偏移,比如marginleft = "5dp"表示组件离容器左边缘偏移5dp; 而padding代表的则是填充,而填充的对象针对的是组件中的元素,比如TextView中的文字 比如为TextView设置paddingleft = "5dp",则是在组件里的元素的左边填充5dp的空间! margin针对的是容器中的组件,而padding针对的是组件中的元素,要区分开来!

1.3FrameLayout(框架布局)

又称为帧布局,该布局直接在屏幕上开辟出一块空白的区域,当我们往里面添加控件的时候,会默认把他们放到这块区域的左上角,而这种布局方式却没有任何的定位方式,所以它应用的场景并不多;帧布局的大小由控件中最大的子控件决定,如果控件的大小一样大的话,那么同一时刻就只能看到最上面的那个组件!后续添加的控件会覆盖前一个!虽然默认会将控件放置在左上角,但是我们也可以通过layout_gravity属性,指定到其他的位置。

1.3.1常用属性:

android:foreground:*设置改帧布局容器的前景图像

android:foregroundGravity:设置前景图像显示的位置

1.4AbsoluteLayout(绝对布局)---已被弃用

1.5TableLayout(表格布局)

方法图

需要注意的点:

列数是从0开始的。

每一个<TableRow> </TableRow>即为一行

1.6布局技巧与优化

1.6.1布局的优化:

布局的结构要清晰

嵌套的层数需要控制(小于10层)

减少层数(使用相对布局)

1.6.2布局的技巧

<include/>重用布局文件

<merge/>减少试图层数

<ViewStub/>需要时才加载

不要嵌套多个使用layout_weight属性的LinearLayout

Android lint---优化代码、查找没用到的资源、查找错误

HierarchyViewer---优化布局设计


2无比重要的ListView


ListView是一种以列表形式展示具体内容,并且能够根据数据的长度自适应显示的控件。一个listView通常有两个职责:一是将数据填充到布局,二是处理用户的选择点击操作等

构建ListView的元素:

- ListView中每一列的view。

- 填入View的数据,如字符串、图片或组件。

- 连接数据与ListView的适配器。

2.1Adapter

适配器是一个连接数据和AdapterView(ListView就是一个典型的AdapterView,后面还会学习其他的)的桥梁,通过它能有效地实现数据与AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便.

适配器包括:ArrayAdapter、SimpleAdapter、SimpleCursorAdapter、BaseAdapter等。(各种Adapter只不过是转换的方式和能力不一样而已)

2.1.1BaseAdapter


BaseAdapter的方法图

使用BaseAdapter必须写一个类继承它,同时BaseAdapter是一个抽象类,继承它必须实现它的方法。BaseAdapter的灵活性就在于它要重写很多方法,看一下有哪些方法,如上图所示为继承自BaseAdapter的SpeechListAdapter所实现的方法,其中最重要的即为getView()方法。

当系统开始绘制ListView的时候,首先调用getCount()方法。得到它的返回值,即ListView的长度。然后系统调用getView()方法,根据这个长度逐一绘制ListView的每一行。也就是说,如果让getCount()返回1,那么只显示一行。而getItem()和getItemId()则在需要处理和取得Adapter中的数据时调用。

public class PhoneBookAdapter extends BaseAdapter { 

   private Context mContext;    

private LayoutInflater mLayoutInflater;  

  private ListmUserInfos= new ArrayList<>();

    public PhoneBookAdapter(Context context, List userInfos) {

mContext = context;

mUserInfos = userInfos;

mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

@Override

public int getCount() {

// 有多少条数据

return mUserInfos.size();

}

@Override

public Object getItem(int position) {

// 返回某一条数据对象

return mUserInfos.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

// 返回一个视图

if(converView==null){

convertView = mLayoutInflater.inflate(R.layout.item_phone_book_friend, null);

// 获取控件

TextView nameTextView = (TextView) convertView.findViewById(R.id.name_text_view);

TextView  ageTextView = (TextView) convertView.findViewById(R.id.age_text_view);

ImageView avatarImageView = (ImageView) convertView.findViewById(R.id.avatar_image_view);

// 和数据之间进行绑定

nameTextView.setText(mUserInfos.get(position).getUserName());

ageTextView.setText(String.valueOf(mUserInfos.get(position).getAge()));

avatarImageView.setImageResource(R.drawable.ic_launcher);

return convertView;

}

在该构造器中通过使用判断convertView是否为空来对性能进行优化。

2.2在JAVA文件中调用Adapter

public class ListViewDemoActivity extends Activity {

private ListView mPhoneBookListView;

private ListmUserInfos;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_listview_demo);

mPhoneBookListView = (ListView) findViewById(R.id.list_view);

mUserInfos = new ArrayList<>();

mUserInfos.add(new UserInfo("刘小明", 21));

mUserInfos.add(new UserInfo("张大伟", 22));

PhoneBookAdapter phoneBookAdapter = new PhoneBookAdapter(ListViewDemoActivity.this,mUserInfos);

mPhoneBookListView.setAdapter(phoneBookAdapter);

}

}



2.3ListView的点击事件

调用setOnItemClickListener()方法来为ListView注册一个监听器,当ListView中的任何一个子项被点击时就会回调onItemClick()方法。


3GridView和ScrollView


3.1GridView与ListView的相似与区别

相似之处:

GridView extends AbsListView

LIstView extends AbsListView

adapter、数据、点击事件、刷新都一样

不同之处:

样式(GridView为宫格式)

3.2GridView应用的地方

微信表情选择、相册选择、头像

3.3ScrollView的应用

不是列表的内容区的滚动(

只支持一种方向上的滚动----默认为垂直)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容