我们在添加视图文件的时候有两种方式,一种是通过在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文件就不赘述。

[java] view plaincopyprint?
  1. package com.cn.query;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.Gravity;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.ImageView;
  9. import android.widget.LinearLayout;
  10. import android.widget.TextView;
  11. import android.widget.Toast;
  12. import com.androidquery.AQuery;
  13. public class AQueryTest2 extends Activity {
  14. AQuery aq = new AQuery(this);
  15. private Button button;
  16. protected void onCreate(Bundle savedInstanceState) {
  17. // TODO Auto-generated method stub
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.test1);
  20. aq.id(R.id.button1).visible().clicked(this, "click");
  21. }
  22. public void click() {
  23. // 动态生成布局视图--适用于简单布局
  24. Toast toast = new Toast(AQueryTest2.this);
  25. toast.setDuration(3000);
  26. // 设置重心--让toast居中显示
  27. toast.setGravity(Gravity.CENTER, 0, 0);
  28. LinearLayout ll = new LinearLayout(AQueryTest2.this);
  29. ImageView iv = new ImageView(AQueryTest2.this);
  30. iv.setImageResource(R.drawable.icon1);
  31. // 设置图片内边距,使textview显示在右侧,避免重叠
  32. iv.setPadding(0, 0, 15, 0);
  33. // 布局属于ViewGroup,可以调用添加视图方法
  34. ll.addView(iv);
  35. TextView textview = new TextView(AQueryTest2.this);
  36. textview.setText("我是创建消息的提示框");
  37. //
  38. ll.addView(textview);
  39. toast.setView(ll);
  40. toast.show();
  41. }
  42. public void click2() {
  43. // 动态生成布局视图--适用于复杂UI布局
  44. Toast toast = new Toast(AQueryTest2.this);
  45. toast.setDuration(3000);
  46. // 设置重心
  47. toast.setGravity(Gravity.CENTER, 0, 0);
  48. // 创建inflater
  49. LayoutInflater inflater = getLayoutInflater();
  50. // 通过inflate方法将layout转化为view
  51. View view = inflater.inflate(R.layout.toast, null);
  52. // 设置视图--Toast继承自Widget,不是容器,只能调用设置视图方法
  53. toast.setView(view);
  54. toast.show();
  55. }
  56. }

clcik()方法是动态生成的布局,就不多说了。注意ll.addView(iv)这里用的是addView,因为LinearLayout继承自ViewGroup,所以是个容器,容器添加视图则用addView().

click2()方法时将layout定义在xml文件,然后通过LayoutInflater类的实例化对象 inflater调用inflate方法将layout转化为view。注意toast.setView(),Toast是widget,不是容器,只能用setView()设置视图。

click2()方法中使用的布局文件:

toast.xml

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:gravity="center_vertical|center_horizontal"
  6. android:orientation="horizontal" >
  7. <ImageView
  8. android:id="@+id/imageview3"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:paddingBottom="0px"
  12. android:paddingLeft="0px"
  13. android:paddingRight="5px"
  14. android:paddingTop="0px"
  15. android:src="@drawable/icon1" />
  16. <TextView
  17. android:id="@+id/textview3"
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:text="消息提示" />
  21. </LinearLayout>

除此之外上面还用到的Android Aquery轻量级插件。需要导入相应的包就可。

效果截图:


Android--添加子视图(addView和setView)相关推荐

  1. 新浪微博开发-添加子视图控制器设置颜色

    一.添加子视图控制器 二.设置颜色 设置颜色:两种方法 一种较为繁琐,详见视频 第二种: //设置颜色 self.tabBar.tintColor = UIColor.orangeColor() 转载 ...

  2. 关于cell中添加子视图 复用重叠问题的解决方法

    关于cell中添加子视图 复用重叠问题的解决方法 参考文章: (1)关于cell中添加子视图 复用重叠问题的解决方法 (2)https://www.cnblogs.com/zhao-jie-li/p/ ...

  3. android 添加子view,Android基于Window.ID_ANDROID_CONTENT给定id添加子View

    Android基于Window.ID_ANDROID_CONTENT给定id添加子View 这一技术特点在一些视频播放器中比较有用. 例如代码: package zhangphil.demo; imp ...

  4. android 添加子view,如何在Android中向ImageView添加子视图

    正如pskink所说,你只能以编程方式将视图添加到 ViewGroup.您可以添加到LinearLayout,例如: LinearLayout layout = (LinearLayout)findV ...

  5. stotybord如何添加子视图_Revit软件技巧合集(建筑构件、视图处理、建筑表现、高级技巧)...

    Revit软件技巧合集164套(建筑构件.视图处理.建筑表现.高级技巧) BIM技术在我国建筑行业受到了越来越多的关注,也得到了快速地发展.BIM应用软件也如雨后春笋般的涌现,随着时间的推移,revi ...

  6. stotybord如何添加子视图_SQL复杂查询-子查询

    视图: 1.视图的概念引入: SQL数据库里面存放的是SQL语句,视图中查看到的SQL查询语句,当我们运用客户端连接到视图时候,视图会运行里面的查询语句,从库中查找出数据,保存在临时表里面.当客户端和 ...

  7. stotybord如何添加子视图_bim教程:Revit如何制作管道三维系统图

    在出图过程中,有时希望用系统图或者原理图的方式,展示整个建筑中各管道系统的设计原理,下面讲解如何创建三维系统图. 1.创建三维视图.可以在管理选项卡上找到"三维视图",点击&quo ...

  8. 视图添加字段_使用ExploreByTouchHelper辅助类为自定义视图添加虚拟视图

    在安卓开发过程中,为了视觉和功能的需要开发者经常会使用自定义视图 大多数的自定义视图是组合现有的控件来完成特定的功能 但是,有一种自定义视图是通过画笔在画布上画出自定义的子视图的,例如日期控件,颜色选 ...

  9. android relativelayout动态添加视图,android RelativeLayout 动态添加子View

    在很多时候xml里面的布局并不能满足我们的需求.这时候就需要用代码进行动态布局,前些天在对RelativeLayout 进行动态布局时遇到了些问题,现在解决了,分享下. 我现在在RelativeLay ...

最新文章

  1. R语言sink函数保存文件实战
  2. 实用技巧:Excel中的常见问题以及解决方法
  3. mysql代理中间件_MySQL-ProxySQL中间件(二)
  4. MyBatisPlus中使用 @TableField完成字段自动填充
  5. mysql tomcat idea操作_IntelliJ IDEA + Tomcat + RestFul + Mysql打造属于自己的服务器
  6. (转)git常用命令
  7. Ubuntu环境搭建零:安装Linux虚拟机
  8. 32.卷1(套接字联网API)---IPv4,IPv6,ICMPv4 和 ICMPv6
  9. MSSQL为单独数据库创建登录账户
  10. 低代码发展趋势解读|低代码成为企业数字化转型“加速器”
  11. 小程序picker用法
  12. cdh6.2离线安装(傻瓜式安装教程)
  13. 给定一个N*N的矩阵matrix,只有0和1两种值,返回边框全是1的最大正方形的边长长度。
  14. python3 enumerate函数_python3 内置函数enumerate
  15. 网络爬虫学习1 - 使用 requests.get(url) 抓取网页
  16. 贝叶斯学习、MAP、ML
  17. Free PPT Viewer(PPT阅读器)下载v2.0免费版
  18. 《红楼梦》-正文第三十九回名師誦読文稿
  19. jsp1521公交线路管理系统sqlserver
  20. 电气器件系列二十三:压差开关

热门文章

  1. 【Android 高性能音频】OboeTest 音频性能测试应用 ( 应用简介 | 测试内容 | 输出测试 | Oboe 缓冲区 与 工作负载修改 | 测试案例 )
  2. JAVA基础——Switch条件语句
  3. 使用urllib2简单爬取并保存内涵吧内涵段子指定分页的的描述信息
  4. 三层架构和MVC一样吗?(区别)
  5. git仓库相关知识01-安装和基本命令
  6. 关于清除浮动那些事儿~
  7. 二叉树的链式存储结构--二叉链表
  8. 高效使用Vector
  9. 将一个string左移N位置
  10. OpenGL中的着色模式GL_SMOOTH与GL_FLAT