android编程之代码布局(三)
2017-06-27 09:47
344 查看
前两篇介绍了一般常用的布局组件写法,这一次,再来看看其他组件的
一、listview
listview也和大多数组件一样,一般会在这里难住的,就是自定义布局样式的时候。
[java]
view plain
copy
print?
// 创建LinearLayout对象
LinearLayout mRelativeLayout = new LinearLayout(this);
mRelativeLayout.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
// 创建ListView对象
ListView mListView = new ListView(this);
mListView.setAdapter(new ListAdapter(this, mVector));
// 添加组件
mRelativeLayout.addView(mListView, new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
其中,ListAdapter为继承BaseAdapter的自定义类。
mVector是我们自定义的数据,里面包含了两个名字:小明,小刚。
接下来,我们看看重点的ListAdapter是如何自定义布局的
[java]
view plain
copy
print?
public class ListAdapter extends BaseAdapter {
private Vector<String> mVector;
private Context mContext;
public ListAdapter(Context mContext, Vector<String> mVector) {
this.mContext = mContext;
this.mVector = mVector;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public int getCount() {
return mVector.size();
}
class ViewHolder {
ImageView head;
TextView name;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
RelativeLayout rl = null;
if (convertView == null) {
rl = new RelativeLayout(mContext);
rl.setBackgroundDrawable(bitmapDrawable_listitembg);
// head
ImageView head = new ImageView(mContext);
head.setId(1);
RelativeLayout.LayoutParams mLayoutParams = new RelativeLayout.LayoutParams(
64, 64);
mLayoutParams.topMargin = 15;
mLayoutParams.leftMargin = 10;
mLayoutParams.bottomMargin = 15;
mLayoutParams.addRule(RelativeLayout.CENTER_VERTICAL);
rl.addView(head, mLayoutParams);
// nickname
TextView mTextView = new TextView(mContext);
mTextView.setTextSize(20);
mTextView.setTextColor(0xff000000);
mTextView.setId(2);
mLayoutParams = new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
mLayoutParams.topMargin = 10;
mLayoutParams.leftMargin = 10;
mLayoutParams.addRule(RelativeLayout.RIGHT_OF, 1);
rl.addView(mTextView, mLayoutParams);
holder = new ViewHolder();
holder.head = head;
holder.name = mTextView;
rl.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
rl = (RelativeLayout) convertView;
}
holder.head.setImageDrawable(bitmapDrawable_headimage);
holder.name.setText(mVector.elementAt(position));
return rl;
}
}
如果对之前讲的相对布局看过的话,这里对自定义布局的写法应该不难理解。
定义了一个头像ImageView和一个名字TextView。让头像距离上下左各有一段距离,然后让名字在头像右边显示,并距离头像右一定距离。
关于布局背景图片的设置:rl.setBackgroundDrawable(bitmapDrawable_listitembg);设置的图片是从asset中读取得到的,头像的也是。
最后附上显示效果:
一、listview
listview也和大多数组件一样,一般会在这里难住的,就是自定义布局样式的时候。
[java]
view plain
copy
print?
// 创建LinearLayout对象
LinearLayout mRelativeLayout = new LinearLayout(this);
mRelativeLayout.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
// 创建ListView对象
ListView mListView = new ListView(this);
mListView.setAdapter(new ListAdapter(this, mVector));
// 添加组件
mRelativeLayout.addView(mListView, new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
// 创建LinearLayout对象 LinearLayout mRelativeLayout = new LinearLayout(this); mRelativeLayout.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); // 创建ListView对象 ListView mListView = new ListView(this); mListView.setAdapter(new ListAdapter(this, mVector)); // 添加组件 mRelativeLayout.addView(mListView, new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
其中,ListAdapter为继承BaseAdapter的自定义类。
mVector是我们自定义的数据,里面包含了两个名字:小明,小刚。
接下来,我们看看重点的ListAdapter是如何自定义布局的
[java]
view plain
copy
print?
public class ListAdapter extends BaseAdapter {
private Vector<String> mVector;
private Context mContext;
public ListAdapter(Context mContext, Vector<String> mVector) {
this.mContext = mContext;
this.mVector = mVector;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public int getCount() {
return mVector.size();
}
class ViewHolder {
ImageView head;
TextView name;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
RelativeLayout rl = null;
if (convertView == null) {
rl = new RelativeLayout(mContext);
rl.setBackgroundDrawable(bitmapDrawable_listitembg);
// head
ImageView head = new ImageView(mContext);
head.setId(1);
RelativeLayout.LayoutParams mLayoutParams = new RelativeLayout.LayoutParams(
64, 64);
mLayoutParams.topMargin = 15;
mLayoutParams.leftMargin = 10;
mLayoutParams.bottomMargin = 15;
mLayoutParams.addRule(RelativeLayout.CENTER_VERTICAL);
rl.addView(head, mLayoutParams);
// nickname
TextView mTextView = new TextView(mContext);
mTextView.setTextSize(20);
mTextView.setTextColor(0xff000000);
mTextView.setId(2);
mLayoutParams = new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
mLayoutParams.topMargin = 10;
mLayoutParams.leftMargin = 10;
mLayoutParams.addRule(RelativeLayout.RIGHT_OF, 1);
rl.addView(mTextView, mLayoutParams);
holder = new ViewHolder();
holder.head = head;
holder.name = mTextView;
rl.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
rl = (RelativeLayout) convertView;
}
holder.head.setImageDrawable(bitmapDrawable_headimage);
holder.name.setText(mVector.elementAt(position));
return rl;
}
}
public class ListAdapter extends BaseAdapter { private Vector<String> mVector; private Context mContext; public ListAdapter(Context mContext, Vector<String> mVector) { this.mContext = mContext; this.mVector = mVector; } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0; } public int getCount() { return mVector.size(); } class ViewHolder { ImageView head; TextView name; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; RelativeLayout rl = null; if (convertView == null) { rl = new RelativeLayout(mContext); rl.setBackgroundDrawable(bitmapDrawable_listitembg); // head ImageView head = new ImageView(mContext); head.setId(1); RelativeLayout.LayoutParams mLayoutParams = new RelativeLayout.LayoutParams( 64, 64); mLayoutParams.topMargin = 15; mLayoutParams.leftMargin = 10; mLayoutParams.bottomMargin = 15; mLayoutParams.addRule(RelativeLayout.CENTER_VERTICAL); rl.addView(head, mLayoutParams); // nickname TextView mTextView = new TextView(mContext); mTextView.setTextSize(20); mTextView.setTextColor(0xff000000); mTextView.setId(2); mLayoutParams = new RelativeLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); mLayoutParams.topMargin = 10; mLayoutParams.leftMargin = 10; mLayoutParams.addRule(RelativeLayout.RIGHT_OF, 1); rl.addView(mTextView, mLayoutParams); holder = new ViewHolder(); holder.head = head; holder.name = mTextView; rl.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); rl = (RelativeLayout) convertView; } holder.head.setImageDrawable(bitmapDrawable_headimage); holder.name.setText(mVector.elementAt(position)); return rl; } }
如果对之前讲的相对布局看过的话,这里对自定义布局的写法应该不难理解。
定义了一个头像ImageView和一个名字TextView。让头像距离上下左各有一段距离,然后让名字在头像右边显示,并距离头像右一定距离。
关于布局背景图片的设置:rl.setBackgroundDrawable(bitmapDrawable_listitembg);设置的图片是从asset中读取得到的,头像的也是。
最后附上显示效果:
相关文章推荐
- android编程之代码布局(三)
- android编程之代码布局
- android编程之代码布局(一)
- android编程之代码布局(二)
- android编程之代码布局(一)
- android编程之代码布局(常见错误)
- android编程之代码布局(常见错误)
- android编程之代码布局(二)
- android编程之代码布局
- android编程之代码布局(常见错误)
- android编程之代码布局
- android编程之代码布局(二)
- android编程之代码布局(二)
- android编程之代码布局(一)
- Android编程14个很有用的代码片段
- Android入门学习_代码常用布局
- Android编程14个很有用的代码片段
- 在Android代码中实现动态布局
- android讲义2之代码布局
- android 如何使用代码实现嵌套布局