五大布局
RelativeLayout 相对布局
一些常用属性
属性 | 说明 |
---|
基于父控件 | |
android:layout_alignParentTop | 将控件放置于父控件内的顶部 |
android:layout_alignParentBottom | 将控件放置于父控件内的底部 |
android:layout_alignParentLeft | 将控件放置于父内的左侧 |
android:layout_alignParentRight | 将控件放置于父控件内的右侧 |
android:layout_centerHorizontal | 在父控件内水平居中 |
android:layout_centerVertical | 在父控件内垂直居中 |
基于一个同层次控件 | |
android:layout_above | 放置在一个同层次控件的上方 |
android:layout_below | 放置在一个同层次控件的下方 |
LinearLayout 线性布局
一些常用属性
属性 | 说明 |
---|
android:orientation | 排列方向 |
android:layout_weight | 比重,用于子空间 |
android:layout_weightSum | 总比重,用于父控件,当此属性没有设置值的时候,将根据子控件比重自动计算 |
FrameLayout 帧(框架)布局
会根据layout文件中的层次关系显示,比如layout中 元素Button在元素TextView之前,那么显示的时候Button就在最底层,TextView在Button之上
AbsoluteLayout 绝对布局
不推荐使用,除非只在一种机型上运行的app,否则视图不忍直视
TableLayout 表格布局
很少用到,类似于表格,可以设置列数
ListView
首先为了使用ListView需要有一个适配器(这里新建了一个类,继承自BaseAdapter.也可以使用匿名内部类)
public class ListViewAdapter extends BaseAdapter {
private LayoutInflater layoutInflater = null;
private String[] buttons = {"去评价", "功能介绍", "系统通知", "帮助与反馈", "检查新版本"};
public ListViewAdapter(Context context) {
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return buttons.length;
}
@Override
public Object getItem(int i) {
return buttons[i];
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if (view == null) {
view = layoutInflater.inflate(R.layout.layout_list_view, null);
}
TextView lblName = (TextView) view.findViewById(R.id.lblName);
lblName.setText(buttons[i]);
return view;
}
}
适配器定义好之后,就是使用了,代码如下:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(new ListViewAdapter(MainActivity.this));
}
}
布局的优化
布局的优化主要通过以下几个方法
方法 | 说明 |
---|
减少布局的层次 | 去除不必要的布局,最好布局的层次深度不要超过10层,能用相对布局实现的地方,就不要使用其他布局嵌套的方式来世实现 |
使用include | 对于一些公共的视图,可以统一写在一个layout文件中通过include来导入 |
使用merge标签 | 使用merge代替不重要的布局,因为merge标签在解析的时候不会被保留 |
ViewStub | 需要时加载,对于某些不是第一时间要使用的,可以在需要的时候加载 |