zoukankan      html  css  js  c++  java
  • 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里面查看的显示效果如下:


    在真机上运行效果如下:


    进行对比,真机是我们想要的结果,但是之前的编写的效果不对,而且对于不同的屏幕分辨率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;
    }
    


    真机的显示效果如下:


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

  • 相关阅读:
    深入浅出 Java 8 Lambda 表达式
    OneAPM x 腾讯 | OneAPM 技术公开课·深圳 报名:前端性能大作战!
    第30节:Java基础-内部类
    第二十九节:Java基础知识-类,多态,Object,数组和字符串
    第二十九节:Java基础知识-类,多态,Object,数组和字符串
    第二十九节:Java基础知识-类,多态,Object,数组和字符串
    第二十八节:Java基础-进阶继承,抽象类,接口
    第二十八节:Java基础-进阶继承,抽象类,接口
    第二十八节:Java基础-进阶继承,抽象类,接口
    ES6教程-字符串,函数的参数,了解函数的arguments对象,js面向对象,设计模式-单例模式,解构赋值
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3143149.html
Copyright © 2011-2022 走看看