`
butter
  • 浏览: 125742 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

android: 静态XML和动态加载XML混合使用,以及重写Layout控件

 
阅读更多

近期对android里面控件修改做了很多实验,由于公司需求很多,不得不重写很多控件。程序目标无非是:高效、轻巧、清晰、标准化

完成动态加载Layout有两种方法,依据个人喜好进行选择:

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

首先构建子Layout:main2

  1. <? xml   version = "1.0"   encoding = "utf-8" ?>   
  2. <!--布局可以任意定义,此处拿线性布局举例,里面有2个按钮元素-->   
  3. < LinearLayout    xmlns:android = "http://schemas.android.com/apk/res/android"   
  4.     android:id = "@+id/menubar"    
  5.     android:background = "@drawable/menubar"   
  6.     android:layout_width = "wrap_content"    
  7.     android:layout_height = "wrap_content" >   
  8.         <!--按钮1-->   
  9.     < ImageButton   android:id = "@+id/button1"   
  10.         android:src = "@drawable/btn1"   
  11.         android:layout_width = "wrap_content"   
  12.         android:layout_height = "wrap_content"   
  13.     > </ ImageButton >   
  14.     <!--按钮2-->   
  15.     < ImageButton   android:id = "@+id/button2"   
  16.         android:src = "@drawable/btn2"   
  17.         android:layout_width = "wrap_content"   
  18.         android:layout_height = "wrap_content"   
  19.     > </ ImageButton >   
  20. </ LinearLayout >    

 

然后构建主Layout:main

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

 

最后在程序中加载子layout:

  1. public   class  BackgroundTest  extends  Activity {  
  2.     /** Called when the activity is first created. */   
  3. //      子Layout要以view的形式加入到主Layout中   
  4.     private  View mBarView;  
  5. //      主Layout的容器加载子Layout的View   
  6.     private  LinearLayout mLinearLayout;  
  7. //给出关键内容   
  8. public   void  onCreate(Bundle savedInstanceState) {  
  9.         super .onCreate(savedInstanceState);  
  10. //      显示主Layout   
  11.         setContentView(R.layout.main);   
  12. //      加载子Layout          
  13.         mBarView = View.inflate(this , R.layout.main2,  null );  
  14. //      找到容器   
  15.         mLinearLayout = (LinearLayout)findViewById(R.id.box);  
  16. //      加上View 结束   
  17.         mLinearLayout.addView(mBarView);  
  18. }  

 

方法2:静态主Layout动态加载动态的Layout

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

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

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

 

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

  1. public   class  BackgroundTest  extends  Activity {  
  2.     /** Called when the activity is first created. */   
  3.     private  LinearLayout mLinearLayout;  
  4.     //声明一个子Layout View对象   
  5.     private  MenuLandscapeLinearLayout mMenuLandscapeLinearLayout;  
  6.     @Override   
  7.     public   void  onCreate(Bundle savedInstanceState) {  
  8.         super .onCreate(savedInstanceState);  
  9. //      加载主Layout   
  10.         setContentView(R.layout.main);    
  11. //      找到容器         
  12.         mLinearLayout = (LinearLayout)findViewById(R.id.box);  
  13. //      实例化一个子View   
  14.         mMenuLandscapeLinearLayout=new  MenuLandscapeLinearLayout( this );  
  15. //      添加到容器   
  16.         mLinearLayout.addView(mMenuLandscapeLinearLayout);  
  17.     }  
  18. }  

 

 

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

抛砖引玉,分享经验,希望能助大家优化自己的程序。

<!--EndFragment-->
分享到:
评论

相关推荐

    android 滑块和进度条控件

    ProgressBar是一种静态或动态显示进度的控件,分为水平、垂直和环形三种样式。在XML布局文件中,我们可以这样声明一个水平进度条: ```xml android:id="@+id/progressBar1" style="?android:attr/...

    android简单组合控件使用

    本篇主要探讨"android简单组合控件使用"这一主题,涵盖组合控件、自定义控件以及广播接收器的使用。 一、组合控件 组合控件是指将多个基础控件如TextView、Button、ImageView等通过布局文件(如XML)进行组合,形成...

    android中常见控件EditText,TextView,Button,menu简单用法实例

    本实例主要探讨了四个常见的Android控件:EditText、TextView、Button以及Menu的使用方法,非常适合Android初学者入门学习。 1. **EditText**: EditText控件是Android中的文本输入框,用户可以在其中输入文本。在...

    【eoe+Android特刊】第十九期:Android自定义控件.pdf

    下面是一些常用的Android控件以及它们的基本特性。 ##### 1.1 文本控件 (TextView 和 EditText) - **TextView 控件**:用于显示静态文本。它可以显示简单的文本信息,但不允许用户编辑。 - **继承关系**:`...

    android下GridView用法

    在Android开发中,GridView是一个非常常用的布局控件,它允许我们以网格的形式展示数据,通常用于创建类似照片墙、应用列表等界面。本教程将详细讲解Android中的GridView及其使用方法。 1. GridView简介: ...

    Android 学习(1)TextView

    在Android开发中,TextView是一个非常基础且重要的控件,它用于显示文本信息。在"Android学习(1)TextView"这个项目中,你初次接触并应用了这个关键元素。TextView不仅能够展示静态文本,还能处理动态数据,使得...

    Android控件大全使用方式

    ### Android控件大全使用方式详解 #### 一、Android控件概述 在Android开发中,控件(Widget)是用户界面的重要组成部分,用于构建应用程序的交互界面。Android提供了丰富的控件,包括基本的按钮、文本框、列表...

    创建主屏幕控件----App Widget

    这些小部件可以是简单的静态信息展示,也可以是具有交互性的迷你应用,为用户提供快速访问或操作的功能。在本教程中,我们将深入探讨如何创建一个基本的App Widget,即一个在主屏幕上显示TextView的控件。 首先,...

    08-ImageView和ImageButton

    在Android开发中,`ImageView`和`ImageButton`是两种常见的图像显示控件,它们都用于在用户界面上显示图片。这两个控件虽然相似,但在功能和使用上有一些区别。 ## `ImageView` `ImageView`主要用于静态地展示图片...

    Android中替换WebView加载网页失败时的页面

    然而,在实际使用中,可能会遇到加载网页失败的情况,如网络连接问题或者请求的URL无效。系统默认的错误页面通常只显示简单的错误信息,可能不符合应用的UI设计风格。因此,开发者常常需要自定义加载失败时的页面,...

    android GridViewDemo

    在Android开发中,GridView是一种非常常用的布局控件,它允许我们以网格的形式展示数据,通常用于创建如应用图标网格、照片墙等界面。本篇文章将详细介绍`android GridViewDemo`的使用方法,帮助开发者掌握如何在...

    完整的android 安卓入门demo

    3. Layout XML:用于描述用户界面的XML文件,定义控件的布局和样式。 4. Adapter:连接数据源与视图的桥梁,例如ListView和RecyclerView的数据加载。 5. Fragment:用于构建可重用的UI模块,可以在多个Activity间...

    动态生成控件获取值后,传对象到下一个页面

    在Android中,我们有时需要根据特定条件或用户操作来动态创建UI元素,而不是在XML布局文件中静态定义。可以使用`LayoutInflater`从XML布局资源中加载视图,然后通过`ViewGroup`的`addView()`方法将其添加到父容器中...

    Android日历控件

    本文将详细解析“Android日历控件”的使用,并结合给定的文件结构,阐述其核心概念和实现方法。 首先,Android系统提供了一个内置的日历应用,但如果你需要自定义或者在自己的应用中集成日历功能,就需要使用到特定...

    Android帧动画

    在Android开发中,帧动画(Frame Animation)是一种常见的动态效果实现方式,它通过连续播放一系列静态图片来模拟动画效果。这种技术尤其适用于那些不需要复杂的交互和高性能要求的简单动画场景,比如加载图标、按钮...

    Android常用控件

    本篇文章将深入探讨Android中常用的控件及其使用方法,同时也会提及如何通过源码理解和定制工具来优化你的Android应用。 一、Android基础控件 1. Button(按钮):用于触发一个操作或事件,可以通过XML属性设置...

    Android中FragmentActivity使用的基本步骤.pdf

    在Android开发中,FragmentActivity是用于管理Fragment的Activity子类,它为开发者提供...通过静态或动态加载Fragment,开发者可以灵活地设计用户界面,并利用Fragment的生命周期和事件处理能力来实现丰富的交互功能。

    Android资源控件

    本教程将深入探讨Android资源控件的使用和重要性,以及如何通过实践项目`AndroidBaseDemo`来学习它们。 1. **资源管理** Android系统提供了一个强大的资源管理系统,它允许开发者将图片、字符串、颜色、布局等静态...

    android特效按钮点击效果

    除了静态的背景切换,还可以通过编写Java代码实现动态效果。例如,使用动画库实现按钮点击时的缩放、旋转、平移等特效。`LikeAnimation-master`这个项目可能就包含了一些这样的示例,它可能提供了自定义的点击动画类...

    自定义控件与属性

    除了静态属性,还可以使用`setters`方法动态设置属性值,使得在运行时也能改变控件的外观。 最后,为了在布局文件中使用自定义控件,需要在`res/layout`目录下创建XML布局,并在`&lt;merge&gt;`或`&lt;LinearLayout&gt;`等元素...

Global site tag (gtag.js) - Google Analytics