Android--添加子视图(addView和setView)
我们在添加视图文件的时候有两种方式,一种是通过在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轻量级插件。需要导入相应的包就可。
效果截图:
Android--添加子视图(addView和setView)相关推荐
- 新浪微博开发-添加子视图控制器设置颜色
一.添加子视图控制器 二.设置颜色 设置颜色:两种方法 一种较为繁琐,详见视频 第二种: //设置颜色 self.tabBar.tintColor = UIColor.orangeColor() 转载 ...
- 关于cell中添加子视图 复用重叠问题的解决方法
关于cell中添加子视图 复用重叠问题的解决方法 参考文章: (1)关于cell中添加子视图 复用重叠问题的解决方法 (2)https://www.cnblogs.com/zhao-jie-li/p/ ...
- android 添加子view,Android基于Window.ID_ANDROID_CONTENT给定id添加子View
Android基于Window.ID_ANDROID_CONTENT给定id添加子View 这一技术特点在一些视频播放器中比较有用. 例如代码: package zhangphil.demo; imp ...
- android 添加子view,如何在Android中向ImageView添加子视图
正如pskink所说,你只能以编程方式将视图添加到 ViewGroup.您可以添加到LinearLayout,例如: LinearLayout layout = (LinearLayout)findV ...
- stotybord如何添加子视图_Revit软件技巧合集(建筑构件、视图处理、建筑表现、高级技巧)...
Revit软件技巧合集164套(建筑构件.视图处理.建筑表现.高级技巧) BIM技术在我国建筑行业受到了越来越多的关注,也得到了快速地发展.BIM应用软件也如雨后春笋般的涌现,随着时间的推移,revi ...
- stotybord如何添加子视图_SQL复杂查询-子查询
视图: 1.视图的概念引入: SQL数据库里面存放的是SQL语句,视图中查看到的SQL查询语句,当我们运用客户端连接到视图时候,视图会运行里面的查询语句,从库中查找出数据,保存在临时表里面.当客户端和 ...
- stotybord如何添加子视图_bim教程:Revit如何制作管道三维系统图
在出图过程中,有时希望用系统图或者原理图的方式,展示整个建筑中各管道系统的设计原理,下面讲解如何创建三维系统图. 1.创建三维视图.可以在管理选项卡上找到"三维视图",点击&quo ...
- 视图添加字段_使用ExploreByTouchHelper辅助类为自定义视图添加虚拟视图
在安卓开发过程中,为了视觉和功能的需要开发者经常会使用自定义视图 大多数的自定义视图是组合现有的控件来完成特定的功能 但是,有一种自定义视图是通过画笔在画布上画出自定义的子视图的,例如日期控件,颜色选 ...
- android relativelayout动态添加视图,android RelativeLayout 动态添加子View
在很多时候xml里面的布局并不能满足我们的需求.这时候就需要用代码进行动态布局,前些天在对RelativeLayout 进行动态布局时遇到了些问题,现在解决了,分享下. 我现在在RelativeLay ...
最新文章
- R语言sink函数保存文件实战
- 实用技巧:Excel中的常见问题以及解决方法
- mysql代理中间件_MySQL-ProxySQL中间件(二)
- MyBatisPlus中使用 @TableField完成字段自动填充
- mysql tomcat idea操作_IntelliJ IDEA + Tomcat + RestFul + Mysql打造属于自己的服务器
- (转)git常用命令
- Ubuntu环境搭建零:安装Linux虚拟机
- 32.卷1(套接字联网API)---IPv4,IPv6,ICMPv4 和 ICMPv6
- MSSQL为单独数据库创建登录账户
- 低代码发展趋势解读|低代码成为企业数字化转型“加速器”
- 小程序picker用法
- cdh6.2离线安装(傻瓜式安装教程)
- 给定一个N*N的矩阵matrix,只有0和1两种值,返回边框全是1的最大正方形的边长长度。
- python3 enumerate函数_python3 内置函数enumerate
- 网络爬虫学习1 - 使用 requests.get(url) 抓取网页
- 贝叶斯学习、MAP、ML
- Free PPT Viewer(PPT阅读器)下载v2.0免费版
- 《红楼梦》-正文第三十九回名師誦読文稿
- jsp1521公交线路管理系统sqlserver
- 电气器件系列二十三:压差开关
热门文章
- 【Android 高性能音频】OboeTest 音频性能测试应用 ( 应用简介 | 测试内容 | 输出测试 | Oboe 缓冲区 与 工作负载修改 | 测试案例 )
- JAVA基础——Switch条件语句
- 使用urllib2简单爬取并保存内涵吧内涵段子指定分页的的描述信息
- 三层架构和MVC一样吗?(区别)
- git仓库相关知识01-安装和基本命令
- 关于清除浮动那些事儿~
- 二叉树的链式存储结构--二叉链表
- 高效使用Vector
- 将一个string左移N位置
- OpenGL中的着色模式GL_SMOOTH与GL_FLAT