【发布时间】:2012-02-25 21:11:55
【问题描述】:
我认为是一个相当简单的布局,结果却不是。
我在线性布局中有几行。
每一行都有一个“标题”、一个“标签”和一个“描述”。
描述出现在标题和标签下方,没有问题。
标题长度不定,应与左上角对齐。标签应该出现在标题的右侧(如果标题很短,则不一定是父级的右边缘)。如果在一行中没有足够的空间容纳两者,则标题应换行并为标签留出空间。
标签有自己的风格和行为,并且必须是独立于标题的元素。
在我有限的经验中,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,底部“行”是描述。这有与上述相同的问题。
接下来我尝试了带有 2 个 TableRows 的 TableLayout,但这不仅失败了,而且还显示了一些奇怪的怪癖,比如根本不渲染某些行,原因我不明白。关于 TableLayout 和 TableRow 的文档似乎有点稀疏,我找不到处理列的 XML 字段的 Java 等效项。
布局需要使用 Java,而不是 XML,原因太长且无趣,无法提及。
感谢任何见解。
TYIA。
/编辑
为了澄清要求,我能想到的最好的例子是 HTML。
<table>
<tr>
<td>title</td>
<td>tag</td>
</tr>
<tr>
<td colspan="2">description...</td>
</tr>
</table>
标签总是在标题的右边,但只在它需要的右边(取决于标题的宽度)。一旦将标签强制到最右边,标题就会换行。
【问题讨论】: