android学习笔记---51_编码实现软件界面,把固定不变的界面写到xml中,逻辑改变的写到程序中,

2013/5/12
51_编码实现软件界面
--------------------------
1.Android除了可以使用xml实现软件界面,还可以通过编码方式实现软件的界面,而且在某种情况下只能采用编码方式实现软件的界面,例如:软件运行时需要根据运算结果决定显示某些内容。如果不是必须,建议使用xml,
  因为这样可以使应用遵守mvc设计模式,具有良好的软件分层结构。
-----------------------------------------------------------------
2.根据计算结果显示样式的时候,这时候使用xml做界面就很难
------------------------------------
3.比如:
   ----------------------------------------
   这个部分经常改变,可以放到编码中来控制
   ----------------------------------------
   --------------------------------------------
   这部分不变,不变的部分可以抽取出来放到xml中。
   ----------------------------------------------
   a.如果通过编码实现软件界面的时候,要把不变的部分放到xml中,这样以后修改界面的时候比较方便
   b.但通过编码方式实现界面性能上要更好一些
   c.软件要遵守mvc模式
 ------------------------------------------------------
 4.下面是通过编码实现界面的实例源码
   a.新建android项目:CodeUI
   b./CodeUI/src/com/credream/codeUI/CodeUIActivity.java
    package com.credream.codeUI;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

public class CodeUIActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       //①. 新建一个线性布局对象,传入上下文对象
        LinearLayout linearLayout = new LinearLayout(this);
        /*LinearLayout的父类是ViewGroup
         * ViewGroup是一个view容器:用来装一些子控件,只有继承ViewGroup才有
         * 容纳子控件的功能,ViewGroup又继承了View,在android中,不管是控件还是
         * 容器,最后都继承自View类
         *
         * *
         */
        //垂直布局
        linearLayout.setOrientation(LinearLayout.VERTICAL);
        //①.1 新建TextView
        TextView textView = new TextView(this);
       //设置TextView显示内容
        textView.setText(R.string.hello);
       //指定textView的布局参数:宽高什么的。
        //这里指定宽填充父元素,高WRAP_CONTENT包裹内容
        ViewGroup.LayoutParams textViewParams = new ViewGroup.LayoutParams(
          ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        //①.2把textView控件添加到线性布局中。textView布局控件,textViewParams全局参数
        linearLayout.addView(textView, textViewParams);
     // ③ 得到part.xml中的布局view
        View partView = getPartUI();
        //③.1 把part.xml部分的布局添加到线性布局中
        linearLayout.addView(partView);
       
        ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(
          ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);
        setContentView(linearLayout, layoutParams);
    }
    //② 用来得到某个部分的界面
    private View getPartUI(){
     //这里用到了布局填充服务LayoutInflater,是android系统内置的服务
     LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     return inflater.inflate(R.layout.part, null);
     //inflater.inflate(R.layout.part, null);返回View,
     //第一个参数是资源ID,可以根据界面ID这里是part.xml中,生成对应的View对象
     //第二个参数是:指定是否把生成的view对象挂接到某个父元素上面
    }
}
------------------------------------------------------------------------------------
c./CodeUI/res/layout/part.xml
  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
<!-- 这个xml是控制的界面中不变的部分 ,这里添加了一个EditText控件-->
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
       />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"  
        android:text="添加"    
        />
</LinearLayout>
------------------------------------------------
d./CodeUI/res/values/strings.xml
  <?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="hello">Hello World, CodeUIActivity!</string>
    <string name="app_name">CodeUI编码实现软件界面</string>

</resources>
------------------------------------------------------------------------

 

 

你可能感兴趣的:(Android学习)