以下の要素から特定のリストを作成し、左側に画像を、右側にテキストを含むすべての行でスクロール可能なリストを作成しました。
「ルート」レイアウトから始めるには:
<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>
次に、リストビュー内に次の「行」アイテムを配置します。
<?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
も追加されました。同じ背景を持つ要素、これはリストがスクロールされたときにその色を保持します...これが起こっている理由、およびこれを解決する方法はありますか?
ListView
タグに属性を追加します
Android:cacheColorHint="#00000000" // setting transparent color
詳細については このブログ を確認してください
レイアウトファイルで次の行を使用するだけで非常に簡単です。
Android:scrollingCache="false"
このような:
<ListView
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:scrollingCache="false"
/>
次のように使用できます:
list.setCacheColorHint(Color.TRANSPARENT);
list.requestFocus(0);
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"/>
この問題には多くのオプションがあり、次のようなプログラミングを通じて背景を透明に設定できます
yourlistview.setCacheColorHint(Color.TRANSPARENT);
またはxmlを介して
Android:cacheColorHint="@Android:color/transparent"
listView
で画像を使用していますが、サムスンs4ではスクロールしなくても時々黒くなります。この問題を解決するために、アダプタで行ったのは愚かな間違いでした。view to 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);
}
}
この質問に対する答えはたくさんありますが、今日、この質問にはまだ重要な情報が欠けていることに気付きました。
問題には2つの解決策があります。両方とも機能しますが、それぞれ異なる状況で使用する必要があります。
メソッド
ListView
にsolid色の背景がある場合は、Android:cacheColorHint
を使用します。
<item name="Android:cacheColorHint">@Android:color/transparent</item>
ListView
に背景として(複雑な)imageがある場合は、Android:scrollingCache
を使用します。
<item name="Android:scrollingCache">false</item>
ListView
の背景が単色の場合、両方のメソッドが機能するため、cacheColorHint
だけが機能するわけではありません。しかし、ListViewのスムーズなアニメーション化とスクロールに使用される最適化メソッドをオフにするため、scrolingCache
メソッドを無地の背景に使用することはお勧めしません。
注の注:scrolingCache
をfalseに設定しても、必ずしもListView
のアニメーションとスクロールが遅くなるわけではありません。
Listview
setを使用するxmlの場所
Android:cacheColorHint="@Android:color/transparent"
Android:cacheColorHint="@Android:color/transparent"
次は私のために働いた:
myListView.setScrollingCacheEnabled(false);
Android:cacheColorHint="#00000000"// setting transparent color
または
しないlistview
の背景を設定します。