软件编程
位置:首页>> 软件编程>> Android编程>> android动态布局之动态加入TextView和ListView的方法

android动态布局之动态加入TextView和ListView的方法

作者:jayqean  发布时间:2022-11-25 11:28:16 

标签:android,动态布局,TextView,ListView

本文实例讲述了android动态布局之动态加入TextView和ListView的方法。分享给大家供大家参考。具体实现方法如下:


package org.guoshi;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.guoshi.adapter.ImageAndTextAdapter;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class Main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.friend_info_view);  
 final LinearLayout linearLayout = (LinearLayout) findViewById(R.id.groups);
 final ListView lv = new ListView(this);
 List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
 Map<String, Object> map = new HashMap<String, Object>();
 map.put("title", "jayqean");
 map.put("imgsrc", R.drawable.icon);
 data.add(map);
 ListAdapter adapter = new ImageAndTextAdapter(Main.this, data, R.layout.chats_view_item, new String[] { "title", "imgsrc" }, new int[] {
   R.id.chats_view_name,
   R.id.chats_view_item_image });
 lv.setAdapter(adapter);
 final TextView tv1 = new TextView(this);
 tv1.setText("常用联系人");
 tv1.setId(1);
 final RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
 lp1.addRule(RelativeLayout.BELOW, R.id.groups);
 tv1.setLayoutParams(lp1);
 tv1.setBackgroundColor(R.color.group_view_background);
 tv1.setOnClickListener(new OnClickListener() {
  boolean flag = false;
  @Override
  public void onClick(View v) {
   // TODO Auto-generated method stub
   Log.d("tag", tv1.getText().toString());
   if(!flag){
    linearLayout.addView(lv, linearLayout.indexOfChild(tv1) + 1);
//     lp1.addRule(RelativeLayout.BELOW, 1);
//     linearLayout.addView(lv, lp1);
    flag = true;
   } else{
    linearLayout.removeView(lv);
    flag = false;
   }
  }
 });
 linearLayout.addView(tv1, lp1);
 // 线性布局 通过参数index控制加入的控件的位置
 // ------------------------
 // 加入分割线
 final TextView line = new TextView(this);
 line.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 1));
 line.setBackgroundColor(Color.WHITE);
 linearLayout.addView(line, 1);
 // ------------------------
 final ListView lv2 = new ListView(this);
 List<Map<String, Object>> data2 = new ArrayList<Map<String, Object>>();
 Map<String, Object> map2 = new HashMap<String, Object>();
 map2.put("title", "xiaobei");
 map2.put("imgsrc", R.drawable.icon);
 data2.add(map2);
 ListAdapter adapter2 = new ImageAndTextAdapter(Main.this, data2, R.layout.chats_view_item, new String[] { "title", "imgsrc" }, new int[] {
   R.id.chats_view_name,
   R.id.chats_view_item_image });
 lv2.setAdapter(adapter2);
 final TextView tv2 = new TextView(this);
 tv2.setText("离线好友");  
 tv2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
 tv2.setBackgroundColor(R.color.group_view_background);
 tv2.setOnClickListener(new OnClickListener() {
  boolean flag = false;
  @Override
  public void onClick(View v) {
   // TODO Auto-generated method stub
   Log.d("tag", tv2.getText().toString());
   if(!flag){
    linearLayout.addView(lv2, linearLayout.indexOfChild(tv2) + 1);
    flag = true;
   } else{
    linearLayout.removeView(lv2);
    flag = false;
   }
  }
 });
 linearLayout.addView(tv2, 2);
}
}

控制布局,可以通过RelativeLayout.LayoutParams类


final LinearLayout linearLayout = (LinearLayout) findViewById(R.id.groups);
final TextView tv1 = new TextView(this);
tv1.setText("常用联系人");
RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
lp1.addRule(RelativeLayout.BELOW, R.id.groups);
tv1.setLayoutParams(lp1);
linearLayout.addView(tv1, lp1);

也可采用linearLayout.addView(tv1, 0); // 线性布局 通过参数index控制加入的控件的位置


package org.guoshi.adapter;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Checkable;
import android.widget.ImageView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
public class ImageAndTextAdapter extends SimpleAdapter {
private Context mcontext;
private int[] mTo;
private String[] mFrom;
private ViewBinder mViewBinder;
private List<? extends Map<String, ?>> mData;
private int mResource;
private LayoutInflater mInflater;
public ImageAndTextAdapter(Context context,
  List<? extends Map<String, ?>> data, int resource, String[] from,
  int[] to) {
 super(context, data, resource, from, to);
 mcontext = context;
 mData = data;
 mResource = resource;
 mFrom = from;
 mTo = to;
 mInflater = (LayoutInflater) context
   .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//  mInflater = LayoutInflater.from(mcontext);
}
/**
 * @see android.widget.Adapter#getView(int, View, ViewGroup)
 */
public View getView(int position, View convertView, ViewGroup parent) {
 return createViewFromResource(position, convertView, parent, mResource);
}
private View createViewFromResource(int position, View convertView,
  ViewGroup parent, int resource) {
 View v;
 if (convertView == null) {
  v = mInflater.inflate(resource, parent, false);
  final int[] to = mTo;
  final int count = to.length;
  final View[] holder = new View[count];
  for (int i = 0; i < count; i++) {
   holder[i] = v.findViewById(to[i]);
  }
  v.setTag(holder);
 } else {
  v = convertView;
 }
 bindView(position, v);
//  final int index = position;
//  v.setOnClickListener(new OnClickListener() {
//  
//   public void onClick(View v) {
//    // TODO Auto-generated method stub
//    Log.d("item", index + "");
//   }
//  });
 return v;
}
private void bindView(int position, View view) {
 final Map<String, ?> dataSet = mData.get(position);
 if (dataSet == null) {
  return;
 }
 final ViewBinder binder = mViewBinder;
 final View[] holder = (View[]) view.getTag();
 final String[] from = mFrom;
 final int[] to = mTo;
 final int count = to.length;
 for (int i = 0; i < count; i++) {
  final View v = holder[i];
  if (v != null) {
   final Object data = dataSet.get(from[i]);
   String text = data == null ? "" : data.toString();
   if (text == null) {
    text = "";
   }
   boolean bound = false;
   if (binder != null) {
    bound = binder.setViewValue(v, data, text);
   }
   if (!bound) {
    if (v instanceof Checkable) {
     if (data instanceof Boolean) {
      ((Checkable) v).setChecked((Boolean) data);
     } else {
      throw new IllegalStateException(v.getClass()
        .getName()
        + " should be bound to a Boolean, not a "
        + data.getClass());
     }
    } else if (v instanceof TextView) {
     setViewText((TextView) v, text);
    } else if (v instanceof ImageView) {
     if (data instanceof Integer) {
      setViewImage((ImageView) v, (Integer) data);
     } else {
      setViewImage((ImageView) v, text);
     }
    } else {
     throw new IllegalStateException(
       v.getClass().getName()
         + " is not a "
         + " view that can be bounds by this SimpleAdapter");
    }
   }
  }
 }
}
/**
 * Called by bindView() to set the image for an ImageView but only if there
 * is no existing ViewBinder or if the existing ViewBinder cannot handle
 * binding to an ImageView.
 *
 * This method is called instead of {@link #setViewImage(ImageView, String)}
 * if the supplied data is an int or Integer.
 *
 * @param v
 *   ImageView to receive an image
 * @param value
 *   the value retrieved from the data set
 *
 * @see #setViewImage(ImageView, String)
 */
public void setViewImage(ImageView v, int value) {
 v.setImageResource(value);
}
/**
 * Called by bindView() to set the image for an ImageView but only if there
 * is no existing ViewBinder or if the existing ViewBinder cannot handle
 * binding to an ImageView.
 *
 * By default, the value will be treated as an image resource. If the value
 * cannot be used as an image resource, the value is used as an image Uri.
 *
 * This method is called instead of {@link #setViewImage(ImageView, int)} if
 * the supplied data is not an int or Integer.
 *
 * @param v
 *   ImageView to receive an image
 * @param value
 *   the value retrieved from the data set
 *
 * @see #setViewImage(ImageView, int)
 */
public void setViewImage(ImageView v, String value) {
 Bitmap bitMap = BitmapFactory.decodeFile(value);
 v.setImageBitmap(bitMap);
}
}

下面是friend_info_view.xml


<?xml version="1.0" encoding="UTF-8"?>
<!-- 好友信息列表.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="#ffffff">
<RelativeLayout android:layout_width="wrap_content"
 android:layout_height="wrap_content">
 <ImageView android:id="@+id/selfImage"
  android:adjustViewBounds="true" android:layout_width="@dimen/self_image_width"
  android:layout_height="@dimen/self_image_height"
  android:layout_marginLeft="5.0dip" android:layout_marginBottom="10.0dip"
  android:layout_marginTop="3.0dip" android:src="@drawable/default_image" />
 <ImageView android:id="@+id/currentStatus"
  android:layout_width="wrap_content" android:layout_height="wrap_content"
  android:src="@drawable/status_available" android:layout_marginLeft="8.0dip"
  android:layout_marginTop="20.0dip" android:layout_toRightOf="@id/selfImage" />
 <TextView android:id="@+id/setStatus" android:layout_width="wrap_content"
  android:layout_height="wrap_content" android:layout_marginTop="20.0dip"
  android:layout_marginLeft="8.0dip" android:text="Tap here to set your status"
  android:layout_toRightOf="@+id/currentStatus" />
</RelativeLayout>
<EditText android:id="@+id/searchFriend"
 android:adjustViewBounds="true" android:layout_height="50dip"
 android:layout_width="fill_parent" android:text="Search..." />
<!-- 好友组 点击textview后出现组里的详细好友列表 -->
<LinearLayout android:id="@+id/groups" android:layout_width="fill_parent"
 android:layout_height="wrap_content" android:orientation="vertical" >  
</LinearLayout>
</LinearLayout>

chats_view_item.xml


<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@color/white">
<RelativeLayout android:id="@+id/chats_view_item"
 android:layout_width="wrap_content" android:layout_height="wrap_content">
 <ImageView android:id="@+id/chats_view_item_image"
  android:layout_width="@dimen/friend_image_width"
  android:layout_height="@dimen/friend_image_height"
  android:paddingLeft="5.0dip" android:paddingTop="2.0dip"
  android:src="@drawable/default_image" />
 <TextView android:id="@+id/chats_view_name" android:textSize="14.0sp"
  android:paddingLeft="10.0dip" android:textStyle="bold"
  android:ellipsize="marquee" android:layout_width="wrap_content"
  android:layout_height="wrap_content" android:text="username"
  android:singleLine="true" android:paddingTop="2.0dip"
  android:layout_toRightOf="@+id/chats_view_item_image" />
 <ImageView android:id="@+id/friend_status_icon"
  android:layout_width="wrap_content" android:layout_height="wrap_content"
  android:paddingLeft="10.0dip" android:paddingTop="1.0dip"
  android:layout_below="@+id/chats_view_name" android:layout_toRightOf="@+id/chats_view_item_image"
  android:src="@drawable/jabber_available" />
 <TextView android:id="@+id/chats_view_status"
  android:textColor="@android:color/secondary_text_light"
  android:ellipsize="marquee" android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:text="available"
  android:singleLine="true" android:paddingLeft="2.0dip"
  android:layout_toRightOf="@+id/friend_status_icon"
  android:layout_below="@+id/chats_view_name" />
</RelativeLayout>
</LinearLayout>

效果图如下:

android动态布局之动态加入TextView和ListView的方法

希望本文所述对大家的Android程序设计有所帮助。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com