98

私はこのコードを持っています:

<ListView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/cashItemsList"
     android:cacheColorHint="#00000000"
     android:divider="@drawable/list_divider"></ListView>

どこに@drawable/list_dividerある:

<shape
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:shape="line">
 <stroke
   android:width="1dp"
   android:color="#8F8F8F"
   android:dashWidth="1dp"
   android:dashGap="1dp" />
</shape>

しかし、仕切りが見えません。

4

12 に答える 12

176

皆さん、1dp または 1dip の代わりに 1px を使用する理由は次のとおりです。1dp または 1dip を指定すると、Android はそれを縮小します。120 dpi のデバイスでは、0.75 ピクセルが変換されたようなものになり、0 に丸められます。一部のデバイスでは、2 ~ 3 ピクセルに変換され、通常は見苦しくまたは雑に見えます。

ディバイダーの場合、1 ピクセルのディバイダーが必要な場合は 1px が適切な高さであり、「すべてをディップにする」ルールの例外の 1 つです。すべての画面で 1 ピクセルになります。さらに、通常、1px は hdpi 以上の画面でよりよく見えます

「もう 2012 年ではない」編集: 特定の画面密度から dp/dip に切り替える必要がある場合があります

于 2012-08-21T19:21:15.897 に答える
56

これは回避策ですが、私にとってはうまくいきます:

次のように res/drawable/divider.xml を作成しました。

<?xml version="1.0" encoding="UTF-8"?>
<shape
  xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient android:startColor="#ffcdcdcd" android:endColor="#ffcdcdcd" android:angle="270.0" />
</shape>

また、リストビュー アイテムの styles.xml に、次の行を追加しました。

    <item name="android:divider">@drawable/divider</item>
    <item name="android:dividerHeight">1px</item>

重要な部分は、この 1px 設定を含めることでした。もちろん、drawable はグラデーション (1 ピクセル) を使用しますが、これは最適なソリューションではありません。ストロークを使用してみましたが、機能しませんでした。(スタイルを使用していないようですので、ListView に android:dividerHeight="1px" 属性を追加するだけです。

于 2010-11-07T14:21:17.720 に答える
27

追加android:dividerHeight="1px"すると機能します:

<ListView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/cashItemsList"
     android:cacheColorHint="#00000000"
     android:divider="@drawable/list_divider"
     android:dividerHeight="1px">
 </ListView>
于 2011-12-11T11:29:09.130 に答える
15

あなたが抱えている問題は、あなたが必要とするandroid:dividerHeightが欠けているという事実と、あなたがドローアブルで線の太さを指定しようとしているという事実から生じています。奇妙な理由。基本的に、例を機能させるには、次のようなことを行うことができます。

ドローアブルを長方形または線のいずれかとして作成します。どちらも機能し、寸法を設定することはできません。したがって、次のいずれかを実行します。

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line">
     <stroke android:color="#8F8F8F" android:dashWidth="1dp" android:dashGap="1dp" />
</shape>

また:

<shape xmlns:android="http://schemas.android.com/apk/res/android"  android:shape="rectangle">
     <solid android:color="#8F8F8F"/>
</shape>

次に、カスタムスタイルを作成します(好みですが、再利用できるようにしたいです)

<style name="dividedListStyle" parent="@android:style/Widget.ListView">
    <item name="android:cacheColorHint">@android:color/transparent</item>
    <item name="android:divider">@drawable/list_divider</item>
    <item name="android:dividerHeight">1dp</item>
</style>

最後に、カスタムスタイルを使用してリストビューを宣言します。

<ListView
     style="@style/dividedListStyle"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/cashItemsList">
</ListView>

私に知らせない場合でも、これらのスニペットの使用方法を知っていると思います。基本的に、あなたの質問に対する答えは、ドローアブルで仕切りの厚さを設定することはできないということです。そこで幅を未定義のままにし、代わりにandroid:dividerHeightを使用して設定する必要があります。

于 2012-07-08T19:17:44.780 に答える
8

ドキュメントから:

public void setDivider(Drawable divider) on ListView

/**
 * Sets the drawable that will be drawn between each item in the list. If the drawable does
 * not have an intrinsic height, you should also call {@link #setDividerHeight(int)}
 *
 * @param divider The drawable to use.
 */

setDividerHeight()固有の高さがない場合に仕切りを表示するには、呼び出す必要があるように見えます

于 2011-11-18T19:04:28.923 に答える
5

次の@drawable/list_divideようになります。

<shape
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:shape="line">
 <stroke
   android:height="1dp"
   android:color="#8F8F8F"
   android:dashWidth="1dp"
   android:dashGap="1dp" />
</shape>

あなたのバージョンでは、を提供しandroid:width="1dp"、それをに変更するだけでandroid:height="1dp"動作するはずです!

于 2012-04-16T08:25:22.157 に答える
4

ドキュメントから:

ファイルの場所:

res/drawable/filename.xml

ファイル名はリソース ID として使用されます。

基本的に、次のようにアクセスできるように、という名前list_divider.xmlのファイルを配置する必要があります。その方法でアクセスできる場合は、XML で を使用できます。res/drawable/R.drawable.list_dividerandroid:divider="@drawable/list_divider"ListView

于 2010-10-20T15:14:59.880 に答える
1

android docs は、丸め誤差が原因で消えるものについて警告しています... おそらく px の代わりに dp を試してください。また、最初に > 1 を試して丸めの問題かどうかを確認してください。

http://developer.android.com/guide/practices/screens_support.html#testingを参照してください

「高さ/幅が 1 ピクセルの画像」セクションの場合

于 2011-03-04T03:11:35.093 に答える
1

ディバイダー xml レイアウトのディバイダーの末尾にある「r」を忘れました

レイアウトを @drawable/list_divider と呼びますが、ディバイダー xml の名前は「list_divide」です

于 2015-03-05T05:42:20.420 に答える
-1

設定android:dividerHeight="1dp"

<ListView
    android:id="@+id/myphnview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@drawable/dividerheight"
    android:background="#E9EAEC"
    android:clickable="true"
    android:divider="@color/white"
    android:dividerHeight="1dp"
    android:headerDividersEnabled="true" >
</ListView>
于 2016-10-20T10:04:15.103 に答える