安卓動態控制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);
    }

}

註釋已經打得相當的詳細,有不懂的看看註釋應該也是能看懂了。

源碼下載

最後附上源碼供大家學習交流點擊下載源碼

大家如果遇到什麼問題或者代碼出現什麼問題。請留言。

發佈了24 篇原創文章 · 獲贊 14 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章