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); }}


 

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值