Android开发:动态生成TextView
Posted 广东晴转雨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发:动态生成TextView相关的知识,希望对你有一定的参考价值。
或许小伙伴们在安卓开发的过程中,会碰到这么一种需求:需要动态的展示列表信息;我这里以我最近开发的会议信息发布屏为例子。
那么会议预约发布屏需要展示当天的会议预约信息,问题是我并不知道这天是否有会议预约,也就不知道需要多少个 TextView 标签。如果是普通的 Java+jsp或Vue开发,这种需求就非常简单;前者只需要引入 jstl 标签库配合 el 表达式就可以轻松完成需求,后者使用 ElementUI 也可以轻松达成要求。那么在安卓开发中,又应该怎么做出这种效果呢?这就是我今天给大家分享的 <ListView>标签!话不多说,上代码!
1、在需要动态生成 TextView 标签的布局文件中添加
不想手敲可以直接在右上角选择 Design 视图模式下直接拖动调节
2、新建 list_view.xml 文件(名字无所谓啦可以自定义),在里面设置好 TextView的布局
同上面一样,不想手敲直接开启 Design 视图模式调节,TextView想加多少个都行,根据自己页面布局来
3、在你动态加载布局文件的 .java 文件的 onGreat 方法中遍历好需要的数据
@Override
public void showResponse(List<TCrConferenceReservation> result)
Date date = new Date();
//动态加载TextView
ListView listView = (ListView) findViewById(R.id.list);
List<ConferenceReservationVO> list = new ArrayList<>();
for (TCrConferenceReservation c : result)
if (DateUtils.isToday(DateUtils.convertDate(c.getStartTime(),"yyyy-MM-dd HH:mm").getTime()) && (DateUtils.convertDate(c.getEndTime(),"yyyy-MM-dd HH:mm").getTime() > date.getTime()))
ConferenceReservationVO conferenceReservationVO = new ConferenceReservationVO();
conferenceReservationVO.setId(c.getId());
conferenceReservationVO.setName(c.getName());
conferenceReservationVO.setIntroduction(c.getIntroduction());
conferenceReservationVO.setEmployeeName(c.getEmployeeName());
conferenceReservationVO.setDepartmentName(c.getDepartmentName());
conferenceReservationVO.setCreateTime(c.getCreateTime());
conferenceReservationVO.setStartTime(c.getStartTime());
conferenceReservationVO.setEndTime(c.getEndTime());
String startTime = c.getStartTime().substring(11, 16);
String endTime = c.getEndTime().substring(11, 16);
String times = startTime + "-" + endTime;
conferenceReservationVO.setTimeQuantum(times);
String conInFo = times + " | " + c.getEmployeeName() + " | " + c.getDepartmentName();
conferenceReservationVO.setConferenceInformation(conInFo);
list.add(conferenceReservationVO);
//预约会议时间段
TextView conferenceTime = (TextView) findViewById(R.id.conferenceTime);
//预约会议名
TextView conferenceName = (TextView) findViewById(R.id.conferenceName);
//预约会议人
TextView employeeName = (TextView) findViewById(R.id.employeeName);
//部门名
TextView departmentName = (TextView) findViewById(R.id.departmentName);
//当前时间
TextView currentTime = (TextView) findViewById(R.id.currentTime);
//会议状态
TextView fokus = (TextView) findViewById(R.id.fokus);
//分割线
TextView border = (TextView) findViewById(R.id.border);
//今日会议数
TextView count = (TextView) findViewById(R.id.count);
if (list.size() > 0)
if (date.getTime() < DateUtils.convertDate(list.get(0).getStartTime(),"yyyy-MM-dd HH:mm").getTime())
fokus.setText("下一个会议");
border.setBackgroundColor(Color.parseColor("#FB9F4A"));
conferenceTime.setText(list.get(0).getTimeQuantum());
conferenceName.setText(list.get(0).getName());
employeeName.setText(list.get(0).getEmployeeName());
departmentName.setText(list.get(0).getDepartmentName());
currentTime.setText(DateUtils.Format(date, "yyyy/MM/dd HH:mm"));
count.setText("今日会议 " + list.size());
else
list.add(new ConferenceReservationVO());
fokus.setText("会议空闲中");
border.setBackgroundColor(Color.WHITE);
conferenceName.setText("暂无会议");
conferenceTime.setText("无");
employeeName.setText("无");
departmentName.setText("无");
count.setText("今日会议 " + list.size());
listView.setAdapter(new MyAdapter(list,this));
我这里是应为在 app 里面添加了数据库,所以没在 onGreat 方法中写,如果大家对引入数据库感兴趣的话,我后面也会出一篇博客分享给大家!
4、新建 MyAdapter 类继承 BaseAdapter 类(名字自己定义)
public class MyAdapter extends BaseAdapter
private List<ConferenceReservationVO> data;
private Context context;
@Override
public int getCount()
return data.size();
@Override
public Object getItem(int i)
return null;
@Override
public long getItemId(int i)
return i;
@Override
public boolean isEnabled(int position)
return false;
@Override
public View getView(int i, View con, ViewGroup viewGroup)
ViewHolder viewHolder;
View view;
Date date = new Date();
if (con == null)
view = LayoutInflater.from(context).inflate(R.layout.list_view,null);
viewHolder = new ViewHolder(view);
view.setTag(viewHolder);
else
view = con;
viewHolder = (ViewHolder) view.getTag();
if (data.get(i).getTimeQuantum() != null)
viewHolder.textView.setText(data.get(i).getName());
viewHolder.info.setText(data.get(i).getConferenceInformation());
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) viewHolder.textView.getLayoutParams();
lp.topMargin = 40;
if (i == 0)
if ((DateUtils.convertDate(data.get(0).getStartTime(),"yyyy-MM-dd HH:mm").getTime() < date.getTime()) && (DateUtils.convertDate(data.get(0).getEndTime(),"yyyy-MM-dd HH:mm").getTime() > date.getTime()))
System.out.println(DateUtils.convertDate(data.get(0).getEndTime(),"yyyy-MM-dd HH:mm").getTime() > date.getTime());
System.out.println("data.get(0).getEndTime() = " + data.get(0).getEndTime());
viewHolder.tv.setBackgroundColor(Color.parseColor("#5DC755"));
else if ((DateUtils.convertDate(data.get(0).getStartTime(),"yyyy-MM-dd HH:mm").getTime() > date.getTime()))
viewHolder.tv.setBackgroundColor(Color.parseColor("#FB9F4A"));
else
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) viewHolder.textView.getLayoutParams();
lp.topMargin = 90;
viewHolder.textView.getLayoutParams();
viewHolder.textView.setText("暂无会议");
return view;
private final class ViewHolder
TextView textView;
TextView info;
TextView tv;
public ViewHolder(View view)
textView = (TextView) view.findViewById(R.id.name);
info = (TextView) view.findViewById(R.id.info);
tv = (TextView) view.findViewById(R.id.tv);
public MyAdapter(List<ConferenceReservationVO> data, Context context)
this.data = data;
this.context = context;
这样就可以了,其实也就这么几步;当然了这也只是非常初级的用法,因为本人也还在学习当中。好了,启动的效果如下:
因为小杰也在学习 android 开发当中,如果各位大佬有更好的方法或发现了我有什么错误的地方,欢迎及时指正!如果也有在学习当中的小伙伴有什么地方不太清楚的话,也可以评论或私信一起讨论!
Android 动态创建 Textview
以上是关于Android开发:动态生成TextView的主要内容,如果未能解决你的问题,请参考以下文章
请问android能够调用linux中codeblock生成的动态库so文件吗?
Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | VS 自带的 Android 平台应用创建与配置 )