スクロールすると、ListViewの背景が黒くなる


427

次の要素から存在する特定のリストを作成して、すべての行が左側に画像と右側にいくつかのテキストを含むスクロール可能なリストを作成しました。

「ルート」レイアウトから始めるには:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:background="#C8C8C8"
    >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:drawSelectorOnTop="false"
        android:divider="#C8C8C8"
        android:background="#C8C8C8"/>
</LinearLayout>

次に、ListView内に次の「行」アイテムを配置します。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="@drawable/bg_row"
>
    <ImageView
        android:layout_width="wrap_content"
        android:paddingLeft="10px"
        android:paddingRight="15px"
        android:paddingTop="5px"
        android:paddingBottom="5px"
        android:layout_height="wrap_content"
        android:src="@drawable/bg_image"
    />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="5px"
        android:paddingBottom="5px"
        android:textSize="16sp"
        android:textColor="#000000"
        android:layout_gravity="center"
        android:maxHeight="50px"/>
</LinearLayout>

画面が静的に表示されている限り(動きがないように)、正しく表示されますが、リストをスクロールし始めると、行アイテムの背景(コードで表示できる「アイコン」)が表示されます正しく表示されますが、「ルート」レイアウトの背景は完全に黒になります...スクロールが停止すると、ほとんどの場合、背景はその色に戻ります...私がテストTextViewしたので、ルート要素にもを追加しました同じ背景で、これはリストがスクロールされたときに色を保持します...これがなぜ起こっているのか、そしてこれを解決する方法はありますか?

回答:


771

ListViewタグに属性を追加する

android:cacheColorHint="#00000000" // setting transparent color

詳細については、このブログを確認してください


23
this.getListView()。setCacheColorHint(0); レイアウトから色を設定できませんでした。しかし、上記のコードでなんとかできました。リストアクティビティの「onCreate」でこのコードを使用しました。この情報もお役に立てば幸いです。
Dijo David

70
android:cacheColorHint="#0000"ゼロを恐れている場合にも機能します。
Andrew

136
またはandroid:cacheColorHint="@android:color/transparent"、数字が怖い場合も同様です。)
dule

2
@android:color / transparentには、おそらく1つのビットセットが追加されているというボーナスがあります。一部の電話で0を渡した場合、透過性が機能しないというバグがあります。したがって、トリックは1ビットを設定することです。
Thomas Dignan

63

レイアウトファイルで次の行を使用するだけです。

android:scrollingCache="false"

このような:

<ListView 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollingCache="false"
/>

2
それは動作しますが、私はそれを行うのが賢明ではないと思います:stackoverflow.com/questions/15570041/scrollingcache
Morten Holmgaard 14

1
android:cacheColorHint = "#00000000"が機能しない場合がありましたが、android:scrollingCache = "false"は機能しました。ありがとう。
Yar

27

次のように使用できます:

list.setCacheColorHint(Color.TRANSPARENT);
list.requestFocus(0);

10

android:id="@android:id/list"
android:layout_width="fill_parent" 
android:layout_height="fill_parent"
android:drawSelectorOnTop="false"
android:divider="#C8C8C8"
android:background="#C8C8C8"
android:cacheColorHint="#00000000"/>

7

この問題にはたくさんのオプションがあります。次のようなプログラミングを通じて背景を透明に設定できます

yourlistview.setCacheColorHint(Color.TRANSPARENT); 

またはXMLを介して

android:cacheColorHint="@android:color/transparent"


5

私は画像を使用しlistViewていますが、samsung s4ではスクロールすることすらできずに黒くなることがあります。それは私がアダプターで行った愚かな間違いでした。私はこの問題を修正するために自分のビューをnullに設定しました

 @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Holder holder;
            convertView = null; // convert view should be null
            if (convertView == null) {
                holder = new Holder();
                convertView = inflater1.inflate(R.layout.listview_draftreport_item, null);
             } 
        }

4

この質問にはたくさんの答えがありますが、今日、この質問にはまだ重要な情報が欠けていることに気付きました。

この問題には2つの解決策があります。どちらも機能しますが、それぞれ異なる状況で使用する必要があります。


方法

背景が無地のandroid:cacheColorHint場合に使用します。ListView

<item name="android:cacheColorHint">@android:color/transparent</item>

背景に(複雑な)画像があるandroid:scrollingCache場合に使用します。ListView

<item name="android:scrollingCache">false</item>

注意

あなたListViewが無地の背景を持っている場合、両方の方法が機能するので、だけでなくcacheColorHint機能します。ただしscrolingCache、ListViewをスムーズにアニメーション化およびスクロールするために使用される最適化メソッドをオフにするため、このメソッドを単色の背景に使用することはお勧めしません。

注: scrolingCache falseに設定しても、必ずしもListViewのアニメーションとスクロールが遅くなることを意味するわけではありません。




1

android:cacheColorHint="#00000000"// setting transparent color

または

背景を設定しないでくださいlistview

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.