安卓动态控制RelativeLayout的组件
第一篇博客哈。
最近做一个项目,想到在RelativeLayout动态添加组件。网上查了很多资料,碰了很多壁。后来算是这里摘一点那里摘一点,达到了自己想要。现在就写篇博客,做一下总结。
话不多说,直接上代码
XML中的代码:
这段代码是在activity_main.xml中,主要是创建一个RelativeLayout组件,用于在Java代码中对其添加组件。
<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="alex_melody_boke.components_of_dynamic_control_relativeLayout.MainActivity" >
<!-- 直接创建一个空的 RelativeLayout,组件动态加入 -->
<RelativeLayout
android:id="@+id/rl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/darker_gray" >
</RelativeLayout>
</RelativeLayout>
MainActivity.java中的代码:
package alex_melody_boke.components_of_dynamic_control_relativeLayout;
import android.app.Activity;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.Gravity;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class MainActivity extends Activity {
private RelativeLayout rl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 找到XML中的的RelativeLayout
rl = (RelativeLayout) findViewById(R.id.rl);
// 这是单个View的的控制
singleView();
// 这是对多个View之间位置的控制
MultipleView();
// 这是多个View之间位置的控制
}
private void singleView() {
// 加入一个TextView,先是创建一个TextView出来
TextView tv = new TextView(getApplicationContext());
// 这个是设置组件的长度和长度和宽度,单位是PX
tv.setLayoutParams(new LayoutParams(250, 50));
tv.setText("Alex_Melody");
tv.setTextSize(20);
tv.setGravity(Gravity.CENTER);
// 以上几个只是给组件设置一下熟悉,不是这篇博客的学习重点
// 将创建出来的tv加入到RelativeLayout中,切记,在获取View的父布局的之前要先加入
rl.addView(tv);
RelativeLayout.LayoutParams tv_params = (RelativeLayout.LayoutParams) tv
.getLayoutParams();
// 相当于android:layout_centerInParent="true"
tv_params.addRule(RelativeLayout.CENTER_IN_PARENT);
// 相当于android:layout_alignParentTop="true"
tv_params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
}
private void MultipleView() {
// 创建一个TextView
TextView tv = new TextView(getApplicationContext());
// 给组件设置id,这个比较关键,因为RelativeLayout是以id放置组件的位置,id可以随便填写
tv.setId(11);
// 设置TestView的属性
tv.setLayoutParams(new LayoutParams(250, 50));
tv.setText("中间");
tv.setTextSize(20);
tv.setGravity(Gravity.CENTER);
// 将TextView加入到相对布局中,并将它设置在布局中间
rl.addView(tv);
RelativeLayout.LayoutParams tv_params = (RelativeLayout.LayoutParams) tv
.getLayoutParams();
// 相当于android:layout_centerInParent="true" 将TestView放置在布局中央
tv_params.addRule(RelativeLayout.CENTER_IN_PARENT);
// 创建一个图片View
ImageView iv = new ImageView(getApplicationContext());
// 重要所以先做,设置id
iv.setId(22);
// 设置iv的各自属性
iv.setLayoutParams(new LayoutParams(200, 200));
iv.setImageBitmap(BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher));
rl.addView(iv);
RelativeLayout.LayoutParams iv_params = (RelativeLayout.LayoutParams) iv
.getLayoutParams();
// 相当于android:layout_toLeftOf="@id/11"
iv_params.addRule(RelativeLayout.LEFT_OF, tv.getId());
// iv_params.addRule(RelativeLayout.LEFT_OF, 11);//可以直接填tv的id
// 相当于 android:layout_centerVertical="true"
iv_params.addRule(RelativeLayout.CENTER_VERTICAL);
// 创建一个Button
Button btn = new Button(getApplicationContext());
// 设置btn的各种属性
btn.setId(33);
btn.setText("Button");
btn.setLayoutParams(new LayoutParams(350, 80));
btn.setGravity(Gravity.CENTER);
rl.addView(btn);
RelativeLayout.LayoutParams btn_params = (RelativeLayout.LayoutParams) btn
.getLayoutParams();
btn_params.addRule(RelativeLayout.BELOW, tv.getId());
// 相当于android:layout_centerHorizontal="true"
btn_params.addRule(RelativeLayout.CENTER_HORIZONTAL);
}
}
注释已经打得相当的详细,有不懂的看看注释应该也是能看懂了。
源码下载
最后附上源码供大家学习交流点击下载源码
大家如果遇到什么问题或者代码出现什么问题。请留言。