Android视图 其实看到的这些空间就是一些View所派生出来的东西,包括这些布局也是派生出来的,但是布局所派生的直接父类是ViewGroup类,这个类支持添加View对象。 下面看一个实例。 首先看一下我的Layout XML。
1 2 3 4 5 6 7 8 9 10 11 <RelativeLayout xmlns:android ="http://schemas.android.com/apk/res/android" xmlns:tools ="http://schemas.android.com/tools" android:layout_width ="match_parent" android:layout_height ="match_parent" android:paddingBottom ="@dimen/activity_vertical_margin" android:paddingLeft ="@dimen/activity_horizontal_margin" android:paddingRight ="@dimen/activity_horizontal_margin" android:paddingTop ="@dimen/activity_vertical_margin" tools:context ="com.example.android_stduy1.MainActivity" > </RelativeLayout >
我并没有添加任何的组件,我们现在要通过代码的方式进行添加。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 package com.example.android_stduy1;import android.app.ActionBar.LayoutParams;import android.graphics.Color;import android.app.Activity;import android.os.Bundle;import android.text.Layout;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.widget.RelativeLayout;import android.widget.TextView;public class MainActivity extends Activity { @Override protected void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState); View MainLayOut = View.inflate(this , R.layout.activity_main, null ); TextView textView = new TextView(this ); LayoutParams layoutPar = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT); textView.setLayoutParams(layoutPar); textView.setBackgroundColor(Color.GREEN); textView.setText("Hellow Word" ); ((ViewGroup)MainLayOut).addView(textView); setContentView(MainLayOut); } @Override public boolean onCreateOptionsMenu (Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true ; } @Override public boolean onOptionsItemSelected (MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { return true ; } return super .onOptionsItemSelected(item); } }
我们这里没有使用哪个自带的加载布局的方式。
首先我们先new一个View的对象通过View类的一个静态方法inflate。 *public View inflate () 加载getLayoutResource()方法标识的布局资源,并通过加载布局资源替换父容器中它自己。 返回值:这个已加载的布局资源文件. * 这是一个API文档解释的。 反正这个东西就是返回一个加载的布局资源。 第一个参数就是一个设备上下文,我们用自身就好了,第二个就是一个资源ID,第三个暂时不是很清楚,但是写null也是可以的。 加载完布局资源之后,我们new一个TextView对象,就像我们在XML文件中进行设置的,我们也需要一个控件的布局,那就是我们需要一个LayoutParams对象,这个对象其实就是一个控件布局的一个对象,我们在构造方法中需要传入一个坐标类型的,就和我们在XML中设置的一样,我们使用这个类里面的一个常量就可以设置这个对象了。 然后在将我们的TextView设置这个布局,设置完毕之后我们简单的设置一下这个TextView对象,然后下面就是比较关键的一步了,我们需要将我们的控件添加到我们的LayOut中,但是由于我们的布局是View的对象我们需要进行强制转换成为ViewGroup类型的,这个时候我们才拥有了addView方法(其实转换成布局也是可以的),最后我们将我们的布局添加到我们的上下文对象中就可以了。 效果图: