Android ListView Варианты макета элемента - PullRequest
0 голосов
/ 14 октября 2019

У меня есть ListView (переместится в RecyclerView) с XML-макетом элемента ListView, который содержит 3 TextViews внутри LinearLayout. Мои пользовательские настройки допускают использование как левой, так и правой рукой. В этом случае я хочу изменить порядок текстовых представлений в файле макета элемента.

Какой здесь предпочтительный шаблон проектирования? Как мне это сделать?

  1. Создаю ли я два разных файла XML-элемента Item, один для левой руки и один для правой? Это похоже на дублирование усилий с одинаковыми TextViews, дублированными в разных файлах макета XML;просто меняя порядок.
  2. Программно ли я изменяю порядок текстовых представлений в коде? Как?
  3. Есть ли какой-то другой способ, о котором я не знаю?

Просто хочу учиться и делать это правильно.

Ответы [ 3 ]

1 голос
/ 14 октября 2019

Вы можете попробовать иметь 2 набора TextViews в одном макете XML. Изменение видимости для них сделает трюк для левшей или правшей. Но, в любом случае, это дублирование зрения.

Или вы можете использовать ConstraintLayout и изменить ConstraintSet для представлений программно, в зависимости от того, какое предпочтение выбрано.

val constrSet = ConstraintSet()
constrSet.clone(parentLayout)
constrSet.connect(textView1.id, ConstraintSet.END, textView2.id, ConstraintSet.START)
constrSet.applyTo(parentLayout)
0 голосов
/ 14 октября 2019

Вы можете сохранить один файл макета и изменить его из кода (в зависимости от условий):

влево -> child.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);

вправо -> child.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END);

0 голосов
/ 14 октября 2019

Двойной пост, упомянутый Сэнди, сделал то, что я хотел, очень легко, без какого-либо дублирования XML-файлов или кода, чтобы изменить порядок. Спасибо всем, кто откликнулся и привел меня сюда. Я просто хотел убедиться, что я опубликовал то, что легко сработало для меня.

У меня есть вкладка с двумя различными ListViews, каждый со своими собственными XML-макетами ListItem, и это полностью изменило порядок в onCreateView для TabFragment. Java в основном макете и в каждом из макетов ListItem!

    // Inflate this Tab's checklist XML
    root = inflater.inflate(R.layout.tab_fragment, container, false);
    if (leftHanded) {
        LinearLayout linearLayout = root.findViewById(R.id.tabLinearLayout);
        linearLayout.setLayoutDirection(LinearLayout.LAYOUT_DIRECTION_RTL);
    }
...