美文网首页
用java代码写RelativeLayout的layout_be

用java代码写RelativeLayout的layout_be

作者: Stephen__Li | 来源:发表于2017-08-17 17:24 被阅读99次

今天想用java代码写一个在RelativeLayout里面位置在某个View下面居中的View,平时都是用xml代码实现,非常简单,用layout_below属性就可以轻松实现了。于是想当然的在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);
//设置按钮水平居中置底
ivKnown_lp.addRule(RelativeLayout.BELOW, guide1.getId());
ivKnown_lp.addRule(RelativeLayout.CENTER_HORIZONTAL);
rl_guide.addView(ib_know, ivKnown_lp);

但是结果ib_know 并没有显示在guide1下面,而是显示在了默认位置,设置RelativeLayout.BELOW并没有生效。

为什么呢?呵呵,经过查找解决办法,知道原来这里没有给guide1设置id,所以它的id值默认为-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);

//设置按钮的宽高,间距
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);
//设置按钮水平居中置底
ivKnown_lp.addRule(RelativeLayout.BELOW, guide1.getId());
ivKnown_lp.addRule(RelativeLayout.CENTER_HORIZONTAL);
rl_guide.addView(ib_know, ivKnown_lp);

完美解决。

相关文章

  • 用java代码写RelativeLayout的layout_be

    今天想用java代码写一个在RelativeLayout里面位置在某个View下面居中的View,平时都是用xml...

  • APP 高级重启 - 开发笔记

    用Java调用shell命令实现,界面用Java写的。只是一个练手的小项目,代码写的不好。而且有些系统不能正常使用...

  • 1.传送配对字段数据

    1.在Android中,我们用java代码写activity跳转的时候代码如下: 2.对应的kotlin代码如下:...

  • Kotlin

    我们一直用JAVA写代码,现在学了Kotlin,怎么用Kotlin怎么进行MVP抽取呢? 直接上代码! 各种bas...

  • Scala IO

    Scala 进行文件写操作,直接用的都是 java中 的 I/O 类 (java.io.File): 执行以上代码...

  • 约束布局

    Android 代码动态布局 LayoutParams 使用 >>RelativeLayout **Relativ...

  • Android 自定义高宽比布局

    直接上代码(代码可直接复制使用) 新建RatioRelativeLayout 继承RelativeLayout 在...

  • Java获取网页内容

    以前都是用python写爬虫,这次使用java。代码虽然多了点,不过还是静态类型语言代码提示舒心点。获取网页源代码...

  • golang xorm mysql代码生成器

    原来的代码生成器都是用java写的,心血来潮,把其中的生产golang数据层的代码,用golang实现了一下。 主...

  • new都干了些什么

    用Java写代码的时候,感觉用的最多的便是new了吧,这几天在恶补Java基础知识的时候突然想到,我们在new一个...

网友评论

      本文标题:用java代码写RelativeLayout的layout_be

      本文链接:https://www.haomeiwen.com/subject/dcdnrxtx.html