0%

Android View

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) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
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方法(其实转换成布局也是可以的),最后我们将我们的布局添加到我们的上下文对象中就可以了。
效果图:
效果图