Android-开发笔记-005_布局与ListView控件

五大布局
  • Linearlayout – 线性布局
    所为线性布局就是直线的排列方式,只有两种方式,横向或纵向。
  • RelativeLayout – 相对布局
    所为相对布局就是指布局是对应了一个参照物,一般以父级或同级为参照物,比如在父级的中间,或同级的下面。
  • FrameLayout – 框架布局
    所有添加到这个布局中的视图都以层叠的方式显示。第一个添加的控件被放在最底层,最后一个添加到框架布局中的视图显示在最顶层,上一层的控件会覆盖下一层的控件。
  • AbsoluteLayout – 绝对布局
    绝对布局就指定屏幕的X,Y坐标来布局,此方法不能跟随屏幕大小而变化,不能适用多种屏幕,所以用得极少。
  • TableLayout – 表格布局
    表格布局就是把屏幕分成表格样式,这种布局只能在特定的环境下使用,也用得很少。
布局的优化

官方建议布局层次最多10层

  • 利用相对布局来减少布局的层次
  • 通过属性来优化
    • 利用重用布局文件<include />
    • 减少视图层级<merge />
    • 需要时才加载<ViewStub />
ListView控件

ListView需要两个Layout和一个Adapter类配合才能完成工作。

  1. 先创建一个ActivityLayout 包含 ListView 控件

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/colorBG"
        tools:context="com.misiling.Android01.ListViewActivity">
        <ListView
            android:id="@+id/list_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorWhite"
            android:layout_marginTop="@dimen/dimenDP_160"
            android:layout_marginBottom="@dimen/dimenDP_110"
            android:paddingLeft="@dimen/dimenDP_10"
            android:paddingRight="@dimen/dimenDP_10"
        >
        </ListView>
    </RelativeLayout>
  2. 再创建一个itemLayout,是用来布局ListView每一项。下而的例子只包含了一个TextView

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"    
        >
    
        <TextView
            android:id="@+id/item_name_text_view"
            android:layout_width="match_parent"
            android:layout_height="@dimen/dimenDP_44"
            android:textColor="@color/colorBlack"
            android:textSize="@dimen/textSize_20"
            android:textStyle="bold"
            android:gravity="center_vertical"
        />
    
    </LinearLayout>
  3. 再创建一个Adpter类,在getView方式中读取itemLayout配置与TextView绑定并赋值。

    public class ListViewAdapter extends BaseAdapter {
        private Context mContext;
        private LayoutInflater mLayoutInflater;
        private String[] itemNames = {"去评分","功能介绍","系统通知","帮助与反馈","检查新版本"};
    
        public ListViewAdapter(Context context) {
            this.mContext = context;
            mLayoutInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
    
        @Override
        public int getCount() {
            return itemNames.length;
        }
    
        @Override
        public Object getItem(int position) {
            return itemNames[position];
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            convertView = mLayoutInflater.inflate(R.layout.item_listview,null);
            TextView itemNameTextView = (TextView) convertView.findViewById(R.id.item_name_text_view);
            itemNameTextView.setText(itemNames[position]);
            return convertView;
        }
    }
  4. 再在ListView控件所在的Activity类中绑定这个Adapter.

    public class ListViewActivity extends AppCompatActivity {
        ListView listView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_listview);
    
            listView = (ListView) findViewById(R.id.list_view);
            ListViewAdapter listViewAdapter = new ListViewAdapter(ListViewActivity.this);
            listView.setAdapter(listViewAdapter);
        }
    }

ListView类找到ListView控制后根据Adapter找到itemLayout布局并赋值然后反回这个View加载到ListView控件里。这样就完成了ListView的展示。

GridView
  • 相似之处:
    GridView extends AbsListView
    ListView extends AbsListView
    adapter、数据、点击事件、刷新都一样
  • 不同之处:
    样式(宫格式)
ScrollView

不是列表的内容区滚动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值