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);
}
}