设为首页 加入收藏

TOP

Android开发技巧:动态创建UI界面
2014-11-24 03:08:19 来源: 作者: 【 】 浏览:1
Tags:Android 开发 技巧 动态 创建 界面

假设Android工程的一个xml文件名为activity_main.xml,定义如下:


xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
android:id="@+id/DynamicText"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />


在 MainActivity 中,希望显示这个简单的界面有三种方式(注:下面的代码均在 MainActivity 的 onCreate() 函数中实现 )。


(1) 第一种方式,直接通过传统的 setContentView(R.layout.*) 来加载,即:


setContentView(R.layout.activity_main);

TextView text = (TextView)this.findViewById(R.id.DynamicText);
text.setText("Hello World");


(2) 第二种方式,通过 LayoutInflater 来间接加载,即:


LayoutInflater mInflater = LayoutInflater.from(this);
View contentView = mInflater.inflate(R.layout.activity_main,null);

TextView text = (TextView)contentView.findViewById(R.id.DynamicText);
text.setText("Hello World");

setContentView(contentView);


注:


LayoutInflater 相当于一个“布局加载器”,有三种方式可以从系统中获取到该布局加载器对象,如:


方法一: LayoutInflater.from(this);


方法二: (LayoutInflater)this.getSystemService(this.LAYOUT_INFLATER_SERVICE);


方法三: this.getLayoutInflater();


通过该对象的 inflate方法,可以将指定的xml文件加载转换为View类对象,该xml文件中的控件的对象,都可以通过该View对象的findViewById方法获取。


(3)第三种方式,纯粹地手工创建 UI 界面


xml 文件中的任何标签,都是有相应的类来定义的,因此,我们完全可以不使用xml 文件,纯粹地动态创建所需的UI界面,示例如下:


LinearLayout layout = new LinearLayout(this);

TextView text = new TextView(this);
text.setText("Hello World");
text.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

layout.addView(text);

setContentView(layout);


Android动态UI创建的技巧就说到这儿了,在本示例中,为了方便理解,都是采用的最简单的例子,因此可能看不出动态创建UI的优点和用途,但是不要紧,先掌握基本技巧,后面的文章中,会慢慢将这些技术应用起来,到时侯就能理解其真正的应用场景了。


相关阅读:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Hadoop实现共同出现的单词(Word c.. 下一篇iOS动画技术笔记

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++ 语言社区-CSDN社 (2025-12-24 17:48:24)
·CSDN问答专区社区-CS (2025-12-24 17:48:22)
·C++中`a = b = c`与` (2025-12-24 17:48:19)
·C语言结构体怎么直接 (2025-12-24 17:19:44)
·为什么指针作为c语言 (2025-12-24 17:19:41)