android编程之代码布局(三)

来源:互联网 发布:java里的goto 编辑:程序博客网 时间:2024/05/18 01:09

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

一、listview

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

[java] view plaincopy
  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));  

其中,ListAdapter为继承BaseAdapter的自定义类。

mVector是我们自定义的数据,里面包含了两个名字:小明,小刚。

接下来,我们看看重点的ListAdapter是如何自定义布局的

[java] view plaincopy
  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. }  

如果对之前讲的相对布局看过的话,这里对自定义布局的写法应该不难理解。
定义了一个头像ImageView和一个名字TextView。让头像距离上下左各有一段距离,然后让名字在头像右边显示,并距离头像右一定距离。

关于布局背景图片的设置:rl.setBackgroundDrawable(bitmapDrawable_listitembg);设置的图片是从asset中读取得到的,头像的也是。

最后附上显示效果:
原创粉丝点击