Android 用純代碼實現複雜界面

轉自:http://blog.csdn.net/gf771115/article/details/8237229

在網上看到一個簡單的用代碼實現界面的例子,copy過來做參考。用代碼實現界面的佈局很多方法不能使用xml中的style,具體使用的方法需要邊用邊查。

-------------------------------------------------轉載內容------------------------------------------------------------------

在開發Android應用時有時會遇到純代碼實現複雜界面的需求,本文通過實例來演示,希望能對大家有所幫助

界面截圖:

 

XML佈局文件:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@android:color/white">
    
    <LinearLayout 
	    android:layout_width="fill_parent"
	    android:layout_height="fill_parent"
	    android:orientation="vertical"
	    android:gravity="center">
	    <ImageView 
	        android:layout_width="240dip"
	        android:layout_height="120dip"
	        android:layout_margin="30dip"
	        android:layout_gravity="center_horizontal"
	        android:background="@android:color/black"
	        android:scaleType="fitCenter"
	        android:adjustViewBounds="true"
	        android:src="@android:drawable/ic_dialog_map"/>
	    <TextView
	        android:layout_width="fill_parent"
	        android:layout_height="wrap_content"
	        android:layout_margin="30dip"
	        android:layout_gravity="center_horizontal"
	        android:gravity="center_horizontal"
	        android:textSize="18sp"
	        android:text="測試文本顯示"/>
	    <EditText 
	        android:layout_width="240dip"
	        android:layout_height="wrap_content"
	        android:layout_margin="30dip"
	        android:layout_gravity="center_horizontal"
	        android:hint="請輸入文字內容"
	        android:maxLength="200"
	        android:textSize="18sp"/>
	    <LinearLayout 
	        android:id="@+id/button_layout"
	        android:layout_width="240dip"
	        android:layout_height="wrap_content"
	        android:layout_gravity="center_horizontal"
	        android:background="#c6c3c6"
	        android:minHeight="54dip"
	        android:orientation="horizontal"
	        android:paddingTop="4dip"
	        android:paddingBottom="4dip"
	        android:paddingLeft="2dip"
	        android:paddingRight="2dip" >
	        <Button  
	            android:text="確定 "
	            android:layout_width="wrap_content"
	            android:layout_height="wrap_content"
	            android:layout_gravity="left"
	            android:layout_marginLeft="10dip"
	            android:layout_marginRight="5dip"
	            android:layout_weight="1"
	            android:maxLines="2"
	            android:textSize="18sp" />
	        <Button 
	            android:text="取消"
	            android:layout_width="wrap_content"
	            android:layout_height="wrap_content"
	            android:layout_gravity="right"
	            android:layout_marginLeft="5dip"
	            android:layout_marginRight="10dip"
	            android:layout_weight="1"
	            android:maxLines="2"
	            android:textSize="18sp"/>
	    </LinearLayout>
	    <RelativeLayout 
	        android:layout_width="fill_parent"
	        android:layout_height="wrap_content"
	        >
	        <ImageView 
	            android:id="@+id/ImageBottom"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:layout_below="@id/button_layout"
		        android:layout_centerHorizontal="true"
		        android:layout_margin="30dip"
		        android:background="#FF777777"
		        android:scaleType="fitCenter"
		        android:adjustViewBounds="true"
		        android:src="@android:drawable/ic_dialog_email"/>
	    </RelativeLayout>
	    
	</LinearLayout>
    
</ScrollView>

通過純代碼實現XML同樣的效果:

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.text.InputFilter;
import android.text.InputFilter.LengthFilter;
import android.view.Gravity;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.ScrollView;
import android.widget.TextView;

public class ActivityInfo extends Activity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
//		setContentView(R.layout.info);
		
		initUI();
	}
	
	public final void initUI(){
		ScrollView main = new ScrollView(this);
		main.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
		main.setBackgroundColor(Color.WHITE);
		
		//根佈局參數
		LinearLayout.LayoutParams layoutParamsRoot = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);
		layoutParamsRoot.gravity = Gravity.CENTER;
		//根佈局
		LinearLayout layoutRoot = new LinearLayout(this);
		layoutRoot.setLayoutParams(layoutParamsRoot);
		layoutRoot.setOrientation(LinearLayout.VERTICAL);
		
		
		//上邊距(dp值)
		int topMargin = dip2px(this, 30);
		//imageMain寬度(dp值)
		int widthMain = dip2px(this, 240);
		//imageMain高度(dp值)
		int heightMain = dip2px(this, 120);
		
		//imageMain佈局參數
		LinearLayout.LayoutParams layoutParamsImageMain = new LinearLayout.LayoutParams(widthMain,heightMain);
		layoutParamsImageMain.topMargin = topMargin;
		layoutParamsImageMain.bottomMargin = topMargin;
		layoutParamsImageMain.leftMargin = topMargin;
		layoutParamsImageMain.rightMargin = topMargin;
		layoutParamsImageMain.gravity=Gravity.CENTER_HORIZONTAL;
		//初始化ImageView
		ImageView imageMain = new ImageView(this);
		imageMain.setScaleType(ScaleType.FIT_CENTER);
		imageMain.setAdjustViewBounds(true);
		imageMain.setBackgroundColor(Color.BLACK);
		imageMain.setImageResource(android.R.drawable.ic_dialog_map);
		layoutRoot.addView(imageMain, layoutParamsImageMain);
		
		//textInfo佈局參數
		LinearLayout.LayoutParams layoutParamsTextInfo = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
		layoutParamsTextInfo.topMargin = topMargin;
		layoutParamsTextInfo.bottomMargin = topMargin;
		layoutParamsTextInfo.leftMargin = topMargin;
		layoutParamsTextInfo.rightMargin = topMargin;
		layoutParamsTextInfo.gravity=Gravity.CENTER_HORIZONTAL;
		//初始化textInfo
		TextView textInfo = new TextView(this);
		textInfo.setGravity(Gravity.CENTER_HORIZONTAL);
		textInfo.setTextSize(18);
		layoutRoot.addView(textInfo, layoutParamsTextInfo);
		
		//editInfo佈局參數
		LinearLayout.LayoutParams layoutParamsEditInfo = new LinearLayout.LayoutParams(widthMain,LayoutParams.WRAP_CONTENT);
		layoutParamsEditInfo.topMargin = topMargin;
		layoutParamsEditInfo.gravity=Gravity.CENTER_HORIZONTAL;
		//初始化editInfo
		EditText editInfo = new EditText(this);
		editInfo.setHint("請輸入文字內容");
		//設置可輸入的最大長度
		InputFilter[] filters = {new LengthFilter(200)};  
		editInfo.setFilters(filters);
		editInfo.setTextSize(18);
		layoutRoot.addView(editInfo, layoutParamsEditInfo);
		
		//上邊距(dp值)
		int minHeight = dip2px(this, 54);
		//上padding(dp值)
		int topPadding = dip2px(this, 4);
		//左padding(dp值)
		int leftPadding = dip2px(this, 2);
		//按鈕佈局
		LinearLayout layoutButton = new LinearLayout(this);
		layoutButton.setLayoutParams(layoutParamsEditInfo);
		layoutButton.setOrientation(LinearLayout.HORIZONTAL);
		layoutButton.setBackgroundColor(Color.parseColor("#c6c3c6"));
		layoutButton.setMinimumHeight(minHeight);
		layoutButton.setPadding(leftPadding, topPadding, leftPadding, topPadding);
		layoutButton.setId(100000001);
		
		//buttonOK佈局參數
		LinearLayout.LayoutParams layoutParamsButtonOK = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
		layoutParamsButtonOK.gravity = Gravity.LEFT;
		layoutParamsButtonOK.leftMargin = dip2px(this, 10);
		layoutParamsButtonOK.rightMargin = dip2px(this, 5);
		layoutParamsButtonOK.weight = 1;
		//Button確定
		Button buttonOK = new Button(this);
		buttonOK.setLayoutParams(layoutParamsButtonOK);
		buttonOK.setMaxLines(2);
		buttonOK.setTextSize(18);
		buttonOK.setText("確定");
		layoutButton.addView(buttonOK);
		
		//buttonCancel佈局參數
		LinearLayout.LayoutParams layoutParamsButtonCancel = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
		layoutParamsButtonCancel.gravity = Gravity.RIGHT;
		layoutParamsButtonCancel.leftMargin = dip2px(this, 5);
		layoutParamsButtonCancel.rightMargin = dip2px(this, 10);
		layoutParamsButtonCancel.weight = 1;
		//Button取消
		Button buttonCancel = new Button(this);
		buttonCancel.setLayoutParams(layoutParamsButtonCancel);
		buttonCancel.setMaxLines(2);
		buttonCancel.setTextSize(18);
		buttonCancel.setText("取消");
		
		layoutButton.addView(buttonCancel);
		
		layoutRoot.addView(layoutButton, layoutParamsEditInfo);
		
		//RelativeLayout佈局參數
		LinearLayout.LayoutParams layoutParamsBottom = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
		RelativeLayout layoutBottom = new RelativeLayout(this);
		layoutBottom.setLayoutParams(layoutParamsBottom);
		
		RelativeLayout.LayoutParams paramsImageBottom = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
		paramsImageBottom.addRule(RelativeLayout.BELOW, 100000001);
		paramsImageBottom.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
		paramsImageBottom.setMargins(topMargin, topMargin, topMargin, topMargin);
		
		//初始化ImageView
		ImageView imageBottom = new ImageView(this);
		imageBottom.setScaleType(ScaleType.FIT_CENTER);
		imageBottom.setAdjustViewBounds(true);
		imageBottom.setBackgroundColor(0xFF777777);
		imageBottom.setImageResource(android.R.drawable.ic_dialog_email);
		layoutBottom.addView(imageBottom, paramsImageBottom);
		layoutRoot.addView(layoutBottom);
		
		
		//TODO TEST
//		imageMain.setBackgroundResource(android.R.drawable.ic_dialog_map);
		textInfo.setText("測試文本顯示");
		
		main.addView(layoutRoot);
		setContentView(main);
	}
	
	/**
	 * 根據手機的分辨率從 dp 的單位 轉成爲 px(像素)
	 */
	public static int dip2px(Context context, float dpValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (dpValue * scale + 0.5f);
	}

	/**
	 * 根據手機的分辨率從 px(像素) 的單位 轉成爲 dp
	 */
	public static int px2dip(Context context, float pxValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (pxValue / scale + 0.5f);
	}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章