android动态拼接生成界面 ,大量界面,移动端h5开发后上线

实现的整体思路:

1.处理 400张表的数据

将400张表的字段存到一张表里面,整理这400张表的数据是个比较大的工作,我们有个做delphi的工程师专门做了一个配置工具,打开每张表配置这张表格的字段。

数据库主要包括4张表格:T_Table  存储所有表格数据  T_TableDetail 存储所有表的字段数据 T_Type 字典表  存储所有控件类型  T_DIC存储所有表下拉数据

T_Table  字段包括:id  name  order parentID(因为我们这个表显示有层级结构)

T_TableDetail字段主要包括 :字段id   字段名称  字段顺序   表格id(属于哪张表)    类型id(这个字段要用什么控件显示)  isRequired 是否必填 defaultValue默认值

row   col  行列   dicid关联字典表数据

核心的就这些   这个根据自己的具体业务再搭建自己的数据库表结构。

2.搭建界面

有了基础数据后,我们要做的就是写一个通用Activity去动态拼装整个界面

我实现的思路是这样的 :将每种类型的控件都单独写成xml,比如有15种类型的控件就写15个xml,根据字段类型判断加载哪种类型的xml。

判断加载完界面  处理界面控件设置默认值,设置点击事件,设置是否可以编辑点击等(因为查看  修改  添加都用一套界面),这一些基本逻辑。

我就直接将初始化布局的地方贴出来,大家看一下。

public class ViewTypeUtil {

//表格名称类型 输入框 默认带值 且要单独获取值

public static final int item_view_type_zero = 0;

//单行输入框

public static final int item_view_type_one = 1;

//多行输入框

public static final int item_view_type_two = 2;

//短日期 如2012-01-12

public static final int item_view_type_three = 3;

//数值

public static final int item_view_type_four = 4;

//下拉框

public static final int item_view_type_five = 5;

//分部分项

public static final int item_view_type_six = 6;

//部位栏

public static final int item_view_type_seven = 7;

//单选框

public static final int item_view_type_eight = 8;

//多选框

public static final int item_view_type_nine= 9;

//列表

public static final int item_view_type_ten = 10;

//图纸标准

public static final int item_view_type_eleven = 11;

//图片

public static final int item_view_type_twelve = 12;

//组

public static final int item_view_type_thirteen = 13;

//长日期 2017-07-02 10:38:41

public static final int item_view_type_fourteen = 14;

//时间格式 如 10:25:14

public static final int item_view_type_fifteen = 15;

//标签

public static final int item_view_type_sixteen = 16;

}

public void initView(final LinearLayout linearLayout, List formDetailList) {

for (int i = 0; i < formDetailList.size(); i++) {

final FormDetail formDetail = formDetailList.get(i);

final int mType = formDetail.getTypeId();

if (mType == ViewTypeUtil.item_view_type_zero) {

mTypeZeroView = LayoutInflater.from(this).inflate(R.layout.item_type_zero, null);

mItemZeroFieldTv = (TextView) mTypeZeroView.findViewById(R.id.item_zero_field_tv);

mItemZeroValueEt = (EditText) mTypeZeroView.findViewById(R.id.item_zero_value_et);

if (mIntentFrom == FLAG_SHOW) {

mItemZeroValueEt.setEnabled(false);

}

mItemZeroValueEt.setText(formDetail.getuValue());

mItemZeroValueEt.setTag(formDetail.getTableDetailID());

mItemZeroFieldTv.setText(formDetail.getCaption());

mTypeZeroView.setTag(mType);

linearLayout.addView(mTypeZeroView);

} else if (mType == ViewTypeUtil.item_view_type_one) {

mTypeOneView = LayoutInflater.from(this).inflate(R.layout.item_type_one, null);

mItemOneFieldTv = (TextView) mTypeOneView.findViewById(R.id.item_one_field_tv);

mItemOneValueEt = (EditText) mTypeOneView.findViewById(R.id.item_one_value_et);

if (mIntentFrom == FLAG_SHOW) {

mItemOneValueEt.setEnabled(false);

}

mItemOneValueEt.setText(formDetail.getuValue());

mItemOneValueEt.setTag(formDetail.getTableDetailID());

mItemOneFieldTv.setText(formDetail.getCaption());

mTypeOneView.setTag(mType);

linearLayout.addView(mTypeOneView);

} else if (mType == ViewTypeUtil.item_view_type_two) {

mTypeTwoView = LayoutInflater.from(this).inflate(R.layout.item_type_two, null);

mItemTwoValueEt = (EditText) mTypeTwoView.findViewById(R.id.content_et);

mItemTwoValueEt.setTypeface(Constants.fontFace);

mItemTwoFieldTv = (TextView) mTypeTwoView.findViewById(R.id.item_two_field_tv);

if (mIntentFrom == FLAG_SHOW) {

mItemTwoValueEt.setEnabled(false);

} else {

mTypeTwoView.findViewById(R.id.content_iv).setOnClickListener(this);

mTypeTwoView.findViewById(R.id.voice_iv).setOnClickListener(this);

mTypeTwoView.findViewById(R.id.special_iv).setOnClickListener(this);

}

mItemTwoValueEt.setText(formDetail.getuValue());

mItemTwoFieldTv.setText(formDetail.getCaption());

mItemTwoValueEt.setTag(formDetail.getTableDetailID());

mTypeTwoView.findViewById(R.id.voice_iv).setTag(formDetail.getTableDetailID());

mTypeTwoView.findViewById(R.id.special_iv).setTag(formDetail.getTableDetailID());

mTypeTwoView.findViewById(R.id.content_iv).setTag(formDetail.getTableDetailID());

mTypeTwoView.setTag(mType);

linearLayout.addView(mTypeTwoView);

} else if (mType == ViewTypeUtil.item_view_type_three) {

mTypeThreeView = LayoutInflater.from(this).inflate(R.layout.item_type_three, null);

mDateKeyTv = (TextView) mTypeThreeView.findViewById(R.id.tv_test_date_key);

mDateValueEt = (EditText) mTypeThreeView.findViewById(R.id.et_test_date_value);

mDateKeyTv.setText(formDetail.getCaption());

if (mIntentFrom == FLAG_SHOW) {

mDateValueEt.setEnabled(false);

} else {

mDateValueEt.setOnClickListener(this);

}

if (!TextUtils.isEmpty(formDetail.getuValue())) {

mDateValueEt.setText(formDetail.getuValue());

} else {

mDateValueEt.setText(TimeUtil.getCurDateStr().substring(0, 12));

}

mDateValueEt.setTag(formDetail.getTableDetailID());

mTypeThreeView.setTag(mType);

linearLayout.addView(mTypeThreeView);

} else if (mType == ViewTypeUtil.item_view_type_four) {

mTypeFourView = LayoutInflater.from(context).inflate(R.layout.item_type_four, null);

mNumEt = (EditText) mTypeFourView.findViewById(R.id.et_num);

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值