博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态加载布局
阅读量:5910 次
发布时间:2019-06-19

本文共 4189 字,大约阅读时间需要 13 分钟。

  hot3.png

小结:

一、  其他Layout共用一个layout

1.子布局适合大小;

2.主布局:<include layout="@layout/title"/>

3.调用:当前view .findViewByid得到子布局文件中的任意View 

 

二、静态主布局动态添加静态子布局

1.子布局适合大小;

2.主Layout要给子Layout设置一个容器box

3.// 子Layout要以view的形式加入到主Layout中 

private View mBarView; 
// 主Layout的容器加载子Layout的View 
private LinearLayout mLinearLayout;

// 加载子Layout 

mBarView = View.inflate(this, R.layout.main2, null); 
// 找到容器 
mLinearLayout = (LinearLayout)findViewById(R.id.box); 
// 加上View 结束 
mLinearLayout.addView(mBarView); 
 

 三、静态主布局动态加载子Layout

1.子布局适合大小;

2.构造layout类

//加载需要的属性,加载静态子Layout 

((Activity) getContext()).getLayoutInflater().inflate(R.layout.main2, this); 
//在此你可以封装很多方法

3.// 找到容器 

mLinearLayout = (LinearLayout)findViewById(R.id.box); 
// 实例化一个子View 
mMenuLandscapeLinearLayout=new MenuLandscapeLinearLayout(this); 
// 添加到容器 
mLinearLayout.addView(mMenuLandscapeLinearLayout); 

 

 Android 在其他布局里共享同一布局文件

在任意LAYOUT文件里面将其他的LAYOUT文件拿过来使用,如下:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout

 android:id="@+id/FrameLayout01"

        android:background="@drawable/layout_background"

 android:layout_width="fill_parent"

 android:layout_height="wrap_content"

 xmlns:android="http://schemas.android.com/apk/res/android">

   <TextViewandroid:text="欢迎你使用本软件"

android:id="@+id/TextView01"

       android:textColor="#f0f0f0"

android:layout_width="wrap_content"

      android:layout_height="wrap_content"></TextView>
</LinearLayout>

子layout 文件起名为:title。然后我们在另外的布局文件如下使用:<include  layout="@layout/title"/> 即可将title 的布局直接拿到我们当前的布局文件中。

       使用include标记将layout 放入我们当前的layout文件,也可以直接使用当前view .findViewByid得到title 布局文件中的任意View 。 

小结:子布局适合大小;

主布局:<include layout="@layout/title"/>

调用:当前view .findViewByid得到子布局文件中的任意View

 

动态加载Layout有两种方法:

方法1:静态主Layout动态加载静态子Layout

首先构建子Layout:main2 (
子布局适合大小

<?xml version="1.0" encoding="utf-8"?> 
<!--布局可以任意定义,此处拿线性布局举例,里面有个按钮元素--> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/menubar" 
android:background="@drawable/menubar" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
<!--按钮--> 
<ImageButton android:id="@+id/button1" 
android:src="@drawable/btn1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
></ImageButton></LinearLayout>

 然后构建主Layout:main

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/background" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="@drawable/background"> 
<!--主Layout要给子Layout设置一个容器box,可以在此指定容器的位置,这段是关键部分--> 
<LinearLayout android:id="@+id/box" 
android:layout_alignParentBottom="true" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_centerHorizontal="true"> 
</LinearLayout> 
</RelativeLayout> 
 

最后在程序中加载子layout:

public class BackgroundTest extends Activity { 

// 子Layout要以view的形式加入到主Layout中 
private View mBarView; 
// 主Layout的容器加载子Layout的View 
private LinearLayout mLinearLayout; 
//给出关键内容 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
// 显示主Layout 
setContentView(R.layout.main); 
// 加载子Layout 
mBarView = View.inflate(this, R.layout.main2, null); 
// 找到容器 
mLinearLayout = (LinearLayout)findViewById(R.id.box); 
// 加上View 结束 
mLinearLayout.addView(mBarView); 
 

方法2:主Layout动态加载子Layout

首先构造你自己的子Layout和上面一样;

然后构建你自定义的Layout类:

public class MenuLandscapeLinearLayout extends LinearLayout{ 
// 构造函数 
public MenuLandscapeLinearLayout(Context context) { 
super(context); 
// TODO Auto-generated constructor stub 
//加载需要的属性,加载方法一的子Layout 
((Activity) getContext()).getLayoutInflater().inflate(R.layout.main2, this); 
//在此你可以封装很多方法 

最后在程序中动态实例化并加载即可:

public class BackgroundTest extends Activity { 
private LinearLayout mLinearLayout; 
//声明一个子Layout View对象 
private MenuLandscapeLinearLayout mMenuLandscapeLinearLayout; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
// 加载主Layout 
setContentView(R.layout.main); 
// 找到容器 
mLinearLayout = (LinearLayout)findViewById(R.id.box); 
// 实例化一个子View 
mMenuLandscapeLinearLayout=new MenuLandscapeLinearLayout(this); 
// 添加到容器 
mLinearLayout.addView(mMenuLandscapeLinearLayout); 
}

至此,完成了动态加载子Layout的两种形式,里面可思考的很多,比如封装常用事件、资源,从而节省代码、节省资源;

转载于:https://my.oschina.net/kians/blog/80838

你可能感兴趣的文章
BZOJ2216: [Poi2011]Lightning Conductor(DP 决策单调性)
查看>>
js 终止 forEach 循环
查看>>
js数组实现不重复插入数据
查看>>
HDU 4089 Activation
查看>>
Linux 上安装 Subversion
查看>>
PHP5.4第二天——数组、多维数组和数组函数
查看>>
MySQL数据库中delimiter的作用概述
查看>>
unigui验证微信服务器的有效性
查看>>
python PIL except: IOError: decoder jpeg not available
查看>>
Pyp 替代sed,awk的文本处理工具
查看>>
看电影读小说,你就能懂经济学
查看>>
android 开发环境安装和测试中常出现的问题
查看>>
转---9 个开始使用 C++11 的理由
查看>>
Android与服务“.NET研究”器端数据交互
查看>>
继续谈谈Twisted
查看>>
IPC 有命管道
查看>>
groovy string类型转换成int(来自csdn)不要问为什么系列6
查看>>
Objective-C equivalent of Java Vector/ ArrayList
查看>>
事件的好处~实现对修改的封闭,对扩展的开放!~续
查看>>
详解 ML2 Core Plugin(I) - 每天5分钟玩转 OpenStack(71)
查看>>