Nano Hash - криптовалюты, майнинг, программирование

LinearLayout с 3 дочерними элементами переменной размерности

У меня возникла проблема с созданием макета Android XML с тремя дочерними элементами (два из них с переменным размером), имеющим приоритет одного из этих дочерних элементов при охвате его ширины.

<LinearLayout
    android:id="@+id/LinearLayout"
    android:layout_height="wrap_content"
    android:layout_width="match_parent" >

    <TextView
        android:id="@+id/firstTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:ellipsize="end"
        android:text="bla 1 bla 1 bla 1" />

    <TextView
        android:id="@+id/secondTextView"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text=", " />

    <TextView
        android:id="@+id/thirdTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:text="bla 2 bla 2 bla 2"/>

</LinearLayout>

Проблема в том, что мне нужно, чтобы это отображалось так: «bla 1 bla 1 bla 1, bla 2 bla 2 bla 2». С требованием, чтобы при нехватке места только firstTextView уменьшал свою ширину (что-то вроде: "bla 1 bla..., bla 2 bla 2 bla 2"). Имейте в виду, что ThirdTextView имеет переменную ширину, поэтому он может содержать только "bla 2" и должен находиться рядом со secondTextView, который, в свою очередь, должен быть справа от firstTextView.

Я пытаюсь избежать программной настройки ширины.

Спасибо.

14.08.2013

  • Ваш LinearLayout не указывает ориентацию. 14.08.2013
  • Это не обязательно. По умолчанию он горизонтальный (что и предполагалось). 14.08.2013

Ответы:


1

Попробуйте это на своем первом textView:

android:layout_width="0dp"
 android:layout_weight="1"

Это заставит View занять оставшееся место, когда 2 других будут обернуты своим содержимым.

14.08.2013

2

Убедитесь, что каждое представление добавляет layout_weight, например:

android:layout_weight="1"

Вы также можете поиграть со значением вместо одного и получить разные размеры просмотров.

14.08.2013

3

Вы должны быть в состоянии выполнить это, используя атрибут layout_weight для этих представлений. layout_weight определяет, как лишние, т. е. неиспользуемые, пиксели распределяются между представлениями. Это позволяет вам установить вес, например процент, того, как этим просмотрам будут выделены неиспользуемые пиксели.

Поскольку вы используете эти представления в горизонтальной строке, установите layout_width тех, которые вы хотите иметь с переменным размером, равным 0dp. Затем добавьте атрибут layout_weight, чтобы настроить изменение размера, пока он не будет выглядеть так, как вы хотите.

14.08.2013
  • Я пытался работать с весами, дело в том, что (поскольку текстовые представления будут занимать дополнительное пространство) текст не будет отображаться так, как предполагалось, то есть бла 1 бла 1 бла 1, бла 2 бла 2 бла 2. Это будет разнесено от первого TextView до второго TextView, а затем до третьего TextView. 14.08.2013
  • Я не уверен, что ты имеешь в виду. Если вы установите layout_weight только для дочерних элементов переменного размера, только они будут скорректированы, чтобы занять неиспользуемое пространство. Если вы просто используете layou_width=wrap_content для тех, которые вы не хотите расширять, они не будут расширяться, чтобы заполнить пространство. 14.08.2013
  • Только у второго TextView не будет меняться содержимое. И первое, и третье текстовые представления будут. Установив вес для этих двух текстовых представлений, если места более чем достаточно, первое текстовое представление расширит свою ширину, что приведет к промежутку между первым и вторым текстовыми представлениями (нарушение отображения bla 1 bla 1 bla 1, bla 2 bla 2 bla 2 это притворяется). 14.08.2013
  • Разве вы не можете просто управлять позиционированием текста в представлении с помощью gravity? Если вы пытаетесь создать иллюзию того, что представление1 является частью представления2, так что запятая является частью предложения, можете ли вы выровнять текст по правому краю, чтобы он находился напротив этой стороны представления, а не слева или по центру? 14.08.2013
  • Я так не думаю. Желательно, чтобы три текстовых представления были частью одного предложения. Я не думаю, что смогу сделать это, просто отрегулировав гравитацию, поскольку она оставлена ​​​​для всех из них, потому что я хочу, чтобы содержимое всех трех текстовых представлений было в последовательности. Регулировка гравитации вправо добавит еще одну проблему, когда слишком много места. 14.08.2013
  • тогда почему бы не использовать 5 текстовых представлений - 3, которые вы теперь все установили для переноса содержимого, а затем два наполнителя - по одному с каждой стороны - установите ширину 0dp и вес 1. Таким образом, эти 2 разделят незаполненное пространство поровну, а остальные останутся вместе 14.08.2013

  • 4

    Я предполагаю, что вы захотите указать ориентацию LinearLayout:

    android:orientation="horizontal"
    

    Но также попробуйте использовать веса в своих TextView:

    android:layout_weight="1"
    

    (особенно во 2-м и 3-м TextViews. Попробуйте также другие значения вместо «1», чтобы проверить).

    Кроме того, если вы хотите растянуть столбцы, попробуйте использовать TableLayout, как в этот пост.

    14.08.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..