android布局适配layout失效,小明的困惑:RelatvieLayout 设置 layout_height="wrap_content" 失效...

本文讲述 RelativeLayout 的 height 设置为 wrap_content,子控件的位置是 ALIGN_PARENT_BOTTOM 等相对父控件的设置时,导致wrap_content 的问题。

1. 场景还原

头上长草的小明接手了一段代码,该代码的作用是动态的显示从后台返回的文本数据。

首先是一个很简单的布局文件:

to_show_text_layout.xml

然后是对应的MainActivity:

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.to_show_text_layout);

TextView text = (TextView) findViewById(R.id.bannerView);

text.setText(getTextFromHttp());

}

}

小明认为,将 RelativeLayout 的 layout_height 设置为固定的 38dp 是不合理的,因为后台返回的文本长度未知,代码也没有对长度做截断处理。如果文本过长,肯定会出现文本溢出规定区域的现象。

于是,小明顺手将 38dp 改为“wrap_content”,心中甚至得意。运行一看,傻眼了,该 RelativeLayout 竟然铺满全屏了——这不科学!

0818b9ca8b590ca3270a3433284dd417.png

2. 问题原因

显然,这种诡异的问题是 RelativeLayout 引发的。我们看下其官方文档:

A Layout where the positions of the children can be described in relation to each other or to the parent.

Note that you cannot have a circular dependency between the size of the RelativeLayout and the position of its children. For example, you cannot have a RelativeLayout whose height is set to WRAP_CONTENT and a child set to ALIGN_PARENT_BOTTOM.

文档说了,如果 RelativeLayout 的 height 是 wrap_content,而且它的子控件是 ALIGN_PARENT_BOTTOM,就会产生 circular dependency。

小明捋了捋头上草,点了点头。

0818b9ca8b590ca3270a3433284dd417.png

3. 解决办法

解决方法有2:

1. 将 RelativeLayout 替换成 LinearLayout 等其他布局;

2. 保持 RelativeLayout,删除导致 circular dependency 的属性(android:layout_alignParentTop 等),将其子控件布局改为:

0818b9ca8b590ca3270a3433284dd417.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值