Xamarin Android textview в пределах границ

#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