Android入门(38)——第十五章 Android布局优化

原创 2015年07月08日 23:13:06

1. Android常用布局样式比较:



布局原则:



2. 布局优化之include


案例一:使用include:

第一步:创建include的文件叫common_title.xml的布局文件,默认用的是RelativeLayout。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#000000"
    android:paddingTop="10dp"
    android:paddingBottom="10dp" >

    <TextView
        android:id="@+id/retur"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dp"
        android:text="返回"
        android:textColor="#ffffff"
        android:textSize="14sp" />

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="布局优化"
        android:textColor="#ffffff"
        android:textSize="14sp" />

    <TextView
        android:id="@+id/fun"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="10dp"
        android:text="功能"
        android:textColor="#ffffff"
        android:textSize="14sp" />

</RelativeLayout>

第二步:去清单文件AndroidManifest中设置隐藏系统标题栏。将application属性下的theme属性改为:

android:theme="@android:style/Theme.Light.NoTitleBar" >
第三步:在布局文件中添加include控件:

<?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:orientation="vertical" >
    
    <include 
        layout = "@layout/common_title"
        />
    
    <TextView 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="正文内容"
        android:textSize="18sp"
        />

</LinearLayout>
第四步:活动文件MainActivity:什么也没有改。

package com.example.include;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}
效果图:

需要提醒的一点是,include进来的东西,也都可以在MainActivity中使用。

3. 布局优化之merge:


第一步:创建include文件叫common_progress:

这个文件中体现了上图的两点:第一用merge包裹,当作该布局的顶节点,也就是最外层的节点,该布局是作为子布局被其他布局include的。

第二用merge可以让内部的控件实现FrameLayout的效果,也就是控件的叠加,效果图中可以看到。

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
	<ProgressBar 
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:layout_gravity="center"
	    />
	
	<TextView 
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:layout_gravity="center"
	    android:text="请稍后"
	    />
</merge>

第二步:设置布局文件main:

这里面的common_progress本身里面就是一个圈和请稍后的叠加,而这里又用FrameLayout来叠加了一个正文内容,所以效果图就变成下图那样了:

<?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:orientation="vertical" >
    
    <include 
        layout = "@layout/common_title"
        />
    <FrameLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        
        <TextView 
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:layout_gravity="center"
	        android:text="正文内容"
	        android:textSize="18sp" />
        <include 
            layout="@layout/common_progress"
            />
    </FrameLayout>
    

</LinearLayout>

效果图:



4. 布局优化之ViewStub:


没好好搞懂呀!

第一步:创建一个布局文件叫common_text:

<?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:orientation="vertical" >
    
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="隐藏内容"
        />

</LinearLayout>
第二步:在布局文件main中添加Button和ViewStub控件:

<?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:orientation="vertical" >
    
    <include 
        layout = "@layout/common_title"
        />
    <FrameLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        
        <TextView 
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:layout_gravity="center"
	        android:text="正文内容"
	        android:textSize="18sp" />
        <include 
            layout="@layout/common_progress"
            />
    </FrameLayout>
    
    <Button 
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="显示隐藏内容"/>
    
    <ViewStub 
        android:layout="@layout/common_text"
        android:id="@+id/stub"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />

</LinearLayout>
第三步:设置MainActivity文件:

package com.example.include;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewStub;
import android.widget.Button;

public class MainActivity extends Activity {

	private Button button;
	private ViewStub stub;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        button = (Button) findViewById(R.id.button);
        stub = (ViewStub) findViewById(R.id.stub);
        button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// 点击按钮时,stub加载布局。
				stub.inflate();
			}
		});
    }
}
效果图:

点击按钮前:


点击按钮后:













版权声明:本文为博主原创文章,未经博主允许不得转载。

Android最佳性能实践(四)——布局优化技巧

在前面几篇文章当中,我们学习了如何通过合理管理内存,以及高性能编码技巧的方式来提升应用程序的性能。然而实际上界面布局也会对应用程序的性能产生比较大的影响,如果布局写得糟糕的话,那么程序加载UI的速度就...
  • sinyu890807
  • sinyu890807
  • 2015年03月19日 09:21
  • 57643

Android性能优化系列之布局优化

在Android开发中,UI布局可以说是每个App使用频率很高的,随着UI越来越多,布局的重复性、复杂度也会随之增长,这样使得UI布局的优化,显得至关重要,UI布局不慎,就会引起过度绘制,从而造成UI...
  • u012124438
  • u012124438
  • 2017年01月15日 22:20
  • 7207

Android开发学习之路--性能优化之布局优化

Android性能优化方面也有很多文章了,这里就做一个总结,从原理到方法,工具等做一个简单的了解,从而可以慢慢地改变编码风格,从而提高性能。一、Android系统是如何处理UI组件的更新操作的  既然...
  • eastmoon502136
  • eastmoon502136
  • 2016年12月31日 21:27
  • 1326

Android性能优化之布局优化篇

怎样才能写出优秀的Android App,是每一个程序员追求的目标。那么怎么才能写出一个优秀的App呢?相信很多初学者也会有这种迷茫。一句话来回答这个问题:细节很重要。今天我们就从最基础的XML布局来...
  • feidu804677682
  • feidu804677682
  • 2015年06月29日 16:28
  • 3352

一些你需要知道的布局优化技巧

原文地址:http://blog.csdn.net/qq_17766199/article/details/52863741 今天分享一些layout布局书写中的一些技巧,希望看过之后你也一样可以写...
  • qq_30716173
  • qq_30716173
  • 2016年11月08日 13:56
  • 741

一些你需要知道的布局优化技巧

转载请注明出处:http://blog.csdn.net/qq_17766199/article/details/52863741 今天分享一些layout布局书写中的一些技巧,希望看过之后你也一样可...
  • qq_17766199
  • qq_17766199
  • 2016年10月19日 21:50
  • 6436

Android Studio下的应用性能优化总结--布局优化

前言:一个应用的成功=产品设计*性能 ,再此我们不讨论一个应用的设计,那交给我们可爱又可恨的产品经理和UI设计师来决定!所以这里分步骤讨论如何提升一个应用的性能,这里先探讨布局优化问题。 布局优化 避...
  • Y1258429182
  • Y1258429182
  • 2016年04月17日 23:05
  • 6940

android基础学习之六大Layout布局

android、五大布局+GridLayout布局
  • LHQJ1992
  • LHQJ1992
  • 2015年12月29日 20:45
  • 679

Android新手入门2016(7)--布局

布局,这个在服务端变成是没有的,也是服务端的人学习客户端的一道坎吧。 以前用cocos2d-x写小游戏的时候就是这个非常难懂,或者能用,但是理解不多的话,很难写出好的布局,难以适合商业化的应用。 游戏...
  • u012175089
  • u012175089
  • 2016年03月14日 12:15
  • 2499

[Android 性能优化系列]布局篇之动态加载布局

[Android 性能优化系列]布局篇之动态加载布局
  • kifile
  • kifile
  • 2014年11月23日 15:43
  • 1209
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android入门(38)——第十五章 Android布局优化
举报原因:
原因补充:

(最多只允许输入30个字)