android 在LinearLayout中动态添加View_YD-10-NG的博客-CSDN博客_linearlayout动态添加view

android 在LinearLayout中动态添加View

    前言
    了解
    使用
    参考
    完事

前言

在项目中有一个列表,列表里的item里面还有一个未知个数的横向列表
在这里插入图片描述
用列表来做,RecyclerView、ListView、GridView都需要另外再写一个Adapter,显得麻烦。这时候直接用一个横向的LinearLayout来使用addView方法就很方便了
了解

addView是ViewGroup中特有的方法,而单一的View是不存在该方法的。
 

addView(View child)   // child-被添加的View
addView(View child, int index)   // index-被添加的View的索引
addView(View child, int width, int height)   // width,height被添加的View指定的宽高
addView(View view, ViewGroup.LayoutParams params)   // params被添加的View指定的布局参数
addView(View child, int index, LayoutParams params) 

使用

添加View的方法

// 新建一个ImageView
ImageView imgDevice = new ImageView(mContext);
// 显示图片
imgDevice.setImageResource(list.get(i));
// 显示完全
imgDevice.setAdjustViewBounds(true);
// 居中显示
imgDevice.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
// 添加到LinearLayout
llDevice.addView(imgDevice);

下面是整个Adapter的代码
因为使用的是RecyclerView作为列表,所以使用了BaseRecyclerViewAdapterHelper作为适配器

/**
 * 联动列表适配器
 *
 * @author D10NG
 * @date on 2019-07-19 16:11
 */
public class LinkageListAdapter extends BaseQuickAdapter<RDSHLinkageInfo, BaseViewHolder> {

    public LinkageListAdapter(@Nullable List<RDSHLinkageInfo> data) {
        super(R.layout.item_linkage, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, RDSHLinkageInfo item) {
        helper.setText(R.id.txt_name, item.linkName);
        if (item.linkSwitch) {
            helper.setImageResource(R.id.img_switch, R.mipmap.icon_linkage_switch_on);
        } else {
            helper.setImageResource(R.id.img_switch, R.mipmap.icon_linkage_switch_off);
        }
        // 获取图标名字列表
        String[] linkIcons = item.linkIcons.split(",");
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < linkIcons.length; i++) {
            if (linkIcons[i].equals("link")) {
                list.add(R.mipmap.icon_linkage_link);
            } else {
                // 截取设备类型
                String deviceType = linkIcons[i].replace("deviceIcon_", "");
                // 获取配置信息
                BaseDeviceConfig config = DataCache.getInstance().getShAreaManager()
                        .getBaseDeviceConfigBytype(deviceType);
                list.add(config.getDeviceDefaultIcon());
            }
        }
        LinearLayout llDevice = helper.getView(R.id.ll_device);
        llDevice.removeAllViews();
        // 循环添加显示
        for (int i = 0; i < list.size(); i++) {
            // 新建一个ImageView
            ImageView imgDevice = new ImageView(mContext);
            // 显示图片
            imgDevice.setImageResource(list.get(i));
            // 显示完全
            imgDevice.setAdjustViewBounds(true);
            // 居中显示
            imgDevice.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
            // 添加到LinearLayout
            llDevice.addView(imgDevice);
        }
        helper.addOnClickListener(R.id.ll_linkage, R.id.img_switch);
    }
}

参考

@孟校长 ---- Android动态添加View之addView的用法
@猜火车 ---- 开源框架BaseRecyclerViewAdapterHelper使用——RecyclerView万能适配器

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐