То, что я думал, было бы довольно простым макетом, не получается.
У меня есть несколько строк в линейном макете.
Каждая строка имеет "заголовок", "tag "and a" description ".
Описание отображается под заголовком и тегом и не вызывает проблем.
Заголовок имеет неопределенную длину и должен быть выровнен по левому верхнему углу.Тег должен отображаться выровненным по правому краю заголовка (не обязательно по правому краю родителя, если заголовок короткий).Если в одной строке недостаточно места для обоих, заголовок должен переноситься и оставлять место для тега.
Тег имеет свой собственный стиль и поведение и должен быть отдельным элементом от заголовка.
В моем ограниченном опыте мне больше всего повезло с 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);
}
}
Длинные заголовки вынудили бы метку за пределы экрана.
* 1017Затем я попытался использовать вложенный LinearLayouts - основной контейнер в виде LinearLayout с вертикальной ориентацией, в котором «верхняя строка» представляла собой горизонтальный LinearLayout, содержащий заголовок и тег, а нижняя «строка» являлась описанием.Это было той же проблемой, описанной выше.
Затем я попробовал TableLayout с двумя TableRows, но это не только не удалось, но и показало странные причуды, такие как не рендеринг определенных строк вообще, по причинам, которые я не понимаю.Документация по TableLayout и TableRow кажется немного скудной, и я не смог найти Java-эквиваленты полей XML, относящихся к столбцам.
Макет должен быть на Java, а не на XML, по слишком долгим причинами неинтересно упоминать.
Любое понимание приветствуется.
TYIA.
/ EDIT
, чтобы прояснить требование, лучший пример, который я могу придуматьбудет в HTML.
<table>
<tr>
<td>title</td>
<td>tag</td>
</tr>
<tr>
<td colspan="2">description...</td>
</tr>
</table>
тег всегда находится справа от заголовка, но только настолько далеко, насколько это необходимо (в зависимости от ширины заголовка).заголовок будет перенесен, как только тег станет крайним правым.