1、Android的五大布局

  • Linerlayout——–线性布局
    线性布局是Android中常用的一种布局方式,线性布局可以分为水平(X轴)线性布局和垂直(Y轴)线性布局两种,这两种线性布局唯一的差别就是orientation的值不同,orientation = vertical为垂直线性布局,orientation =horizontal为水平线性布局
  • RelativeLayout–相对布局
    RelativeLayout相对布局,控件的位置是按照相对位置来计算的,后一个控件的位置依赖于前一个控件的位置,是布局最常用,也是最灵活的一种布局。

RelativeLayout常用属性

layout_alignLeft 该控件的左边缘与给定ID控件的左边缘对齐
layout_alignParentTop="true" 子类控件相对父类容器靠上边
layout_alignRight 该控件的右边缘与给定ID控件的右边缘对齐
layout_alignTop 该控件的顶部边缘与给定ID控件的顶部边缘对齐
layout_alignParentLeft="true" 子类控件相对当前父类容器靠左边
layout_alignBottom 该控件的底部边缘与给定ID控件的底部边缘对齐
layout_alignBaseline="@+id/控件的ID" 该控件的内容与给定id控件的内容在一条线上

layout_marginTop="0dp" 子类控件距离父类容器上边的距离
layout_marginLeft="0dp" 子类控件距离父类容器左边的距离
layout_centerVertical="true 子类控件相对父类容器垂直居中
layout_centerHorizontal="true" 子类控件相对父类容器水平居中
layout_centerInParent="true" 子类控件相对父类容器即水平居中又垂直居中

layout_below="@+id/控件的ID" 该控件位于给定id控件的底部
layout_above="@+id/控件的ID" 该控件位于给定id控件的上面
layout_toLeftOf="@+id/控件的ID" 该控件位于给定id控件的左边
layout_toRightOf="@+id/控件的ID" 该控件位于给定id控件的右边

  • FrameLayout—–帧布局
    Framelayout添加的组件无法制定放置的位置,而且后一组件会覆盖前一组件
  • AbsoluteLayout-绝对布局
    不推荐使用,众所周知Android设备繁多,不同的分辨率、屏幕大小造成AbsoluteLayout(绝对布局)无法适配众多的Android设备
  • TableLayout—–表格布局

2、ListView

ListView的使用需要三个步骤:
1. 布局文件中添加ListView控件
2. 添加适配器
3. 添加数据
 

ListView 的 Activity类:

public class MainActivity extends Activity {
    private ListView mListView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         // 获取ListView对象
        mListView = (ListView) findViewById(R.id.listView);
        // new 一个自定义的Adapter类
        DataAdapter dataAdapter = new DataAdapter (MainActivity.this);
        // 将Adapter对象传入
        mListView.setAdapter(dataAdapter);
    }
}

自定义的Adapter 类:

public class DataAdapter extends BaseAdapter {

    private Context mContext;
    private LayoutInflater mLayoutInflater;
    private String[] mDataItem = {"数据1", "数据2", "数据3", "数据4"};

    public DataAdapter(Context context) {
        //DataAdapter的构造器,获取MainActivity的对象
        mContext = context;
        mLayoutInflater= (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount() {
        //获取数据的长度或大小
        return mDataItem.length;
    }
    @Override
    public Object getItem(int position) {
        //获取指定位置的数据
        return mDataItem[position];
    }

    @Override
    public long getItemId(int position) {
        //获取数据的ID
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //获取Item的布局对象
        convertView = mLayoutInflater.inflate(R.layout.item_about, null);
        //获取Item中的TextView
        TextView TextView_1 = (TextView) convertView.findViewById(R.id.textView_1);
        //设置TextView显示的信息
        TextView_1.setText(mDataItem[position]);

        return convertView;
    }
}

添加点击事件

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Toast.makeText(MainActivity.this, mDataItem[position]+"被点击了,怎么办!", Toast.LENGTH_SHORT).show();
    }
});

添加长按事件

mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        Toast.makeText(MainActivity.this, mDataItem[position]+"被我长按了,怎么办", Toast.LENGTH_LONG).show();
                return false;
            }
        });