线性布局是最基本的一种布局,在基本控件篇幅中用到的都是LinearLayout,线性布局有两种方式,前面也有用到,一种是垂直的(vertical),一种是水平的(horizontal)。我们同样来看下LinearLayout的定义(http://developer.android.com/reference/android/widget/LinearLayout.html):
其实Android中的所有组件包括布局管理器都是View的子类,对于这些View类的组件,除了可以像前面用xml定义之外,还可以在java代码中实现,下面就写个例子(在java代码中实现布局的动态添加):
效果如下:
MainActivity.java:
package com.example.linearlayoutdemo; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.Menu; import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.activity_main);不加载xml文件,这里注释掉,以便看出区别。 //创建线性布局 LinearLayout layout = new LinearLayout(this); //设置布局管理器的宽度和高度 LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT); //设置布局方向(horizontal和vertical) layout.setOrientation(LinearLayout.VERTICAL); //设置textView组件的高和宽 LinearLayout.LayoutParams txParam = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); //设置ImageView的高和宽 LinearLayout.LayoutParams imgParam = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); //新建一个textview TextView tx = new TextView(this); //设置textview的布局参数 tx.setLayoutParams(txParam); tx.setText("LinearLayout布局学习"); tx.setTextColor(Color.RED);//设置颜色 tx.setTextSize(20);//设置大小 //增加组件 layout.addView(tx); ImageView img = new ImageView(this); img.setLayoutParams(imgParam); img.setBackgroundResource(R.drawable.ic_launcher);//设置系统图标为显示图片 layout.addView(img); super.addContentView(layout, param); } }
其实上面的代码就等同于下面的xml文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ff0000" android:textSize="20sp" android:text="LinearLayout布局学习" /> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> </LinearLayout>
这里说个要注意的问题就是,java代码中的setTextSize中传入的值是sp为单位,所以xml中也是20sp,而在getTextSize的时候是px值为单位,以后遇到不一样字体大小时不要忽略这个。