9

私は非常に基本的なレイアウトを作成しました:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Button"
            android:drawableStart="@drawable/ic_launcher" />

    </LinearLayout>
</RelativeLayout>

のドキュメントにdrawableStartよると、

「テキストの先頭に描画されるドローアブル。」

ただし、私の Android 4.0.4 携帯電話で実行すると、代わりに次のように表示されます。

ここに画像の説明を入力

アイコンとテキストの間にこんなに大きなギャップがあるのはなぜですか? この答えによると、

「Android 4.0 (API レベル 14) では、android:drawableStart 属性を使用して、ドローアブルをテキストの先頭に配置できます。」

しかし、これは私が観察する動作ではありません。属性が機能しないのはなぜですか?

4

2 に答える 2

6

始まりと終わりの誤解が多い。
レイアウト xml のStartEndは、レイアウトの方向 (LTR または RTL) に合わせて、に代わるものです。

したがって、ドキュメントに次のように記載されている場合:

「テキストの先頭に描画されるドローアブル。」

あなたは読む必要があります:

「レイアウト方向に従ってビューの先頭に描画されるドローアブル」

于 2013-09-18T08:42:14.693 に答える
0

その理由は、drawableStart の種類がボタンを複合レイアウトにするためです。つまり、Image ビューと TextView はすべて「ボタン」にラップされます...

したがって、表示されているのは、ImageView が Textview の前に配置されていることです。ただし、TextView にはデフォルトのレイアウト属性が設定されているため、残りのスペースの中央に描画されるため、ギャップが生じます (スペースの中央にあることに注意してください)。画像をテキストの先頭に置くことによって残されます)

そのため、基本的にボタン TextView の重力属性をオーバーライドする必要があります -

android:gravity="center_vertical|center_horizontal|left"

以下を参照してください。ボタンを 1 つのレイアウトでラップするだけで済み、もう 1 つのレイアウトは冗長です。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawableStart="@drawable/ic_launcher"
        android:gravity="center_vertical|center_horizontal|left"
        android:text="@string/app_name" />

</RelativeLayout>
于 2013-03-12T02:21:32.083 に答える