安卓动态控制RelativeLayout的组件

安卓动态控制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);
    }

}

注释已经打得相当的详细,有不懂的看看注释应该也是能看懂了。

源码下载

最后附上源码供大家学习交流点击下载源码

大家如果遇到什么问题或者代码出现什么问题。请留言。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值