文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2022-06-06 10:00

关注

本文实例讲述了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 { 
  
 @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); 
 } 
  
 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"); 
     } 
    } 
   } 
  } 
 } 
  
 public void setViewImage(ImageView v, int value) { 
  v.setImageResource(value); 
 } 
  
 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程序设计有所帮助。

您可能感兴趣的文章:android 通过向viewpage中添加listview来完成滑动效果(类似于qq滑动界面)android Listview模拟聊天界面Android 新闻界面模拟ListView和ViewPager的应用Android ListView自定义Adapter实现仿QQ界面Android App界面的ListView布局实战演练Android中使用Expandablelistview实现微信通讯录界面Android ListView添加头布局和脚布局实例详解Android实现的ListView分组布局改进示例神奇的listView实现自动显示隐藏布局Android代码Android开发之ListView的简单用法及定制ListView界面操作示例


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯