安卓動態控制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);
}
}
註釋已經打得相當的詳細,有不懂的看看註釋應該也是能看懂了。
源碼下載
最後附上源碼供大家學習交流點擊下載源碼
大家如果遇到什麼問題或者代碼出現什麼問題。請留言。