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

简介:

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

 

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

 

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

 

首先构建子Layout:main2

[xhtml]  view plain copy
  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

 

[xhtml]  view plain copy
  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:

[java]  view plain copy
  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类:

[java]  view plain copy
  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. }  

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

[java]  view plain copy
  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的两种形式,里面可思考的很多,比如封装常用事件、资源,从而节省代码、节省资源;

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

相关文章
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
410 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
XML 搜索推荐 Android开发
Android改变进度条控件progressbar的样式(根据源码修改)
本文介绍了如何基于Android源码自定义ProgressBar样式。首先分析了系统源码中ProgressBar样式的定义,发现其依赖一张旋转图片实现动画效果。接着分两步指导开发者实现自定义:1) 模仿源码创建一个旋转动画XML文件(放置在drawable文件夹),修改图片为自定义样式;2) 在UI控件中通过`indeterminateDrawable`属性应用该动画。最终实现简单且个性化的ProgressBar效果,附带效果图展示。
719 2
|
Android开发
Android控件样式的抽取(小提及快捷方式)
在Android开发中,若多个控件样式重复,可抽取公共部分以简化代码。例如对EditText提取样式,通过编辑`styles.xml`实现复用。为提高效率,Android Studio提供自动提取Style功能:右键点击控件样式选项,选择“Style...”,勾选需要提取的属性后确认,即可快速生成样式代码,显著提升开发便利性。
381 2
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
627 15
|
XML 编解码 Android开发
安卓开发中的自定义视图控件
【9月更文挑战第14天】在安卓开发中,自定义视图控件是一种高级技巧,它可以让开发者根据项目需求创建出独特的用户界面元素。本文将通过一个简单示例,引导你了解如何在安卓项目中实现自定义视图控件,包括创建自定义控件类、处理绘制逻辑以及响应用户交互。无论你是初学者还是有经验的开发者,这篇文章都会为你提供有价值的见解和技巧。
281 3
|
XML Android开发 UED
"掌握安卓开发新境界:深度解析AndroidManifest.xml中的Intent-filter配置,让你的App轻松响应scheme_url,开启无限交互可能!"
【8月更文挑战第2天】在安卓开发中,scheme_url 通过在`AndroidManifest.xml`中配置`Intent-filter`,使应用能响应特定URL启动或执行操作。基本配置下,应用可通过定义特定URL模式的`Intent-filter`响应相应链接。
575 12
|
存储 Java 数据库
基于全志H713 Android 11:给TvSettings添加default.xml默认值
本文介绍了在全志H713 Android 11平台上为TvSettings应用添加HDMI CEC功能的默认设置值的方法,通过修改SettingsProvider的源码和配置文件来实现默认值的设置,并提供了详细的步骤和测试结果。
930 0
基于全志H713 Android 11:给TvSettings添加default.xml默认值
|
Shell Android开发
安卓scheme_url调端:在AndroidManifest.xml 中如何配置 Intent-filter?
为了使Android应用响应vivo和oppo浏览器的Deep Link或自定义scheme调用,需在`AndroidManifest.xml`中配置`intent-filter`。定义启动的Activity及其支持的scheme和host,并确保Activity可由外部应用启动。示例展示了如何配置HTTP/HTTPS及自定义scheme,以及如何通过浏览器和adb命令进行测试,确保配置正确无误。
|
XML 存储 Java
浅谈Android的TextView控件
浅谈Android的TextView控件
242 0
|
前端开发 Android开发 开发者
安卓开发中的自定义视图:构建你的第一个控件
【8月更文挑战第26天】在安卓开发的浩瀚海洋中,自定义视图是一块充满魔力的乐土。它不仅是开发者展示创造力的舞台,更是实现独特用户体验的关键。本文将带你步入自定义视图的世界,从基础概念到实战应用,一步步教你如何打造自己的第一个控件。无论你是初学者还是有经验的开发者,这篇文章都将为你的开发之旅增添新的风景。