Android布局解析

关于Android布局,我用到的有4种:

  1. 线性布局:LinearLayout
  2. 相对布局:RelativeLayout
  3. 列表布局:ListView
  4. 框架视图:Fragment

基础布局属性:

属性 介绍
Width 该属性配置布局的宽度
Height 该属性配置布局的高度
注: 当取值为 match_parent 随父布局
取值为 wrap_content 内容大小自适应
或者可一直设置 50dp这种(dp是安卓布局很常见的尺寸单位)
Gravity 该属性配置内部子视图的布局,例如居中为:center

线性布局

主要是垂直线性布局和水平线性布局( orientation 属性是设置布局水平还是垂直的关键)

重点: 线性布局存在一个特殊的属性 weight ,该属性能够按照权值把布局所占用的空间分配掉.

相对布局

通过下面4个属性配置子视图所停靠在布局4个顶边的方向

1
2
3
4
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"

或者采用下面4种属性,配置相对另一个组件的停靠方向

1
2
3
4
android:layout_toEndOf="@+id/button"
android:layout_toRightOf="@+id/button"
android:layout_toLeftOf="@+id/button"
android:layout_toStartOf="@+id/button"

再通过下面4个属性配置子视图在各个方向所停靠的距离

1
2
3
4
android:layout_marginLeft="38dp"
android:layout_marginStart="38dp"
android:layout_marginTop="44dp"
android:layout_marginBottom="44dp"

列表布局(视图)

应用场景:

当我们视图中出现很多子视图,且子视图的格式基本一致,子视图数量较多时使用.
举个例子,列表存在1000个表项,我们不可能创建1000个LinearLayout在视图里面,因为1000个所占用的资源太多了,安卓已经帮我们处理好了这部分工作,采用列表布局,当表项不可见时,即列表往下拖拽后,android会自动回收已经不可见的子视图,为我们节省了大量资源,具体设置方法如下.

  1. 创建一个类继承自BaseAdapter 或者 ArrayAdapter<类>
  2. 重写适配器 Adapter 的 getView方法
  3. 通过 findById 找到ListView,再通过setAdapter方法配置适配器即可

使用示例见地址:(课程给出的示例)
https://github.com/udacity/ud839_CustomAdapter_Example/blob/master/app/src/main/java/com/example/android/flavor/AndroidFlavorAdapter.java

框架视图

框架视图一般用来匹配多种不同涉笔,如平板和手机,当使用手机时就是一个页面,使用平板时就是2个页面等,还可以用来制作左右滑动的那种页面效果.

第一步:创建一个MyFragment继承自Fragment
第二步:编写其onCreateView方法(类似Activity的写法)
第三步:编写myPagerAdapter继承自FragmentPagerAdapter
第四步:重写getItem方法,每个position对应返回一个Fragment类回去
第五步:重写getPageTitle方法,返回对应视图标题(根据position)
第六步:重写 getCount .返回视图总数
第七部:在主activity的配置文件里面假如ViewPager 布局
第八步:在activity代码里面通过findbyid找到布局,并设置viewPager.setAdapter(myPagerAdapter)
第九步:使用 TabLayout ,配置标题,代码如下:
TabLayouttabLayout=(TabLayout)findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);

使用示例地址:
https://github.com/udacity/ud839_Miwok/tree/837ef56a4b97d3e15bdb8249dd75b73262a469e8/app/src/main/java/com/example/android/miwok