为什么80%的码农都做不了架构师?>>>   

比如,有这么个需求,要求从服务器上返回的数据来动态生产视图,来看

activity_main.xml<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:focusable="true"android:focusableInTouchMode="true"tools:context=".MainActivity" ><LinearLayoutandroid:id="@+id/autorunlayout"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical" /></RelativeLayout>
public class MainActivity extends Activity {private List<AutoRun> list;private AutoRun autoRun;private LinearLayout autorunlayout;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);autorunlayout = (LinearLayout) findViewById(R.id.autorunlayout);list = new ArrayList<AutoRun>();autoRun = new AutoRun();dataProvieder();GetView();}/**** @desc  用来模拟服务器得到的数据**/private List<AutoRun> dataProvieder() {String str = "["+ "{\"category\":0,\"label\":\"姓名\",\"minValue\":\"0\",\"maxValue\":\"0\",\"defaultValue\":\"0\",\"listValue\":[]},"+ "{\"category\":0,\"label\":\"年龄\",\"minValue\":\"4\",\"maxValue\":\"120\",\"defaultValue\":\"20\",\"listValue\":[]},"+ "{\"category\":1,\"label\":\"城市\",\"minValue\":\"0\",\"maxValue\":\"0\",\"defaultValue\":\"2\",\"listValue\":[\"北京\",\"上海\",\"广东\",\"深圳\",\"江西\"]},"+ "{\"category\":1,\"label\":\"职业\",\"minValue\":\"0\",\"maxValue\":\"0\",\"defaultValue\":\"0\",\"listValue\":[\"IT\",\"教育贸易\",\"贸易\",\"金融\",\"政府\"]}"+ "]";Gson gson = new Gson(); //Google提供的对象和Json互转的jar包list = gson.fromJson(str, new TypeToken<List<AutoRun>>() {}.getType());return list;}private void GetView() {for (int i = 0; i < list.size(); i++) {if (list.get(i).category == 0) {autorunlayout.addView(GetEditLayout(list.get(i).label,list.get(i).defaultValue));} else if (list.get(i).category == 1) {autorunlayout.addView(GetSpinnerLayout(list.get(i).label,list.get(i).listValue, list.get(i).defaultValue));}}}private View GetEditLayout(String txt, String hint) {LayoutInflater inflater = getLayoutInflater().from(this);View view = inflater.inflate(R.layout.autorun_edittext, null);((TextView) view.findViewById(R.id.label)).setText(txt);((EditText) view.findViewById(R.id.edit)).setHint(hint);return view;}private View GetSpinnerLayout(String txt, List<String> value,String defaulValue) {LayoutInflater inflater = getLayoutInflater().from(this);View view = inflater.inflate(R.layout.autorun_spnnier, null);((TextView) view.findViewById(R.id.label)).setText(txt);ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1, value);Spinner spinner = (Spinner) view.findViewById(R.id.spinner);spinner.setAdapter(adapter);spinner.setSelection(Integer.parseInt(defaulValue));return view;}
}
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="50.0dp"android:gravity="center_vertical"android:orientation="horizontal" ><TextViewandroid:id="@+id/label"android:layout_width="80.0dp"android:layout_height="wrap_content"android:gravity="center"android:text="test" /><EditTextandroid:id="@+id/edit"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginRight="10.0dp" /></LinearLayout>
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="50.0dp"android:gravity="center_vertical"android:orientation="horizontal" ><TextViewandroid:id="@+id/label"android:layout_width="80.0dp"android:layout_height="wrap_content"android:gravity="center"android:text="test" /><Spinnerandroid:id="@+id/spinner"android:layout_width="match_parent"android:layout_height="50.0dp"android:layout_marginRight="10.0dp" /></LinearLayout>

运行效果:

注:
 
 获得 LayoutInflater 实例的三种方式

1.LayoutInflater inflater = getLayoutInflater();  //调用Activity的getLayoutInflater()2.LayoutInflater localinflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);3. LayoutInflater inflater = LayoutInflater.from(context);

这三种方式最终本质是都是调用的Context.getSystemService()

我的博客其它文章列表
  http://my.oschina.net/helu

转载于:https://my.oschina.net/helu/blog/141738

android通过json生成视图相关推荐

  1. Android Json生成及解析实例

    JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...

  2. android解析json异常处理,Android的JSON异常而解析

    我试图分析我的Android应用程序中的JSON(进一步我将填补与内容列表视图),所以我做了这个类:Android的JSON异常而解析 public class MainActivity extend ...

  3. Android Studio打包生成APK

    Android Studio打包生成APK 当我们编写好代码,测试号应用后,需要在真机环境下测试,这个时候要生成apk,具体步骤如下: 如图,点击Build > Generate Signed ...

  4. android 读取json数据(遍历JSONObject和JSONArray)

    android 读取json数据(遍历JSONObject和JSONArray) public String getJson(){ String jsonString = "{\" ...

  5. android判断是否json格式,Android判断json格式将错误信息提交给服务器

    开发中发现, 服务器偶尔会发送错误格式 json 给 Android 客户端, 导致 Android 客户端 json解析失败, 应用异常. 并非服务器有意坑客户端, 而是客户端请求服务器数据时, 除 ...

  6. android studio 混淆jar,android studio如何生成混淆代码的jar

    释放双眼,带上耳机,听听看~! 今天,简单讲讲android里如何在生成jar包时,同时对jar包的代码进行混淆,避免别人看到核心代码. 之前,我对领导说我打包生成的SDK,别人使用android s ...

  7. java编写自动化脚本生成apk_Unity3D研究院之Android全自动打包生成apk(六十九)

    Unity自动打包Android其实要比IOS容易得多,因为Android不用先生成java工程,然后在构建.apk包,我先说说Android打包的步骤. 1.把sdk拷贝至Plugins/Andro ...

  8. android studio如何生成混淆代码的jar

    今天,简单讲讲android里如何在生成jar包时,同时对jar包的代码进行混淆,避免别人看到核心代码. 之前,我对领导说我打包生成的SDK,别人使用android studio导入后可以看所有的源码 ...

  9. android studio设置生成的release版本apk的名称

    今天,简单讲讲如何使用android studio设置生成apk的名称. 一.首先讲讲如何使用android studio生成release版本的apk. 1.1.前提 发布release 版本,首先 ...

最新文章

  1. jetbrains intellij IDEA 常用插件和配置
  2. AWS — AWS CloudFormation
  3. jinja2的url_for 和数据块
  4. Codeforces Round #311 (Div. 2) A. Ilya and Diplomas 水题
  5. node服务的监控预警系统架构
  6. ant-design-vue 快速入手及常用标签
  7. 微软源代码遭 SolarWinds 黑客访问
  8. echarts 加载优化_【第1615期】React Native 图表性能优化实践
  9. 一键清除失效/删除微博转发微博收藏爬虫
  10. html5播放器 php,PHP/HTML5页面上的随机声音播放器
  11. 电商项目需求分析---七月实习总结
  12. 清除html页打印的页眉,删除html中的页眉和页脚以打印页面
  13. 开发外贸客户邮箱,怎么精准开发外贸客户邮箱?
  14. CAD图纸比例设置不同时CAD标注样式设置为相同的操作教程
  15. java Map的基本用法
  16. python:keyword --- 检验Python关键字
  17. 【MM32F5270开发板试用】播放TF卡WAV格式音乐,I2S驱动CS4344
  18. Microsoft .NET PetShop 4.0 架构与技术分析(七)
  19. 【构造】Colored Rooks
  20. UE4 Pixel Streaming像素推流云端部署方案

热门文章

  1. 软件库网站源码+附手机版
  2. 白银TD盈亏计算实例介绍
  3. prototype.js教程及prototype中文手册
  4. 使用 jQuery Mobile 与 HTML5 开发 Web App (十一) —— jQuery Mobile 事件详解
  5. Shell编程中的“局部变量”和“导出变量” (export 用法)
  6. ubuntu动态截图(GIF动画)
  7. Magento 自定义URL 地址重写
  8. Python爬取小说
  9. 最短路径——Floyd算法及优化(蓝桥杯试题集)
  10. vagrant 报unknown filesystem type 'vboxsf' 解决方案