Список отступов в TextView - PullRequest
       10

Список отступов в TextView

29 голосов
/ 15 сентября 2010

У меня есть TextView, который я заполняю текстом из строковых ресурсов в strings.xml.Строковый ресурс содержит элементы

для создания списка маркеров внутри TextView.Моя проблема заключается в том, что я хочу контролировать отступ строк в списке маркеров, который занимает более одной строки.По умолчанию текст не идет с отступом от маркера, поэтому выглядит немного уродливо.Возможно ли это сделать с помощью параметров стиля или создать маркеры каким-либо другим способом?

Заранее спасибо.

edit: Это действительно ответ?У меня нет проблем с созданием списка маркеров, как описано в этих ссылках, но у меня возникают проблемы с правильным макетом.Отступы таковы:

  • текст, выходящий за пределы ширинылинии.

И я хочу, чтобы "строка" по крайней мере начиналась с отступа до текста после маркера.Вот чего я пытаюсь достичь.

Ответы [ 4 ]

23 голосов
/ 06 октября 2010

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

В любом случае, я должен решить это сейчас так:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    android:id="@+id/ScrollViewTipsLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:id="@+id/TipsLayout"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content">

        <TableLayout
        android:layout_height="wrap_content"
        android:id="@+id/TableLayout01"
        android:layout_width="wrap_content"
    >
        <TableRow>
            <TextView android:id="@+id/tvIngress"
                android:layout_height="wrap_content" 
                android:layout_width="wrap_content" 
                android:text="@+string/tv_picking_content_ingress"
                android:layout_span="2"
                android:singleLine="false"
                android:layout_weight="1"
            />
        </TableRow>
        <TableRow>
            <TextView android:id="@+id/tvCleaningDot1"
                android:layout_height="wrap_content" 
                android:text="•"
                android:singleLine="false"
            />
            <TextView android:id="@+id/tvCleaningFirst"
                android:layout_height="wrap_content" 
                android:text="@+string/tv_picking_content_first" 
                android:layout_width="0dp"
                android:layout_weight="1"
                android:gravity="left"
                android:singleLine="false" 
            />
        </TableRow>
            <TextView android:id="@+id/tvCleaningDot2"
                android:layout_height="wrap_content" 
                android:text="•"
                android:singleLine="false"
            />
            <TextView android:id="@+id/tvCleaningSecond"
                android:layout_height="wrap_content" 
                android:text="@+string/tv_picking_content_second" 
                android:layout_width="0dp"
                android:layout_weight="1"
                android:gravity="left"
                android:singleLine="false"
            />
        </TableRow>
    </TableLayout>
</RelativeLayout>

Я использую его для представления статического текста в списке маркеров, чтобы не беспокоиться о динамическом создании маркера + текста в коде. Если у кого-нибудь есть предложения, как сделать то же самое лучше, пожалуйста, просветите меня.

Кстати, если идти с решением, предложенным во второй ссылке выше:

android:text="<ol><li>item 1\n</li><li>item 2\n</li></ol>

Второй, третий и т. Д. Ряд в маркере, занимающий более одного ряда, не получит того же отступа, что и первая строка, что довольно уродливо.

5 голосов
/ 17 мая 2013

Спасибо, @BjornВы также можете сделать что-то вроде ниже.

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
        <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableLeft="@drawable/point"
        android:textAppearance="?android:attr/textAppearanceSmall"
         />

        <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"                
        android:text="Your Text Here"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textSize="14sp" />
</LinearLayout>
0 голосов
/ 10 сентября 2012

Просто пытаясь указать ключевой ответ на вопрос:

  • , чтобы создать список маркеров, используйте TableLayout с двумя столбцами для каждой строки.В одном столбце для TextView маркера и в другом для текста
  • , чтобы сделать текст TextView, заполните оставшиеся пустыми TableRow и с отступом в новой строке, установите вес 1. Вы можете установитьвес пули равен нулю или просто не устанавливайте вес пули и оставьте его пустым
  • , исходя из моего опыта, изменение параметра ширины не влияет на текст и марку.Таким образом, вы можете оставить его пустым или установить его на любое значение.

Пример:

<TableLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TableRow
        android:id="@+id/tableRow1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/bullet"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/bullet"/>
        <TextView
            android:id="@+id/TextView01"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="this is the text of a bullet list"/>
    </TableRow>
</TableLayout>
0 голосов
/ 26 февраля 2012

Я решил эту проблему, используя RelativeLayout и marginLeft. MarginLeft поместит пустое поле между ним и предыдущим элементом.

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scrollbarTrackVertical="@drawable/scrollbar_vertical_track"
        android:scrollbarThumbVertical="@drawable/scrollbar_vertical_thumb"
        android:scrollbarSize="12dip">

<RelativeLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10sp">

    <TextView
        android:id="@+id/body_text3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:lineSpacingExtra="3sp"
        android:text="Main paragraph of text, before the bulleted list"
        android:textSize="15sp" />
    <TextView
        android:id="@+id/type1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:lineSpacingExtra="3sp"
        android:text="• First bullet"
        android:textSize="15sp"
        android:layout_below="@+id/body_text3"
        android:layout_marginLeft="25dp" />
    <TextView
        android:id="@+id/type2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:lineSpacingExtra="3sp"
        android:text="• Second bullet"
        android:textSize="15sp"
        android:layout_below="@+id/type1"
        android:layout_marginLeft="25dp" />
</RelativeLayout>

</ScrollView>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...