我认为这将是一个相当简单的布局并不是事实。Android布局 - 右对齐,没有包装和预留空间
我在线性布局中有几行。
每行都有一个“标题”,“标记”和“描述”。
该描述出现在标题和标签下面,没有问题。
标题是不确定的长度,应该对齐左上角。标签应显示为与标题右侧对齐(如果标题较短,则不一定是父级的右侧边缘)。如果在一条线上没有足够的空间容纳两者,则标题应该换行并为标签留出空间。
该标签具有自己的风格和行为,并且必须是标题中的单独元素。
在我有限的经验,我有过的最运气RelativeLayouts,所以这是我第一次尝试:
import android.content.Context;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class ExampleRow extends RelativeLayout {
private TextView title;
private TextView description;
private TextView tag;
public ExampleRow(Context context) {
super(context);
LayoutParams lp;
lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
title = new TextView(context);
title.setId(1);
addView(title, lp);
lp = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.BELOW, title.getId());
description = new TextView(context);
description.setId(2);
addView(description, lp);
lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.RIGHT_OF, title.getId());
lp.addRule(RelativeLayout.ABOVE, description.getId());
lp.setMargins(20, 0, 0, 0);
tag = new TextView(context);
addView(tag, lp);
}
}
长标题将强制关闭屏幕的标签。
然后我尝试嵌套LinearLayouts - 主容器作为垂直方向的LinearLayout,它有一个“顶行”,它是一个包含标题和标记的水平LinearLayout,底部“行”是描述。这与上述相同。
接下来我尝试了TableLayout和2个TableRows,但是这不仅失败了,而且还显示出奇怪的怪癖,就像我根本不理解的原因,根本不渲染某些行。 TableLayout和TableRow上的文档似乎有点稀疏,我无法找到处理列的XML字段的Java等价物。
布局需要使用Java而不是XML,原因是太长而且没有兴趣提及。
任何洞察力是赞赏。
TYIA。
/EDIT
澄清的要求,我能想到的将是HTML最好的例子。
<table>
<tr>
<td>title</td>
<td>tag</td>
</tr>
<tr>
<td colspan="2">description...</td>
</tr>
</table>
标签总是在标题的右侧,但只有在它需要的时候才是正确的(取决于标题宽度)。标题会在它将标签强制到最右端时进行包装。
标签需要在标题的右侧,不一定是父母的权利(除非标题太长)。我编辑了我的问题以更好地解释要求。 – momo 2012-02-25 21:34:32
@BigMoMo我已经更新了我的答案。 – Luksprog 2012-02-26 11:12:56
太好了,谢谢。 +1的收缩/拉伸/跨度成员,我找不到 – momo 2012-02-26 19:55:13