Android 第二章

五大布局

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 {

        //此实例用于读取layout配置文件
        private LayoutInflater layoutInflater = null;

        //一个用于显示的数组
        private String[] buttons = {"去评价", "功能介绍", "系统通知", "帮助与反馈", "检查新版本"};

        //构造函数,需要一个Context类型的参数
        public ListViewAdapter(Context context) {
            //为layoutInflater赋值
            layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        //返回ListView中要展示内容的总数
        @Override
        public int getCount() {
            return buttons.length;
        }

        //返回每一项
        @Override
        public Object getItem(int i) {
            return buttons[i];
        }

        //为每一项设置一个ID
        @Override
        public long getItemId(int i) {
            return i;
        }

        //返回每一项的视图
        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            if (view == null) {
                //通过layoutInflater加载已存在的layout布局文件
                //注意是R.layout.XXX 而不是 R.id.XXX
                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 listView = (ListView) findViewById(R.id.listView);
            //设置ListView的适配器
            listView.setAdapter(new ListViewAdapter(MainActivity.this));
        }
    }
布局的优化
布局的优化主要通过以下几个方法
方法说明
减少布局的层次去除不必要的布局,最好布局的层次深度不要超过10层,能用相对布局实现的地方,就不要使用其他布局嵌套的方式来世实现
使用include对于一些公共的视图,可以统一写在一个layout文件中通过include来导入
使用merge标签使用merge代替不重要的布局,因为merge标签在解析的时候不会被保留
ViewStub需要时加载,对于某些不是第一时间要使用的,可以在需要的时候加载
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值