用java代碼寫RelativeLayout的layout_below邏輯,你不知道的坑

今天想用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);

完美解決。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,007評論 25 709
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,325評論 0 17
  • 先說一下這篇文章里面的內(nèi)容:TCP 客戶端, 自定義對話框, 自定義按鈕, ProgressBar豎直顯示, 重力...
    楊奉武閱讀 3,934評論 0 3
  • 鼓勵(lì)孩子是一種需要掌握的技能;父母若要擁有鼓勵(lì)孩子的品質(zhì),就必須善于觀察孩子的內(nèi)心世界,始終堅(jiān)守這一信念,并把它傳...
    瓖書小語閱讀 165評論 0 0
  • 人首先是社會(huì)的人。人際關(guān)系是避免不了,也是十分必要的。魯濱遜在荒島上能堅(jiān)持度過那么多年,與后來星期五的存在不無關(guān)系...
    肖玉坤閱讀 2,424評論 0 1

友情鏈接更多精彩內(nèi)容