#android #listview #xamarin #listviewitem
#Android #listview #xamarin #listviewitem
Вопрос:
Я пытаюсь создать элемент listview, который состоит из textview и кнопки по горизонтали. Я хочу, чтобы текстовое представление было слева, а кнопка — справа. Кнопка всегда имеет одинаковый размер, поэтому я хочу, чтобы textview занимал все остальное пространство.
Моя проблема в том, что textview (если он содержит текст шире, чем экран) выталкивает кнопку за пределы экрана.
Я хочу, чтобы textview не выводил кнопку за пределы экрана — я хочу, чтобы кнопка всегда оставалась в правой части экрана, независимо от длины текста в textview. Если текст слишком длинный для отображения, я просто хочу отобразить как можно больше (например, overflow: hidden в HTML), не нажимая кнопку вправо.
Можно ли настроить мое представление для обработки этого или мне нужно выполнять всевозможные измерения ширины экрана, длины текста и т.д. и т.д.?
Вот мой элемент listview xaml:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stretchColumns="0">
<TableRow>
<TextView
android:id="@ id/tv_item_text"
android:text="(123456) Item Name"
android:paddingLeft="10dip"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="fill_vertical"
android:gravity="fill_vertical"
/>
<Button
android:id="@ id/btn_go"
android:layout_width="wrap_content"
android:text="Go"
android:textColor="@android:color/holo_blue_dark"
android:layout_gravity="fill_vertical"
android:gravity="center"
android:visibility="visible" />
</TableRow>
Я довольно новичок в Xamarin, поэтому, если кто-нибудь может мне помочь, я был бы очень признателен.
/ Aidal
Комментарии:
1. Почему вы используете TableLayout?
Ответ №1:
Я действительно не понимаю, почему люди думают, что использование TableLayout и вложение TableRow внутри него является хорошей практикой для элементов ListView / RecyclerView…
Почему вы не используете RelativeLayout, который указывает, что кнопка находится справа, и делает текстовое представление заполняющим остальное пространство?
Должно выглядеть примерно так:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp">
<Button
android:id="@ id/btn_go"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="Go"
android:textColor="@android:color/holo_blue_dark"
android:layout_alignParentRight="true" />
<TextView
android:id="@ id/tv_item_left"
android:layout_width="match_match"
android:layout_height="match_parent"
android:layout_toLeftOf="@id/btn_go"
android:layout_alignParentLeft="true" />
</RelativeLayout>
Комментарии:
1. Кажется, это работает, спасибо. и я думаю, что ответ на ваш вопрос содержится в последней строке моего сообщения.
2. Как и в HTML, Markdown и т. Д., Таблицы следует использовать для содержимого, а не для размещения макетов.
3. Хотя это визуально работает, мне все еще нужно кое-что сделать, чтобы заставить его работать так, как задумано. Предполагается, что это макет для элемента ListView, поэтому я предполагаю, что мне нужно что-то сделать, чтобы иметь возможность перехватить щелчок вне кнопки и на кнопке, потому что прямо сейчас я не могу перехватить ни одно из событий, просто используя ListView. Щелкните элемент. Я предполагаю, что мне нужно сделать некоторое переопределение в ListViewAdapter?
4. ДА. Взгляните на
ViewHolder
шаблон. Будьте осторожны, чтобы не присоединять слишком много обработчиков событий к нажатию кнопки. Также для того, какие события запускаются первыми при щелчке, посмотрите:android:descendantFocusability