android编程之代码布局(三)

前两篇介绍了一般常用的布局组件写法,这一次,再来看看其他组件的

一、listview

listview也和大多数组件一样,一般会在这里难住的,就是自定义布局样式的时候。

  1. // 创建LinearLayout对象  
  2. LinearLayout mRelativeLayout = new LinearLayout(this);  
  3. mRelativeLayout.setLayoutParams(new LinearLayout.LayoutParams(  
  4.         LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
  5.   
  6. //  创建ListView对象  
  7. ListView mListView = new ListView(this);  
  8. mListView.setAdapter(new ListAdapter(this, mVector));  
  9.   
  10. // 添加组件  
  11. mRelativeLayout.addView(mListView, new LayoutParams(  
  12.         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是如何自定义布局的

  1. public class ListAdapter extends BaseAdapter {  
  2.     private Vector<String> mVector;  
  3.   
  4.     private Context mContext;  
  5.   
  6.     public ListAdapter(Context mContext, Vector<String> mVector) {  
  7.         this.mContext = mContext;  
  8.         this.mVector = mVector;  
  9.     }  
  10.   
  11.     public Object getItem(int position) {  
  12.         return null;  
  13.     }  
  14.   
  15.     public long getItemId(int position) {  
  16.         return 0;  
  17.     }  
  18.   
  19.     public int getCount() {  
  20.         return mVector.size();  
  21.     }  
  22.   
  23.     class ViewHolder {  
  24.         ImageView head;  
  25.         TextView name;  
  26.     }  
  27.   
  28.     public View getView(int position, View convertView, ViewGroup parent) {  
  29.         ViewHolder holder = null;  
  30.         RelativeLayout rl = null;  
  31.         if (convertView == null) {  
  32.             rl = new RelativeLayout(mContext);  
  33.             rl.setBackgroundDrawable(bitmapDrawable_listitembg);  
  34.   
  35.             // head  
  36.             ImageView head = new ImageView(mContext);  
  37.             head.setId(1);  
  38.               
  39.             RelativeLayout.LayoutParams mLayoutParams = new RelativeLayout.LayoutParams(  
  40.                     6464);  
  41.             mLayoutParams.topMargin = 15;  
  42.             mLayoutParams.leftMargin = 10;  
  43.             mLayoutParams.bottomMargin = 15;  
  44.             mLayoutParams.addRule(RelativeLayout.CENTER_VERTICAL);  
  45.             rl.addView(head, mLayoutParams);  
  46.   
  47.             // nickname  
  48.             TextView mTextView = new TextView(mContext);  
  49.             mTextView.setTextSize(20);  
  50.             mTextView.setTextColor(0xff000000);  
  51.             mTextView.setId(2);  
  52.   
  53.             mLayoutParams = new RelativeLayout.LayoutParams(  
  54.                     LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);  
  55.             mLayoutParams.topMargin = 10;  
  56.             mLayoutParams.leftMargin = 10;  
  57.             mLayoutParams.addRule(RelativeLayout.RIGHT_OF, 1);  
  58.             rl.addView(mTextView, mLayoutParams);  
  59.   
  60.               
  61.             holder = new ViewHolder();  
  62.             holder.head = head;  
  63.             holder.name = mTextView;  
  64.             rl.setTag(holder);  
  65.         } else {  
  66.             holder = (ViewHolder) convertView.getTag();  
  67.             rl = (RelativeLayout) convertView;  
  68.         }  
  69.   
  70.         holder.head.setImageDrawable(bitmapDrawable_headimage);  
  71.         holder.name.setText(mVector.elementAt(position));  
  72.   
  73.         return rl;  
  74.     }  
  75. }  
	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中读取得到的,头像的也是。

最后附上显示效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值