您的位置:首页 > 移动开发 > Android开发

Android学习第四课:Java代码实现XML布局

2015-06-21 12:41 639 查看
 

权重属性layout_height

在布局控件中(如LinearLayout),子控件可以根据权重值(默认为0)来分配所占据的空间,这需要结合layout_width或layout_height的值进行分类:

1)如果子控件layout_weight都为“match_parent”(子控件都“争取”),控件根据权重值反比分配空间;

2)如果子控件layout_weight都为0dip(子控件都“谦让”),根据权重值的正比分配空间;

3)如果有子控件的权重为0,则权重值表示填充顺序而非比例关系;

第(3)种情况的一个布局例子如下:

<LinearLayout 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:orientation="horizontal"
>
<EditText
android:layout_width="<span style="color:#ff0000;">match_parent</span>"
android:layout_height="wrap_content"
android:hint="输入关键字"
android:layout_weight="1" />
<Button
android:layout_width="<span style="color:#ff0000;">wrap_content</span>"
android:layout_height="wrap_content"
android:text="搜索"
android:layout_weight="0"
/>

</LinearLayout>


显示截图如下:



 

控件(View)属性

在XML布局文件中,任何一个控件(如Button)都有很多属性,为配置布局文件带来极大困难和迷惑,实际上,任何一个控件的属性都由两部分组成,一个是控件自带的属性,这个事固定的,一个是控件相对于父容器(ViewsGroup)的属性,这个因父容器的不同而变化,具体而言:

1)自带的属性,比如layout_width,layout_height

2)相对于父容器(ViewsGroup),比如在linearLayout中,子控件有layout_weight属性,而在RelativeLayout中,没有该属性,这些属性是通过父容器的LayoutParams进行管理。

Java语言实现布局文件(XML)视图

通过设置布局文件中ViewGroup和View的属性,可以形成各种各样的视图,但XML是一种标记语言,Android并不能直接执行,而是通过Layoutinflate类解析XML文件,并根据XML中的ViewGroup、View创建ViewGroup、View的Java类实例,这些类的实例属性值就是XML中设置的属性值,即XML语言标记的视图,可以通过Java语言同等实现。

 以下是一个Demo,实现上面的视图:

package com.example.javaimplementxml;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);

// 根目录LinearLayout相对于外面仍然是子视图
LinearLayout ll = new LinearLayout(this);// 新建容器
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT);
ll.setLayoutParams(lp);

// 新建LinearLayout的子控件EditText,并设置属性
EditText et = new EditText(this);
et.setHint("输入搜索关键字"); //EditText自有属性

//EditText相对于LinearLayout的属性
LinearLayout.LayoutParams lpet = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT, 1);
et.setLayoutParams(lpet);

ll.addView(et, 0);

// 新建LinearLayout的子控件Button,并设置属性
Button bt = new Button(this);
bt.setText("搜索"); //Button自有属性

//Button相对于LinearLayout的属性
LinearLayout.LayoutParams lpbt = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT, 0);

bt.setLayoutParams(lpbt);
ll.addView(bt, 1);

setContentView(ll);//setContentView的参数,或者是资源ID,或者是View

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android xml 布局