web-dev-qa-db-ja.com

TextViewの箇条書きリストをインデント

私は、strings.xmlの文字列リソースからのテキストを入力するTextViewを持っています。文字列リソースには、TextView内に箇条書きを作成するための<li>要素が含まれています。私の問題は、複数行にまたがる箇条書きの行のインデントを制御したいことです。デフォルトでは、テキストは箇条書きを超えてインデントされないため、見た目が醜いです。これをスタイルパラメータで行うことや、他の方法で箇条書きを作成することは可能ですか?

前もって感謝します。

編集:それは本当に答えられましたか?これらのリンクで説明されているように、箇条書きリストの作成に問題はありませんが、レイアウトを正しく取得することに問題があります。インデントは次のようになります。

  • 幅を超えるテキスト
    行の。

そして、「行の」は、少なくとも箇条書きの後のテキストまでインデントを開始する必要があります。それが私が達成しようとしていることです。

29
Björn

この問題を抱えている人は誰もいないようだと私は驚いています。つまり、箇条書きはabout-dialogs、FAQなどで珍しいことではありません。また、箇条書きに複数の行にまたがってこの問題が発生するほど多くのテキストを含める必要はありません。 。

とにかく、今のところこのように解決する必要があります。

<?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>

箇条書きリストに静的テキストを表示するために使用するので、コードで箇条書きとテキストを動的に作成する必要はありません。誰かが同じことをより良い方法で達成する方法について何か提案があれば、私に教えてください。

ところで、上記の2番目のリンクで提案されたソリューションを使用する場合:

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

箇条書きの2行目、3行目などの行が複数行にわたる場合、最初の行と同じインデントは得られません。

23
Björn

ありがとう@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>
5
Dharmik

この問題を解決する方法は、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>
0
Shygar

質問の主な答えを指摘するだけです:

  • 箇条書きリストを作成するには、各行に2つの列があるTableLayoutを使用します。箇条書きのTextViewの1つの列と、テキストのもう1つの列
  • テキストTextViewを空にするにはTableRowを空にして新しい行でインデントし、重みを1に設定します。弾丸の重みを0に設定するか、単に弾丸の重みを設定せずにそのままにします。空の
  • 私の経験に基づくと、幅パラメータを変更してもテキストと箇条書きには影響しません。そのため、空のままにするか、必要に応じて設定できます。

例:

<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>