11

各密度に 9 パッチを必要とすることから、XML ドローアブルのみを使用することまで、いくつかのグラフィックを簡素化しようとしています。これはかなり単純なグラフィックです。

9 パッチのドローアブル

2 つのセグメント:

  • 両方のセグメントで幅 8 dp
  • 上部セグメントの高さは 2 dp です
  • 下部セグメントがビューを埋めます
  • 右側は透明で塗りつぶされています

背景画像として設定すると、次の結果が得られます。

リスト項目の例として 9 パッチ

これを XML ドローアブルとして再作成するのは非常に簡単で、5 つの異なる 9 パッチ グラフィックスを作成する必要がないように思われます。ただし、レイヤーリストのドローアブル、インセットのドローアブル、クリップのドローアブルを調べました-それらはすべて、事前にビューのサイズを知っている必要があるようです(たとえば、インセットで2dpに保つには、に設定insetRightする必要がありますビューの幅 - 2dp)。shapeタグのタグも使用してみましsizeたが、それは固定サイズを維持せず、固定比率を維持します (したがって、背の高いビューでは比例してスケーリングされます)。

私は単純なものを見落としていますか、それともレイアウト後にプログラムでチェックする必要がありますか?

4

3 に答える 3

4

これは不可能です。これが私が見つけた最良の解決策です。xml のみ、コーディングなし、ビットマップなし、追加のビューなし)

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">

        <solid
            android:color="#ff0000" />
    </shape>
</item>
<item
    android:top="4dp">
    <shape
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">

        <solid
            android:color="#00ff00" />
    </shape>
</item>

<item
    android:left="10dp">
    <shape
        android:shape="rectangle">
        <solid
            android:color="#FFFFFF" />
    </shape>
</item> 
</layer-list>

ここに画像の説明を入力

コードを介して、目的の動作を持つ独自のドローブル タイプを作成できます。Xml ドローアブルは非常に限られています。IMHO 私の提案は、あなたが要求したものに最も近いものです。

于 2013-02-01T09:05:08.763 に答える
2

リストの詳細レイアウト全体の背景ではなく、別のビューとしてドローアブルを使用していることを除いて、@Leonidosによる答えは私が提案しているものに非常に近いと思います。これにより、幅を固定し、アイテムのテキストに独自の背景を持たせることができます。あなたの制約を理解していない場合はお知らせください。

以下のファイルは「res/drawable/list_left_border」

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item>
        <shape android:shape="rectangle" >
            <solid android:color="#e76e63" />
        </shape>
    </item>
    <item android:top="2dp">
        <shape android:shape="rectangle" >
            <solid android:color="#ffc257" />
        </shape>
    </item>

</layer-list>

次に、「res/layout/list_item.xml」のリスト項目のレイアウトについて

<LinearLayout 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"
    android:orientation="horizontal"
    tools:context=".MainActivity" >

    <View
        android:background="@drawable/list_left_border"
        android:layout_width="8dp"
        android:layout_height="match_parent" />

    <TextView
        android:id="@+id/listItemText"
        android:textSize="15sp"
        android:padding="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

これが画像です。リスト項目が透明であることを示すために、背景はピンク色になっています。

ここに画像の説明を入力

于 2013-02-01T15:37:13.143 に答える
2

さらに進んで、レオニドスの回答を含む AndroidGuy の回答を少し作り直すことを提案します。

次のように、同じドローアブル XML、異なるリスト アイテム XML:

<LinearLayout 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"
android:orientation="vertical"
tools:context=".MainActivity" >

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="100sp">

    <ImageView
        android:layout_width="8dp"
        android:layout_height="match_parent"
        android:src="@drawable/list_left_border" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:text="Item Text"
        android:textSize="22sp" >
    </TextView>
</FrameLayout>

FrameLayout は、新しいビューに分離するのではなく、元の背景の動作を提供します。

これを以下に示しました。背景を示します。

図

ただし、これは実際にはポイントに値しません。

于 2013-02-04T14:35:43.037 に答える