include的用法例子,以及include+merge的用法例子

【include+LinearLayout】的使用例子

AndroidIncludeLayout.java

package com.AndroidIncludeLayout; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

public class AndroidIncludeLayout extends Activity { 
     
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
         
        View subLayout1 = (View)findViewById(R.id.main1); 
        View subLayout2 = (View)findViewById(R.id.main2); 
        Button myButton_main1 = (Button)subLayout1.findViewById(R.id.mybutton); 
        Button myButton_main2 = (Button)subLayout2.findViewById(R.id.mybutton); 
        Button startAnotherActivity = (Button)findViewById(R.id.startanotheractivity); 
         
        startAnotherActivity.setOnClickListener(new Button.OnClickListener(){ 

   @Override 
   public void onClick(View arg0) { 
    // TODO Auto-generated method stub 
    Intent intent = new Intent(); 
             intent.setClass(AndroidIncludeLayout.this, AnotherActivity.class); 
             startActivity(intent); 
     
   }}); 
         
        myButton_main1.setOnClickListener(new Button.OnClickListener(){ 

   @Override 
   public void onClick(View arg0) { 
    // TODO Auto-generated method stub 
    Toast.makeText(AndroidIncludeLayout.this, "Button 1 Pressed", Toast.LENGTH_LONG).show(); 
   }}); 
         
        myButton_main2.setOnClickListener(new Button.OnClickListener(){ 

   @Override 
   public void onClick(View arg0) { 
    // TODO Auto-generated method stub 
    Toast.makeText(AndroidIncludeLayout.this, "Button 2 Pressed", Toast.LENGTH_LONG).show(); 
   }}); 
    } 
} 

mail.xml 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" 
    /> 
<include android:id="@+id/main1" layout="@layout/sublayout" /> 
<include android:id="@+id/main2" layout="@layout/sublayout" /> 
<Button 
    android:id="@+id/startanotheractivity" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text=" Start Another Activity " 
    /> 
</LinearLayout> 

sublayout.xml 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#505050" 
    > 
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="SubLayout" 
    /> 
<Button 
android:id="@+id/mybutton" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text=" A Button " 
    /> 
</LinearLayout> 

【include+merge】   //与上面的include用法有点不一样

LightActivity.java

/**
 * Copyright(c) 2014-2015 ChinaYong Hotel Media Technology Co.,Ltd.
 * All Rights Reserved.
 * 
 * Filename : LightActivity.java
 * Author : Seldy lipeineng
 * Creation time : 上午10:58:53 - 2015-6-4
 * Description :
 */
package com.hysmarthotel.roomcontrol;

import com.hysmarthotel.util.LogUtil;
import com.hysmarthotel.view.Temperature;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
//灯光控制
public class LightActivity extends Activity {
    public static Temperature temp;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.light);
        temp = (Temperature)findViewById(R.id.temperature_light);  //特殊的地方是,可以直接一步调用merge中的id,不用通过include,再去调用
        log("layout1"+temp);
        init();
    }
    private void init() {
        temp.setTemperature(MainActivity.mTemp+"");
    }
    private void log(String msg) {
        LogUtil.info(this.getClass(), this + ":" + msg,"i");
    }
}

light.xml

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg1" >
    <TextView
        android:id="@+id/lightctrl"
        android:layout_x="91.5px"
        android:layout_y="93.0px"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:textSize="42.0px"
        android:textColor="#fff3e3d1"
        android:text="@string/light_ctrl"
        android:drawableLeft="@drawable/ic_light_t"
        android:drawablePadding="6px"/>
    
    <include android:id="@+id/include1" layout="@layout/time_temp"/>    
</AbsoluteLayout>

time_temp.xml

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:hyhotel="http://schemas.android.com/apk/res/com.hysmarthotel.roomcontrol" >

<com.hysmarthotel.view.Temperature
android:id="@+id/temperature_light"
android:layout_x="1545.0px"
android:layout_y="109.5px"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="22.5px"
android:textColor="#fff3e3d1"
hyhotel:prefix="@string/room_temp"
hyhotel:unit="@string/celsius" />
</merge>

Android 布局优化 include+merge+ViewStub标签详解

merge标签

merge用于消除视图层次结构中的冗余视图,例如根布局是Linearlayout,那么我们又include一个LinerLayout布局就没意义了,反而会减慢UI加载速度。

又或者根布局是FrameLayout且不需要设置background或padding等属性,可以用merge代替,因为Activity的ContentView父元素就是FrameLayout,所以可以用merge消除只剩一个

ViewStub标签

ViewStub 标签最大的优点是当你需要时才会加载,使用他并不会影响UI初始化时的性能。各种不常用的布局比如进度条、显示错误消息等可以使用<ViewStub />标签,以减少内存使用量,加快渲染速度。

由于ViewStub第一次inflate的时候,就已经将需要显示的布局替换掉自己了,所以第二次inflate的时候,getParent()是null,所以就会报异常。解决方法是inflate()的时候将view保存起来,然后下次判断这个View是否为NUll,如果是null就inflate().否则就直接使用这个view。

原文地址:https://www.cnblogs.com/lipeineng/p/5215988.html