私はこのコードを持っています:
<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>
しかし、私は仕切りを見ることができません。
皆さん、これが1dpまたは1dipではなく1pxを使用する理由です。1dpまたは1dipを指定すると、Androidが縮小します。 120dpiデバイスでは、0.75pxのように変換され、0に丸められます。一部のデバイスでは、2〜3ピクセルに変換され、通常はいまたはずさんに見えます。
仕切りの場合、1ピクセルの仕切りが必要な場合は1pxが正しい高さであり、「すべてをディップする必要があります」ルールの例外の1つです。すべての画面で1ピクセルになります。さらに、1pxは通常、hdpi以上の画面で見栄えがよくなります。
「もう2012年ではありません」編集:特定の画面密度から開始してdp/dipに切り替える必要がある場合があります
これは回避策ですが、私には役立ちます:
次のように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は勾配(1px)を使用しますが、これは最適なソリューションではありません。ストロークを使用してみましたが、機能しませんでした。 (スタイルを使用していないように見えるため、ListViewにAndroid:dividerHeight = "1px"属性を追加するだけです。
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>
あなたが抱えている問題は、必要な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を使用して設定する必要があります。
ドキュメントから:
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()
を呼び出す必要があります
@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"
に変更するだけで機能します。
doc から:
ファイルの場所:
res/drawable/filename.xml
ファイル名はリソースIDとして使用されます。
基本的に、list_divider.xml
という名前のファイルをres/drawable/
に配置して、R.drawable.list_divider
としてアクセスできるようにする必要があります。その方法でアクセスできる場合は、ListView
のXMLでAndroid:divider="@drawable/list_divider"
を使用できます。
一部の人々は実線を経験しているかもしれません。これを回避するには、ドローアブルを参照するビューにAndroid:layerType="software"
を追加しました。
同じ問題がありました。ただし、ビューを1pxにすると、元のNexus 7では動作しなかったようです。画面密度が213で、xhdpiで使用されている240未満であることに気付きました。そのため、デバイスはmdpi密度であると考えていました。
私の解決策は、dimens
フォルダーにdividerHeight
パラメーターが含まれるようにすることでした。 2dp
フォルダーではvalues-mdpi
に設定しますが、1dp
etcフォルダーではvalues-hdpi
に設定します。
Androidのドキュメントは、四捨五入エラーのために消失するものについて警告します...おそらく、pxではなくdpを試してください。
http://developer.Android.com/guide/practices/screens_support.html#testing を参照してください
セクション「1ピクセルの高さ/幅の画像」
あなたはあなたのディバイダーxmlレイアウトのディバイダーの終わりに「r」を忘れました
レイアウトを@ drawable/list_dividerと呼びますが、divider xmlの名前は「list_divide」です