1. 程式人生 > >Android 用純程式碼實現複雜介面

Android 用純程式碼實現複雜介面

               

在開發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); }}