浅谈一下以代码实现 线型布局 和 相对布局 引入LayoutInflater使用
LayoutInflater介绍:
<span style="font-size:18px;"><span style="font-size:18px;"> LayoutInflater mInflater = LayoutInflater.from(context);
ViewGroup parent;
View v = mInflater.inflate(R.layout.item_simpleadapter_view, parent,true);
View v = mInflater.inflate(R.layout.item_simpleadapter_view, parent,false);
View v = mInflater.inflate(R.layout.item_simpleadapter_view, null);</span></span>
public View inflate(int resourceId, ViewGroup root, boolean attachToRoot)
<1>如果设置了ViewGroup root参数,且attachToRoot设置为false的话,
则会从root中得到由layout_width和layout_height组成的LayoutParams,
就会对我们加载的视图View设置该LayoutParams。
<2>如果设置了ViewGroup root参数,且attachToRoot设置为true的话,
则将我们加载的视图做为子视图添加到root视图中。
<3>如果我们ViewGroup root设置为空的话,就直接返回我们创建的视图;
下面是以代码实现布局的方式:
<span style="font-size:18px;">import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
public class CodeLayoutAcitivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRelationLayout();
}
public void setLinearLayout() {
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setLayoutParams(new LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
linearLayout.setBackgroundColor(getResources().getColor(
android.R.color.darker_gray));
linearLayout.setGravity(Gravity.CENTER);
Button button = new Button(this);
button.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
button.setText("按钮1");
Button button2 = new Button(this);
button2.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
button2.setText("按钮2");
linearLayout.addView(button);
linearLayout.addView(button2);
setContentView(linearLayout);
}
public void setRelationLayout() {
RelativeLayout rl = new RelativeLayout(this);
Button btn1 = new Button(this);
btn1.setText("----------1------------");
btn1.setId(1);
RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
lp1.addRule(RelativeLayout.ALIGN_PARENT_TOP);
lp1.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
// btn1 位于父 View 的顶部,在父 View 中水平居中
rl.addView(btn1, lp1);
Button btn2 = new Button(this);
btn2.setText("|\n|\n2\n|\n|\n|");
btn2.setId(2);
RelativeLayout.LayoutParams lp2 = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
lp2.addRule(RelativeLayout.BELOW, 1);
lp2.addRule(RelativeLayout.ALIGN_LEFT, 1);
// btn2 位于 btn1 的下方、其左边和 btn1 的左边对齐
rl.addView(btn2, lp2);
Button btn3 = new Button(this);
btn3.setText("|\n|\n3\n|\n|\n|");
btn3.setId(3);
RelativeLayout.LayoutParams lp3 = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
lp3.addRule(RelativeLayout.BELOW, 1);
lp3.addRule(RelativeLayout.RIGHT_OF, 2);
lp3.addRule(RelativeLayout.ALIGN_RIGHT, 1);
// btn3 位于 btn1 的下方、btn2 的右方且其右边和 btn1 的右边对齐(要扩充)
rl.addView(btn3, lp3);
Button btn4 = new Button(this);
btn4.setText("-----------------4--------------");
btn4.setId(4);
RelativeLayout.LayoutParams lp4 = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
lp4.addRule(RelativeLayout.BELOW, 2);
lp4.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
// btn4 位于 btn2 的下方,在父Veiw中水平居中
rl.addView(btn4, lp4);
setContentView(rl);
}
}</span>
其效果如下图:
同样的效果同xml完成代码如下:
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="-------1-------" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_below="@+id/button1"
android:text="|\n|\n2\n|\n|\n|" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@id/button1"
android:layout_below="@id/button1"
android:layout_toRightOf="@id/button2"
android:text="|\n|\n3\n|\n|\n|" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button2"
android:layout_centerHorizontal="true"
android:text="----------4--------" />
</RelativeLayout>
</span>
对比两种方法实现同样的效果,用xml方法写的代码层次分明,更容易看懂。