今天想用java代碼寫一個(gè)在RelativeLayout里面位置在某個(gè)View下面居中的View,平時(shí)都是用xml代碼實(shí)現(xiàn),非常簡單,用layout_below屬性就可以輕松實(shí)現(xiàn)了。于是想當(dāng)然的在java代碼里面也是這樣寫:
ImageView guide1 = new ImageView(this);
ImageView ib_know = new ImageView(this);
ib_know.setImageResource(R.mipmap.known);
RelativeLayout.LayoutParams guide1_lp = new RelativeLayout.LayoutParams(
ViewUtil.dp2px(this, 328), ViewUtil.dp2px(this, 137));
guide1_lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
guide1_lp.setMargins(0, ViewUtil.dp2px(this, 164), 0, 0);
rl_guide.addView(guide1, guide1_lp);
int ivKnown_width = ViewUtil.dp2px(this, 97);
int ivKnown_height = ViewUtil.dp2px(this, 48);
RelativeLayout.LayoutParams ivKnown_lp = new RelativeLayout.LayoutParams(ivKnown_width, ivKnown_height);
int ivKnown_topMargin = ViewUtil.dp2px(this, 75);
ivKnown_lp.setMargins(0, ivKnown_topMargin, 0, 0);
//設(shè)置按鈕水平居中置底
ivKnown_lp.addRule(RelativeLayout.BELOW, guide1.getId());
ivKnown_lp.addRule(RelativeLayout.CENTER_HORIZONTAL);
rl_guide.addView(ib_know, ivKnown_lp);
但是結(jié)果ib_know 并沒有顯示在guide1下面,而是顯示在了默認(rèn)位置,設(shè)置RelativeLayout.BELOW并沒有生效。
為什么呢?呵呵,經(jīng)過查找解決辦法,知道原來這里沒有給guide1設(shè)置id,所以它的id值默認(rèn)為-1,所以不生效,那么
ImageView guide1 = new ImageView(this);
guide1.setImageResource(R.mipmap.guide_view_money_transfer);
if (Build.VERSION.SDK_INT >= 17) {
guide1.setId(View.generateViewId()); //此代碼要在api level 17以上才能生效
}else{
guide1.setId(R.id.home_fragment_guide_view); //api level在17以下的就在values/ids.xml里配置id
}
ImageView ib_know = new ImageView(this);
ib_know.setImageResource(R.mipmap.known);
RelativeLayout.LayoutParams guide1_lp = new RelativeLayout.LayoutParams(
ViewUtil.dp2px(this, 328), ViewUtil.dp2px(this, 137));
guide1_lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
guide1_lp.setMargins(0, ViewUtil.dp2px(this, 164), 0, 0);
rl_guide.addView(guide1, guide1_lp);
//設(shè)置按鈕的寬高,間距
int ivKnown_width = ViewUtil.dp2px(this, 97);
int ivKnown_height = ViewUtil.dp2px(this, 48);
RelativeLayout.LayoutParams ivKnown_lp = new RelativeLayout.LayoutParams(ivKnown_width, ivKnown_height);
int ivKnown_topMargin = ViewUtil.dp2px(this, 75);
ivKnown_lp.setMargins(0, ivKnown_topMargin, 0, 0);
//設(shè)置按鈕水平居中置底
ivKnown_lp.addRule(RelativeLayout.BELOW, guide1.getId());
ivKnown_lp.addRule(RelativeLayout.CENTER_HORIZONTAL);
rl_guide.addView(ib_know, ivKnown_lp);
完美解決。