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

2 篇文章 0 订阅
1 篇文章 0 订阅

 

权重属性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

	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值