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开发:动态生成TextView的主要内容,如果未能解决你的问题,请参考以下文章

android 开发的时候怎么动态设置控件宽高

请问android能够调用linux中codeblock生成的动态库so文件吗?

Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | VS 自带的 Android 平台应用创建与配置 )

Android如何动态生成Radio和RadioGroup

Android TextView 不会用多行紧紧地拥抱文本,而是坚持使用 maxWidth

Android动态生成表格