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;
}
});