- 浏览: 32492 次
- 性别:
- 来自: 深圳
最新评论
我们在添加视图文件的时候有两种方式,一种是通过在xml文件定义layout,另一种方式是在java代码中动态生成布局文件。
在xml中定义的layout要想转化为view,需要使用到LayoutInflater类。
1.构造xml文件
2.LayoutInflater
提到addview,首先要了解一下LayoutInflater类。这个类最主要的功能就是实现将xml表述的layout转化为View的功能。为了便于理解,我们可以将它与findViewById()作一比较,二者都是实例化某一对象,不同的是findViewById()是找xml布局文件下的具体widget控件实例化,而LayoutInflater找res/layout/下的xml布局文件来实例化的。
(1)创建
LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);或
LayoutInflater inflater = LayoutInflater.from(Activity.this);或
LayoutInflater inflater = getLayoutInflater();
这三种方法本质是相同的。
(2)inflate()
用LayoutInflater.inflate() 将LayOut文件转化成VIew。
View view = inflater.inflate(R.layout.login, null);
3.添加视图文件
举个例子,假如定义了一个toast,则可以设置视图文件
toast.setView(view);
====
现在给出一个常用的土司烤面包的例子--让带图片和文本的面包居中显示,看代码:
其中主文件只放置了一个button,xml文件就不赘述。
package com.cn.query;
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.androidquery.AQuery;
public class AQueryTest2 extends Activity {
AQuery aq = new AQuery(this);
private Button button;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.test1);
aq.id(R.id.button1).visible().clicked(this, "click");
}
public void click() {
// 动态生成布局视图--适用于简单布局
Toast toast = new Toast(AQueryTest2.this);
toast.setDuration(3000);
// 设置重心--让toast居中显示
toast.setGravity(Gravity.CENTER, 0, 0);
LinearLayout ll = new LinearLayout(AQueryTest2.this);
ImageView iv = new ImageView(AQueryTest2.this);
iv.setImageResource(R.drawable.icon1);
// 设置图片内边距,使textview显示在右侧,避免重叠
iv.setPadding(0, 0, 15, 0);
// 布局属于ViewGroup,可以调用添加视图方法
ll.addView(iv);
TextView textview = new TextView(AQueryTest2.this);
textview.setText("我是创建消息的提示框");
//
ll.addView(textview);
toast.setView(ll);
toast.show();
}
public void click2() {
// 动态生成布局视图--适用于复杂UI布局
Toast toast = new Toast(AQueryTest2.this);
toast.setDuration(3000);
// 设置重心
toast.setGravity(Gravity.CENTER, 0, 0);
// 创建inflater
LayoutInflater inflater = getLayoutInflater();
// 通过inflate方法将layout转化为view
View view = inflater.inflate(R.layout.toast, null);
// 设置视图--Toast继承自Widget,不是容器,只能调用设置视图方法
toast.setView(view);
toast.show();
}
}
clcik()方法是动态生成的布局,就不多说了。注意ll.addView(iv)这里用的是addView,因为LinearLayout继承自ViewGroup,所以是个容器,容器添加视图则用addView().
click2()方法时将layout定义在xml文件,然后通过LayoutInflater类的实例化对象 inflater调用inflate方法将layout转化为view。注意toast.setView(),Toast是widget,不是容器,只能用setView()设置视图。
click2()方法中使用的布局文件:
toast.xml
<?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="match_parent"
android:gravity="center_vertical|center_horizontal"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imageview3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="0px"
android:paddingLeft="0px"
android:paddingRight="5px"
android:paddingTop="0px"
android:src="@drawable/icon1" />
<TextView
android:id="@+id/textview3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="消息提示" />
</LinearLayout>
除此之外上面还用到的Android Aquery轻量级插件。需要导入相应的包就可。
在xml中定义的layout要想转化为view,需要使用到LayoutInflater类。
1.构造xml文件
2.LayoutInflater
提到addview,首先要了解一下LayoutInflater类。这个类最主要的功能就是实现将xml表述的layout转化为View的功能。为了便于理解,我们可以将它与findViewById()作一比较,二者都是实例化某一对象,不同的是findViewById()是找xml布局文件下的具体widget控件实例化,而LayoutInflater找res/layout/下的xml布局文件来实例化的。
(1)创建
LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);或
LayoutInflater inflater = LayoutInflater.from(Activity.this);或
LayoutInflater inflater = getLayoutInflater();
这三种方法本质是相同的。
(2)inflate()
用LayoutInflater.inflate() 将LayOut文件转化成VIew。
View view = inflater.inflate(R.layout.login, null);
3.添加视图文件
举个例子,假如定义了一个toast,则可以设置视图文件
toast.setView(view);
====
现在给出一个常用的土司烤面包的例子--让带图片和文本的面包居中显示,看代码:
其中主文件只放置了一个button,xml文件就不赘述。
package com.cn.query;
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.androidquery.AQuery;
public class AQueryTest2 extends Activity {
AQuery aq = new AQuery(this);
private Button button;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.test1);
aq.id(R.id.button1).visible().clicked(this, "click");
}
public void click() {
// 动态生成布局视图--适用于简单布局
Toast toast = new Toast(AQueryTest2.this);
toast.setDuration(3000);
// 设置重心--让toast居中显示
toast.setGravity(Gravity.CENTER, 0, 0);
LinearLayout ll = new LinearLayout(AQueryTest2.this);
ImageView iv = new ImageView(AQueryTest2.this);
iv.setImageResource(R.drawable.icon1);
// 设置图片内边距,使textview显示在右侧,避免重叠
iv.setPadding(0, 0, 15, 0);
// 布局属于ViewGroup,可以调用添加视图方法
ll.addView(iv);
TextView textview = new TextView(AQueryTest2.this);
textview.setText("我是创建消息的提示框");
//
ll.addView(textview);
toast.setView(ll);
toast.show();
}
public void click2() {
// 动态生成布局视图--适用于复杂UI布局
Toast toast = new Toast(AQueryTest2.this);
toast.setDuration(3000);
// 设置重心
toast.setGravity(Gravity.CENTER, 0, 0);
// 创建inflater
LayoutInflater inflater = getLayoutInflater();
// 通过inflate方法将layout转化为view
View view = inflater.inflate(R.layout.toast, null);
// 设置视图--Toast继承自Widget,不是容器,只能调用设置视图方法
toast.setView(view);
toast.show();
}
}
clcik()方法是动态生成的布局,就不多说了。注意ll.addView(iv)这里用的是addView,因为LinearLayout继承自ViewGroup,所以是个容器,容器添加视图则用addView().
click2()方法时将layout定义在xml文件,然后通过LayoutInflater类的实例化对象 inflater调用inflate方法将layout转化为view。注意toast.setView(),Toast是widget,不是容器,只能用setView()设置视图。
click2()方法中使用的布局文件:
toast.xml
<?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="match_parent"
android:gravity="center_vertical|center_horizontal"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imageview3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="0px"
android:paddingLeft="0px"
android:paddingRight="5px"
android:paddingTop="0px"
android:src="@drawable/icon1" />
<TextView
android:id="@+id/textview3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="消息提示" />
</LinearLayout>
除此之外上面还用到的Android Aquery轻量级插件。需要导入相应的包就可。
发表评论
-
for,foreach,iterator的用法和区别
2015-01-05 23:06 1024相同点: 三个都可以用来遍历数组和集合 不同点:1.形式差 ... -
Android网络开发之实时获取最新数据
2014-12-14 16:13 833在实际开发中更多的是需要我们实时获取最新数据,比如道路流量、实 ... -
底部菜单栏之Fragment的详细介绍和使用方法
2014-11-21 00:18 872底部菜单栏之Fragment的详细介绍和使用方法 : http ... -
Android 启动Launcher的说明
2014-10-24 01:26 768LauncherApplication->onCreat ... -
android动态布局方法总结
2014-09-19 00:21 697//绝对布局 AbsoluteLayout abslayout ... -
android回调函数总结
2014-08-28 00:12 781android回调函数总结 回调函数就是那些自己写的,但是不 ... -
修改设置Android Preference相关样式
2014-08-14 00:51 4528使用google默认的PreferenceActiivty实现 ... -
Android PrefeneceActivity知识小结
2014-08-14 00:49 7161.PrefeneceActivity都提供了哪几种元素可供使 ... -
安卓cpu超频降频
2014-08-05 00:49 9131.Android获取系统cpu信息,内存,版本,电量等信息 ... -
ndroid进程间通信:使用AIDL
2014-07-24 00:17 637要进程间通信、需要AIDL(以及Binder),那么可以默认你 ... -
Android 系统及framework 概述
2014-06-27 22:41 711初次接触android的朋友,首先需要对android系 ... -
ubuntu下创建eclipse快捷方式
2014-05-15 23:21 905ubuntu下创建eclipse快捷方式 1、 sudo ... -
android之 IntentFilter 应用
2014-05-03 00:03 647当Intent在组件间传递时 ... -
Android开发的广播机制讲解
2014-05-03 00:01 830概述 在Android中,有一些操作完成以后,会发送广播,比 ...
相关推荐
Android使用addView动态添加组件,自定义添加列表项,添加LinearLayout
实验2-Android-应用的界面开发(1)全文共7页,当前为第2页。 实验2-Android-应用的界面开发(1)全文共7页,当前为第3页。 实验2-Android-应用的界面开发(1)全文共7页,当前为第4页。 实验2-Android-应用的界面开发(1)...
主要为大家详细介绍了Android使用addView动态添加组件的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
控制盘会移动到手指第一次点击的地方可以在背景上添加“箭头”,即添加效果图片自定义的“触摸球”图片和背景图片手指移出了控制盘范围,仍然能够保持追随能获取到移动位置的百分比参数实现思路用自定义View的方式...
不能使用myImage.layout()方法,来改变位置。...而调用addView往布局添加新的控件时,是根据layoutparam来重新布局控件位置的。 这里需要用另一种方法:先获取控件的layoutparam,改变其中相关的值后,再设置回去。
一、绘制流程源码路径 1、Activity加载ViewRootImpl ActivityThread....ViewRootImpl.setView(decorView, layoutParams, parentView) -->ViewRootImpl.requestLayout() -->scheduleTraversa
一个 Android 版京东手机客户端(当前版本V1..0.0 )风格的级联地址选择器。 添加依赖 在build.gradle 中: dependencies { ... compile 'com.smartTop:jd-address:1.0.3' } 使用方法 AddressSelector selector =...
重要的一点是这种设计的优点是可以不用服务器去返回高度和长度,视图会在图片下载完成后计算出整个ItemView的高度,然后添加到主视图中,比较灵活。 缺点不少,采用这种方式无法实现类似下拉刷新的功能,就是View...
看完动图我们来分析一下,如何在每个页面上都存在一个View呢,有些人可能会说,写在base里面,这样每次启动一个新的Activity都要往页面上addView一次,性能不好,再说了,我们作为一个优秀的程序员能干这种重复的事...
通过addview 实现三层listview动态嵌套
一种完全无侵入的换肤方式,支持插件式和应用内,无需重启Activity. 与之前发布的ChangeSkin思路完全不同https://github.com/hongyangAndroid/ChangeSkin,主要因为ChangeSkin依赖V4,V7的版本,以及干涉系统构造...
((CMainFrame*)AfxGetMainWnd())->m_ViewManager.AddView(cs,this); } void CTabMDIDemoView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) { // TODO: Add your specialized ...
实现上很简单,就是添加一个系统级别的窗口,Android中通过WindowManagerService( WMS)来管理所有的窗口,对于WMS来说,管你是Activity、Toast、Dialog,都不过是通过WindowManagerGlobal.addView()添加的一个个...
Android动态添加右边对齐按钮Demo,主要代码:LinearLayout linearLayout=new LinearLayout(this); linearLayout.setGravity(Gravity.RIGHT); Button button=new Button(this); button.setText("按钮一"); ...
layout.addView(button) 缩减为: SButton ( " Greet " , toast( " Hello! " )) 好处 编写优雅的Android软件Scaloid 提供了一种简洁且类型安全的 Android 应用程序编写方式。 使用简单检查我们的 与您的旧代码兼容您...
原需求,在一个伸缩列表中,自定义LinearLayout继承LinearLayout动态添加布局。 然而实现的时候:一共遍历了30条数据,却只显示了一条 断点查看代码:遍历addView()这个过程是正常的30次循环。那是布局的问题? ...
Android自定义view,实现动画效果
Android 即时添加textview、imageview内容项,适时动态添加这两个组件,实现时首先创建了所有资源图片(andy、bill、edgar、torvalds、turing)id的数组和所有资源字符串(andy、bill、edgar、torvalds、turing)id...
前几年的Android应用源码Demo,主要面向的是学生毕业设计学习。