Android性能优化---布局优化

时间:2023-03-09 03:11:10
Android性能优化---布局优化

我们从事Android开发编写布局的时候大多数是使用XML来布局,这给我们带来了方便性,这样操作可以布局界面的代码和逻辑控制的Java代码分离出来,使程序的结构更加清晰、明了。特别的复杂的布局,但是这样操作也同样带来了另一些问题,例如屏幕的适应性,大多数Android开发人员都会遇到这个问题,还有一个就是内容问题,如果使用xml布局,Android的虚拟机首先解析xml布局,然后加载内存,如果布局越复杂,那加载的时间越慢,而用java代码布局,可以解决这些问题,不过比xml布局麻烦一点,而且必须运行才能看见结果。下面讲解一个开发过程中的一个例子:

下面是使用xml布局的代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/info_back"> <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/linearRecordLayout">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"> <!-- <LinearLayout
android:id="@+id/LinearLayout_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
> -->
<LinearLayout
android:id="@+id/contronLinearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_alignParentTop="true"
android:layout_marginLeft="20dp">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:id="@+id/temp_textview"
android:text="T:"
android:textSize="18sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
/>
<ToggleButton
android:id="@+id/temp_max"
android:layout_width="15dp"
android:layout_height="15dp"
android:textOn=" "
android:textOff=" "
android:layout_toRightOf="@+id/temp_textview"
android:layout_alignParentTop="true"
android:layout_marginTop="5dp"
android:background="@drawable/max"
android:visibility="invisible"
/>
</RelativeLayout>
<TextView
android:id="@+id/humidity_textiew"
android:text="H:"
android:textSize="18sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:layout_marginTop="5dp"/>
</LinearLayout>
<LinearLayout
android:id="@+id/BtnControl"
android:layout_width="150dp"
android:layout_height="150dp"
android:orientation="vertical"
android:layout_marginTop="20dp"
android:layout_alignParentBottom="true"
android:layout_marginBottom="35dp"
android:gravity="center_vertical|center_horizontal"
android:background="@drawable/no_control">
<Button
android:id="@+id/up"
android:layout_width="50dp"
android:layout_height="60dp"
android:background="@drawable/kong"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/left"
android:layout_width="80dp"
android:layout_height="50dp"
android:background="@drawable/kong"/>
<Button
android:id="@+id/right"
android:layout_width="80dp"
android:layout_height="50dp"
android:layout_marginLeft="10dp"
android:background="@drawable/kong"
/>
</LinearLayout>
<Button
android:id="@+id/down"
android:layout_width="50dp"
android:layout_height="60dp"
android:background="@drawable/kong"
/>
</LinearLayout> <!-- </LinearLayout> -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_alignParentBottom="true"
android:layout_marginBottom="5dp"
android:layout_alignParentLeft="true"
android:layout_marginLeft="0dp">
<Button
android:id="@+id/about_button"
android:layout_width="27dp"
android:layout_height="27dp"
android:background="@drawable/info_off"
android:layout_marginRight="10dp"
/>
<Button
android:id="@+id/webserver"
android:layout_width="27dp"
android:layout_height="27dp"
android:layout_marginRight="10dp"
android:background="@drawable/net_in_off"
/>
<Button
android:id="@+id/apConvertButton"
android:layout_width="27dp"
android:layout_height="27dp"
android:background="@drawable/wifi_switch_off"
/>
</LinearLayout> </RelativeLayout>
<RelativeLayout
android:id="@+id/camerSurfaceRelativelayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="wrap_content"
android:id="@+id/controlAbsoluteLayout"
android:layout_height="fill_parent"
android:gravity="center_vertical|center_horizontal"> <com.pcareroute.surface.CameraSurfaceView
android:id="@+id/car_camera_surfaceview"
android:layout_width="wrap_content"
android:layout_height="fill_parent" />
</LinearLayout>
<RelativeLayout
android:id="@+id/scale_control_linearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:padding="5dip" > <Button
android:id="@+id/zoom_in_button"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginLeft="3dp"
android:layout_marginTop="3dp"
android:background="@drawable/button_zoom_out_icon" >
</Button>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="60dp"
android:layout_marginTop="3dp"
>
<ToggleButton
android:textOn=" "
android:textOff=" "
android:id="@+id/record_red"
android:layout_width="18dp"
android:layout_height="18dp"
android:background="@drawable/video_off_led"
android:visibility="invisible"/>
<Chronometer
android:id="@+id/chronometer1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="7dp"
android:text="Chronometer"
android:visibility="invisible"
/>
</LinearLayout>
<Button
android:layout_alignParentRight="true"
android:id="@+id/zoom_out_button"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginRight="2dp"
android:layout_marginTop="3dp"
android:background="@drawable/button_zoom_in_icon"></Button> </RelativeLayout>
<LinearLayout
android:id="@+id/RelativeLayoutzoom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical|center_horizontal"
android:layout_centerHorizontal="true"
android:layout_above="@+id/bottomEmpty"
>
<TextView
android:id="@+id/scale_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:shadowColor="#ff000000"
android:shadowDx="2"
android:shadowDy="0"
android:shadowRadius="2"
android:text="100%"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:id="@+id/bottomEmpty"
android:layout_width="fill_parent"
android:layout_height="18dp"
android:layout_alignParentBottom="true">
</LinearLayout>
</RelativeLayout> </LinearLayout> <!-- <RelativeLayout
android:id="@+id/scale_control_linearLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:padding="5dip" > <Button
android:id="@+id/zoom_in_button"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginLeft="25dp"
android:background="@drawable/button_zoom_out_icon" >
</Button>
<Button
android:layout_alignParentRight="true"
android:id="@+id/zoom_out_button"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginRight="25dp"
android:background="@drawable/button_zoom_in_icon" >
</Button>
<LinearLayout
android:id="@+id/linearlayout_temp_rh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_above="@+id/linearRecordLayout"
android:layout_centerVertical="true"
> <TextView
android:id="@+id/temp_textview"
android:text="T"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:shadowColor="#ff000000"
android:shadowDx="2"
android:shadowDy="0"
android:shadowRadius="2"
/> <TextView
android:id="@+id/humidity_textiew"
android:text="H"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:layout_marginLeft="100dp"
android:shadowColor="#ff000000"
android:shadowDx="2"
android:shadowDy="0"
android:shadowRadius="2"
/>
</LinearLayout> <LinearLayout
android:id="@+id/RelativeLayoutpower"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/linearbuttonLayout"
android:layout_centerHorizontal="true"
android:gravity="center_vertical|center_horizontal"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/RelativeLayoutzoom"
>
</LinearLayout> </RelativeLayout> -->
<!-- <LinearLayout
android:orientation="vertical"
android:id="@+id/linearControlLayout"
android:visibility="visible"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:layout_width="50dip"
android:layout_height="fill_parent"
android:gravity="center_vertical|center_horizontal"
> <com.wificar.surface.DoubleAxisRightControllerSurfaceView
android:layout_gravity="center_vertical"
android:clickable="false"
android:layout_height="180dp"
android:id="@+id/stick_double_axis_right_controller_surfaceview"
android:layout_width="wrap_content"></com.wificar.surface.DoubleAxisRightControllerSurfaceView> </LinearLayout>
<LinearLayout android:id="@+id/function_linearLayout"
android:orientation="vertical"
android:layout_width="50dip"
android:layout_alignParentLeft="true"
android:layout_marginLeft="10dp"
android:layout_height="fill_parent"
android:gravity="center_vertical|center_horizontal"> <com.wificar.surface.DoubleAxisLeftControllerSurfaceView
android:layout_gravity="center_vertical"
android:clickable="true"
android:layout_height="180dp"
android:id="@+id/stick_double_axis_left_controller_surfaceview"
android:layout_width="wrap_content"></com.wificar.surface.DoubleAxisLeftControllerSurfaceView> </LinearLayout> --> <!-- <RelativeLayout
android:id="@+id/relativelayout_temp_rh"
android:layout_width="fill_parent"
android:layout_height="80dp"
android:layout_alignParentBottom="true"
> -->
<LinearLayout
android:background="@drawable/button_bar"
android:gravity="center_vertical|center_horizontal"
android:layout_width="fill_parent"
android:layout_height="45dp"
android:id="@+id/linearRecordLayout"
android:layout_alignParentBottom="true">
<ToggleButton
android:id="@+id/send_voice_button"
android:layout_width="40dp"
android:layout_height="40dp"
android:textOn=""
android:textOff=""
android:background="@drawable/talk_off"
android:layout_marginRight="23dip" />
<Button
android:id="@+id/spk_toggle_button"
android:layout_width="40dp"
android:layout_height="40dp"
android:textOn=" "
android:textOff=" "
android:background="@drawable/music_off"
android:layout_marginRight="23dp"
/>
<ToggleButton
android:textOn=" "
android:textOff=" "
android:layout_marginRight="23dp"
android:layout_width="40dp"
android:layout_height="40dp"
android:background="@drawable/video_off"
android:id="@+id/camera_shoot_button"
/>
<ToggleButton
android:background="@drawable/sound_mute"
android:id="@+id/listen_toggle_button"
android:layout_width="40dp"
android:textOn=" "
android:textOff=" "
android:layout_height="40dp"
android:layout_marginRight="23dp" ></ToggleButton>
<Button
android:id="@+id/take_picture_button"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginRight="23dp"
android:background="@drawable/button_take_photo_icon" />
<ToggleButton
android:background="@drawable/ir_off"
android:id="@+id/light_toggle_button"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginRight="23dp"
android:textOn=" "
android:textOff=" " ></ToggleButton>
<Button
android:background="@drawable/share_off"
android:id="@+id/shared"
android:layout_width="40dp"
android:layout_height="40dp"
/>
</LinearLayout> <!-- </RelativeLayout> --> </RelativeLayout>

直接在Eclipse里面查看的显示效果如下:

Android性能优化---布局优化

在真机上运行效果如下:

进行对比,真机是我们想要的结果,但是之前的编写的效果不对,而且对于不同的屏幕分辨率xml布局编写了三个xml布局来实现适应性。

下面使用java代码来实现布局,使用两个文件一个布局文件,另一个是布局参数文件

布局文件代码如下:

package com.pcareroute;

import com.seuic.pcareroute.AppLog;
import com.seuic.pcareroute.surface.CameraSurface;
import com.seuic.pcareroute.util.PcareRouteParams;
import com.seuic.pcareroute.util.ToolsUnility; import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.ToggleButton; public class PcareRouteMain extends Activity{
public static final String TAG = "PcareRouteMain";
public PcareRouteMain instance;
PcareRouteParams pRouteParams;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ToolsUnility.getToolsUnilityInstance(this).noTitleAndStaBar(this); //去掉标题栏和状态栏
instance = this;
pRouteParams = new PcareRouteParams(instance);
AppLog.enableLogging(true);
initLayout();
} //初始化布局和组件
public void initLayout(){
Parent = new RelativeLayout(getApplicationContext());
Parent.setBackgroundResource(R.drawable.info_back);
BottomInParent = new LinearLayout(getApplicationContext());
BottomInParent.setId(_R.id.bottom_in_parent);
BottomInParent.setBackgroundResource(R.drawable.button_bar);
ButtonInBottom = new ToggleButton[pRouteParams.Bottom_Button_Number];
for (int i = 0; i < pRouteParams.Bottom_Button_Number; i++) {
ButtonInBottom[i] = new ToggleButton(getApplicationContext());
ButtonInBottom[i].setBackgroundResource(ButtonInBottomImage[i]);
ButtonInBottom[i].setTextOff(" ");
ButtonInBottom[i].setTextOn(" ");
ButtonInBottom[i].setText(" ");
BottomInParent.addView(ButtonInBottom[i], pRouteParams.buttonInBottomParams);
}
Parent.addView(BottomInParent, pRouteParams.bottomInParentParams); LeftInParent = new RelativeLayout(getApplicationContext());
LeftInParent.setId(_R.id.left_in_parent);
BottomInLeft = new LinearLayout(getApplicationContext());
BottomInLeft.setId(_R.id.bottom_in_left);
ButtonInLeft = new Button[pRouteParams.Left_Bottom_Button_Number];
for (int i = 0; i < pRouteParams.Left_Bottom_Button_Number; i++) {
ButtonInLeft[i] = new Button(getApplicationContext());
ButtonInLeft[i].setText(" ");
ButtonInLeft[i].setBackgroundResource(ButtonInLeftImage[i]);
BottomInLeft.addView(ButtonInLeft[i], pRouteParams.Left_Bottom_Button_Params);
}
LeftInParent.addView(BottomInLeft, pRouteParams.bottomInLeftParams); tempView = new TextView(getApplicationContext());
tempView.setTextSize(pRouteParams.Left_Top_Temp_TextSize);
tempView.setText("T:");
tempView.setId(_R.id.tempview_in_left);
LeftInParent.addView(tempView, pRouteParams.Left_Top_Temp_Params);
tempRoll = new ToggleButton(getApplicationContext());
tempRoll.setBackgroundResource(R.drawable.max);
tempRoll.setText(" ");
tempRoll.setTextOff(" ");
tempRoll.setTextOn(" ");
// tempRoll.setVisibility(View.INVISIBLE);
LeftInParent.addView(tempRoll, pRouteParams.Left_Top_Temp_ToggButton_Params); humidityView = new TextView(getApplicationContext());
humidityView.setText("H:");
humidityView.setId(_R.id.humiview_in_left);
humidityView.setTextSize(pRouteParams.Left_Top_Temp_TextSize);
LeftInParent.addView(humidityView, pRouteParams.Left_Top_Humi_Params); CenterInLeft = new RelativeLayout(getApplicationContext());
ControlBtn = new Button[CtrolBtnNumber];
for (int i = 0; i < CtrolBtnNumber; i++) {
ControlBtn[i] = new Button(getApplicationContext());
ControlBtn[i].setBackgroundResource(Btn_Ctrol_In_Left_Image[i]);
CenterInLeft.addView(ControlBtn[i], pRouteParams.Left_Center_CtrolButtons_Params[i]);
}
LeftInParent.addView(CenterInLeft, pRouteParams.Left_Center_CtrolButton_Params);
Parent.addView(LeftInParent, pRouteParams.leftInParentParams); RightInParent = new RelativeLayout(getApplicationContext());
cameraSurface = new CameraSurface(getApplicationContext());
RightInParent.addView(cameraSurface, pRouteParams.Right_Surface_Params);
ScaleBtn = new Button[ScaleBtnNumber];
for (int i = 0; i < ScaleBtnNumber; i++) {
ScaleBtn[i] = new Button(getApplicationContext());
ScaleBtn[i].setBackgroundResource(Btn_Scale_In_Right_Image[i]);
RightInParent.addView(ScaleBtn[i], pRouteParams.Right_Scale_Button_Params[i]);
}
scaleView = new TextView(getApplicationContext());
scaleView.setText("100%");
scaleView.getPaint().setFakeBoldText(true);//加粗
scaleView.setTextSize(20);
RightInParent.addView(scaleView, pRouteParams.Right_Scale_View_Params);
Parent.addView(RightInParent, pRouteParams.RightInParentParams); setContentView(Parent, pRouteParams.paramentParams);
} //声明组件和布局
public RelativeLayout Parent;
public LinearLayout BottomInParent;
public RelativeLayout LeftInParent;
public LinearLayout BottomInLeft;
public RelativeLayout CenterInLeft;
public RelativeLayout RightInParent;
public CameraSurface cameraSurface;
public ToggleButton[] ButtonInBottom;
public Button[] ButtonInLeft;
public Button[] ControlBtn;
public Button[] ScaleBtn;
public TextView tempView, humidityView;
public TextView scaleView;
public ToggleButton tempRoll;
//声明变量
public int[] ButtonInBottomImage = {R.drawable.talk_off, R.drawable.music_off, R.drawable.video_off, R.drawable.sound_mute, R.drawable.button_take_photo_icon, R.drawable.ir_off, R.drawable.share_off};//存储底部button的图片的数组
public int[] ButtonInLeftImage = {R.drawable.info_off, R.drawable.net_in_off, R.drawable.wifi_switch_off};//左边布局的下面三个Button按钮图片
public int[] Btn_Ctrol_In_Left_Image = {R.drawable.left_off, R.drawable.up_off, R.drawable.right_off, R.drawable.down_off};
public int CtrolBtnNumber = 4;
public int[] Btn_Scale_In_Right_Image = {R.drawable.zoom_out, R.drawable.zoom_in};
public int ScaleBtnNumber = 2;
}

在上面的代码中如果我们有多个相同的按钮,则可以使用数组来存储,这样做的好处就是代码更加清晰,而且能够减少冗余代码

ControlBtn = new Button[CtrolBtnNumber];
for (int i = 0; i < CtrolBtnNumber; i++) {
ControlBtn[i] = new Button(getApplicationContext());
ControlBtn[i].setBackgroundResource(Btn_Ctrol_In_Left_Image[i]);
CenterInLeft.addView(ControlBtn[i], pRouteParams.Left_Center_CtrolButtons_Params[i]);
}

这样的代码,如果我们用平时的一个组件一个名称,就比现在多余 CtrolBtnNumber倍的代码冗余。

布局参数代码如下:

package com.seuic.pcareroute.util;

import com.pcareroute._R;

import android.app.Activity;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.widget.LinearLayout;
import android.widget.RelativeLayout; public class PcareRouteParams {
public static final String TAG = "PcareRouteParams";
Activity activity;
public PcareRouteParams(Activity activity){
this.activity = activity;
getDisplayMetrics();
initVar();
initLayoutParams();
}
//初始化變量
public void initVar(){
if (screenSize > 5.8) {
Bottom_Button_Width = dip2px(60);
Left_Bottom_Button_Width = dip2px(35);
Bottom_Back_Height = dip2px(70);
Left_Top_TopMarge = dip2px(20);
Left_Top_Temp_LeftMarge = dip2px(40);
Left_Top_Temp_TextSize = 35;
Left_Top_Temp_ToggButton_Width = dip2px(28);
Left_Top_Temp_ToggButton_Height = dip2px(30);
Left_Top_Temp_ToggButton_TopMarge = dip2px(20);
Left_Top_Humi_View_TopMarge = dip2px(5);
Left_Center_CtrolButton_Width = dip2px(300);
Left_Center_CtrolButton_Height = dip2px(250);
Left_Center_CtrolButton_LeftMarge = dip2px(20);
Left_Center_CtrolButton_BottomMarge = dip2px(20);
Right_Surface_LeftMarge = Left_Center_CtrolButton_LeftMarge;
Left_Center_CtrolButton_LeftBtn_Width = dip2px(135);
Left_Center_CtrolButton_LeftBtn_Height = dip2px(90);
Left_Center_CtrolButton_UpBtn_Width = dip2px(100);
Left_Center_CtrolButton_UpBtn_Height = dip2px(135);
Right_Scale_Button_Width = dip2px(50);
Right_Scale_Button_Marge = dip2px(7);
Right_Scale_View_BottomMarge = dip2px(40);
}else if(screenSize < 3.8){
Bottom_Button_Width = dip2px(35);
Left_Bottom_Button_Width = dip2px(18);
Bottom_Back_Height = dip2px(35);
Left_Top_TopMarge = dip2px(0);
Left_Top_Temp_LeftMarge = dip2px(10);
Left_Top_Temp_TextSize = 18;
Left_Top_Temp_ToggButton_Width = dip2px(15);
Left_Top_Temp_ToggButton_Height = dip2px(15);
Left_Top_Temp_ToggButton_TopMarge = dip2px(5);
Left_Top_Humi_View_TopMarge = dip2px(3);
Left_Center_CtrolButton_Width = dip2px(120);
Left_Center_CtrolButton_Height = dip2px(120);
Left_Center_CtrolButton_LeftMarge = dip2px(20);
Left_Center_CtrolButton_BottomMarge = dip2px(5);
Right_Surface_LeftMarge = Left_Center_CtrolButton_LeftMarge;
Left_Center_CtrolButton_LeftBtn_Width = dip2px(40);
Left_Center_CtrolButton_LeftBtn_Height = dip2px(30);
Left_Center_CtrolButton_UpBtn_Width = dip2px(30);
Left_Center_CtrolButton_UpBtn_Height = dip2px(40);
Right_Scale_Button_Width = dip2px(30);
Right_Scale_Button_Marge = dip2px(3);
Right_Scale_View_BottomMarge = dip2px(15);
}else {
Bottom_Button_Width = dip2px(40);
Left_Bottom_Button_Width = dip2px(27);
Bottom_Back_Height = dip2px(45);
Left_Top_TopMarge = dip2px(0);
Left_Top_Temp_LeftMarge = dip2px(20);
Left_Top_Temp_TextSize = 18;
Left_Top_Temp_ToggButton_Width = dip2px(15);
Left_Top_Temp_ToggButton_Height = dip2px(15);
Left_Top_Temp_ToggButton_TopMarge = dip2px(5);
Left_Top_Humi_View_TopMarge = dip2px(5);
Left_Center_CtrolButton_Width = dip2px(150);
Left_Center_CtrolButton_Height = dip2px(150);
Left_Center_CtrolButton_LeftMarge = dip2px(20);
Left_Center_CtrolButton_BottomMarge = dip2px(10);
Right_Surface_LeftMarge = Left_Center_CtrolButton_LeftMarge;
Left_Center_CtrolButton_LeftBtn_Width = dip2px(80);
Left_Center_CtrolButton_LeftBtn_Height = dip2px(50);
Left_Center_CtrolButton_UpBtn_Width = dip2px(50);
Left_Center_CtrolButton_UpBtn_Height = dip2px(60);
Right_Scale_Button_Width = dip2px(40);
Right_Scale_Button_Marge = dip2px(3);
Right_Scale_View_BottomMarge = dip2px(18);
}
Left_Bottom_Button_LeftMarge = dip2px(10);
BottomInLeft_BottomMarge = dip2px(5);
}
public int dip2px(float dpValue) {
return (int)(dpValue * scale + 0.5f);
}
//获取屏幕的宽度,高度和密度以及dp / px
public void getDisplayMetrics() {
DisplayMetrics dm = new DisplayMetrics();
dm = activity.getApplicationContext().getResources().getDisplayMetrics();
Screen_width = dm.widthPixels;
Screen_height = dm.heightPixels;
scale = activity.getResources().getDisplayMetrics().density;
density = dm.density;
double bb = Math.sqrt(Math.pow(Screen_width, 2)+ Math.pow(Screen_height, 2));
screenSize = bb / (160 * dm.density);
} //初始化布局参数
public void initLayoutParams(){
paramentParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
bottomInParentParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, Bottom_Back_Height);
bottomInParentParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
buttonInBottomParams = new LinearLayout.LayoutParams(Bottom_Button_Width, Bottom_Button_Width);
buttonInBottomParams.gravity = Gravity.CENTER_VERTICAL;
//底部包含组件布局参数
int jiange = (Screen_width - Bottom_Button_Width * Bottom_Button_Number)/(Bottom_Button_Number + 1);
buttonInBottomParams.leftMargin = jiange; leftInParentParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.MATCH_PARENT);
leftInParentParams.addRule(RelativeLayout.ABOVE, _R.id.bottom_in_parent);
bottomInLeftParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
bottomInLeftParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
bottomInLeftParams.bottomMargin = BottomInLeft_BottomMarge; Left_Bottom_Button_Params = new LinearLayout.LayoutParams(Left_Bottom_Button_Width, Left_Bottom_Button_Width);
Left_Bottom_Button_Params.leftMargin = Left_Bottom_Button_LeftMarge;
Left_Bottom_Button_Params.gravity = Gravity.CENTER_VERTICAL; Left_Top_Temp_Params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
Left_Top_Temp_Params.topMargin = Left_Top_TopMarge;
Left_Top_Temp_Params.leftMargin = Left_Top_Temp_LeftMarge;
Left_Top_Temp_ToggButton_Params = new RelativeLayout.LayoutParams(Left_Top_Temp_ToggButton_Width, Left_Top_Temp_ToggButton_Height);
Left_Top_Temp_ToggButton_Params.addRule(RelativeLayout.RIGHT_OF, _R.id.tempview_in_left);
Left_Top_Temp_ToggButton_Params.topMargin = Left_Top_Temp_ToggButton_TopMarge; Left_Top_Humi_Params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
Left_Top_Humi_Params.addRule(RelativeLayout.BELOW, _R.id.tempview_in_left);
Left_Top_Humi_Params.topMargin = Left_Top_Humi_View_TopMarge;
Left_Top_Humi_Params.addRule(RelativeLayout.ALIGN_LEFT, _R.id.tempview_in_left); Left_Center_CtrolButton_Params = new RelativeLayout.LayoutParams(Left_Center_CtrolButton_Width, Left_Center_CtrolButton_Height);
Left_Center_CtrolButton_Params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
Left_Center_CtrolButton_Params.bottomMargin = BottomInLeft_BottomMarge + Left_Center_CtrolButton_BottomMarge + Left_Bottom_Button_Width;
Left_Center_CtrolButton_Params.leftMargin = Left_Center_CtrolButton_LeftMarge;
// Left_Center_CtrolButton_Params.rightMargin = Left_Center_CtrolButton_LeftMarge;
Left_Center_CtrolButtons_Params = new RelativeLayout.LayoutParams[4];
Left_Center_CtrolButtons_Params[0] = new RelativeLayout.LayoutParams(Left_Center_CtrolButton_UpBtn_Height, Left_Center_CtrolButton_UpBtn_Width);
Left_Center_CtrolButtons_Params[0].addRule(RelativeLayout.CENTER_VERTICAL);
Left_Center_CtrolButtons_Params[1] = new RelativeLayout.LayoutParams(Left_Center_CtrolButton_UpBtn_Width, Left_Center_CtrolButton_UpBtn_Height);
Left_Center_CtrolButtons_Params[1].addRule(RelativeLayout.CENTER_HORIZONTAL);
Left_Center_CtrolButtons_Params[2] = new RelativeLayout.LayoutParams(Left_Center_CtrolButton_UpBtn_Height, Left_Center_CtrolButton_UpBtn_Width);
Left_Center_CtrolButtons_Params[2].addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
Left_Center_CtrolButtons_Params[2].addRule(RelativeLayout.CENTER_VERTICAL);
Left_Center_CtrolButtons_Params[3] = new RelativeLayout.LayoutParams(Left_Center_CtrolButton_UpBtn_Width, Left_Center_CtrolButton_UpBtn_Height);
Left_Center_CtrolButtons_Params[3].addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
Left_Center_CtrolButtons_Params[3].addRule(RelativeLayout.CENTER_HORIZONTAL); RightInParentParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
RightInParentParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
RightInParentParams.addRule(RelativeLayout.RIGHT_OF, _R.id.left_in_parent);
RightInParentParams.addRule(RelativeLayout.ABOVE, _R.id.bottom_in_parent);
RightInParentParams.leftMargin = Right_Surface_LeftMarge;
Right_Surface_Params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); Right_Scale_Button_Params = new RelativeLayout.LayoutParams[2];
Right_Scale_Button_Params[0] = new RelativeLayout.LayoutParams(Right_Scale_Button_Width, Right_Scale_Button_Width);
Right_Scale_Button_Params[0].leftMargin = Right_Scale_Button_Marge;
Right_Scale_Button_Params[0].topMargin = Right_Scale_Button_Marge;
Right_Scale_Button_Params[1] = new RelativeLayout.LayoutParams(Right_Scale_Button_Width, Right_Scale_Button_Width);
Right_Scale_Button_Params[1].addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
Right_Scale_Button_Params[1].rightMargin = Right_Scale_Button_Marge;
Right_Scale_Button_Params[1].topMargin = Right_Scale_Button_Marge;
Right_Scale_View_Params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
Right_Scale_View_Params.addRule(RelativeLayout.CENTER_HORIZONTAL);
Right_Scale_View_Params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
Right_Scale_View_Params.bottomMargin = Right_Scale_View_BottomMarge;
} //声明布局和组件
public RelativeLayout.LayoutParams paramentParams;
public RelativeLayout.LayoutParams bottomInParentParams;
public LinearLayout.LayoutParams buttonInBottomParams;
public RelativeLayout.LayoutParams leftInParentParams;
public RelativeLayout.LayoutParams bottomInLeftParams;
public LinearLayout.LayoutParams Left_Bottom_Button_Params;
public RelativeLayout.LayoutParams topInLeftParams;
public RelativeLayout.LayoutParams Left_Top_Temp_Params;
public RelativeLayout.LayoutParams Left_Top_Temp_ToggButton_Params;
public RelativeLayout.LayoutParams Left_Top_Humi_Params;
public RelativeLayout.LayoutParams Left_Center_CtrolButton_Params;
public RelativeLayout.LayoutParams[] Left_Center_CtrolButtons_Params;//左上右下
public RelativeLayout.LayoutParams RightInParentParams;
public RelativeLayout.LayoutParams Right_Surface_Params;
public RelativeLayout.LayoutParams[] Right_Scale_Button_Params;//大小
public RelativeLayout.LayoutParams Right_Scale_View_Params; //声明变量
public float scale;//dp -- px
public double screenSize;
public float density;
public int Screen_width;
public int Screen_height;
public int Bottom_Button_Width = 40;//dp
public int Bottom_Back_Height = 5;//dp
public int Bottom_Button_Number = 7;
public int Left_Bottom_Button_Width = 27;//dp
public int BottomInLeft_BottomMarge = 5;//5dp
public int Left_Bottom_Button_LeftMarge = 10;//dp
public int Left_Bottom_Button_Number = 3;
public int Left_Top_TopMarge = 5;
public int Left_Top_Temp_LeftMarge = 5;
public int Left_Top_Temp_TextSize = 18;
public int Left_Top_Temp_ToggButton_Width = 15;
public int Left_Top_Temp_ToggButton_Height = 15;
public int Left_Top_Temp_ToggButton_TopMarge = 5;
public int Left_Top_Humi_View_TopMarge = 5;
public int Left_Center_CtrolButton_Width = 150;
public int Left_Center_CtrolButton_Height = 150;
public int Left_Center_CtrolButton_LeftMarge = 20;
public int Left_Center_CtrolButton_BottomMarge = 20;
public int Right_Surface_LeftMarge = 5;
public int Left_Center_CtrolButton_LeftBtn_Width = 80;
public int Left_Center_CtrolButton_LeftBtn_Height = 50;
public int Left_Center_CtrolButton_UpBtn_Width = 50;
public int Left_Center_CtrolButton_UpBtn_Height = 60;
public int Right_Scale_Button_Width = 20;
public int Right_Scale_Button_Marge = 3;
public int Right_Scale_View_BottomMarge = 18;
}

真机的显示效果如下:

Android性能优化---布局优化

两者虽然在真机上的效果差不多,但是实际是两种不同的实现方式。