2011年6月7日火曜日

リストビューを設置したらまずやる10のこと

えー、本日はandroidで良く使われるViewトップ10に3週連続ランクインしたリストビューさんをおよびしております。8888
お忙しいところこんなところへ来ていただいてありがとうございます

ほんとリストビューさんといえば!簡単に設置できるわりにはデフォルトで余計なことしてくれちゃってるおかげで、あいつ扱いにくいわー、なんかもっさいわーとかいろんなブログで見かけますよね

今日はですね、そんなリストビューさんがとっつきやすい感じになるようポイントをご本人とご一緒に説明していきますね!

という体の備忘録です
必須じゃない設定もあるけどそれはお好みで

※yanzmさんのこれをみたらほとんど解決という気もするけどね


1:スクロール時の色を変化させない
onCreateで
ListView list=(ListView)findViewById(R.id.~~~);
list.setScrollingCacheEnabled(false);

※xmlでandroid:scrollingCache="false"とやっても良いみたいなのだが、効果ないのはなんでー
※もしかしたら、XML定義と項目ごとの背景設定の組み合わせでうまくいくのかも?
※とりあえず両方設定しておく
情報源はさん。

あと
android:cacheColorHint="#00000000"
とかしておくのがいい?

情報源はカレーさん。

2:スクロールバーを常に表示
android:fadeScrollbars="false"

情報源はyanzmさん。

※テスト機がぺりあ2.1なんで現象発生しないけどね

3:スクロールバーの雰囲気をカスタマイズ
android:scrollbarThumbVertical="@drawable/scrollbar_thumbl"
scrollbar_thumbl.xmlに色とか定義

情報源はyanzmさん。

4:上下のフェードを非表示
android:fadingEdge="none"

情報源はyanzmさん。

5:スクロールバーにつまみ
android:fastScrollEnabled="true"

情報源はカレーさん。

6:項目の区切り線を変更

android:divider="@color/~" 色
android:dividerHeight="1dp" 幅

情報源はAkiInoさん。

7:項目の選択時背景の変更
ListAdapter adapter = new ~Adapter(~Activity.this, R.xml.~, items);
// アダプタ設定
ListView list=(ListView)findViewById(R.id.~~~);
list.setAdapter(adapter);
ってした際の項目レイアウトに
android:background="@color/listitem"
とかして

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<color android:color="@color/~" />
</item>
<item android:state_focused="true" >
<color android:color="@color/~" />
</item>
<item>
<color android:color="@color/~" />
</item>
</selector>

みたいなのを設定して、自前で色指定する。
※しないと端末固有の選択時背景が適用されてウボァーってなる

8:リストバー付近にプログレスバーを配置
このへんの画像をプログレスバーで表示して、AsyncTaskでListとプログレスバーをGONEとかVISIBLEとか切り替えながら表示する。
AsyncTaskが複数回ラッシュされたときに影響しないように考慮したりする


9:選択状態の背景設定
getViewの中で
if (position == list.getCheckedItemPosition();) {
view.setBackgroundColor(Color.RED);     ←選択色
} else {
view.setBackgroundColor(Color.TRANSPARENT); ←透明色
}

みたいなことをする

(追記)ただし、この制御はアニメーションと相性悪いかもしれない。透過アイコンをImageViewに設定するのが簡単で効果的かも。


※情報源わすれた、、、

10:リスト表示時のアニメーション


list.setAdapter(adapter);
LayoutAnimationController anim = getListCascadeAnimation();
list.setLayoutAnimation(anim);

getListCascadeAnimationのなかは
private LayoutAnimationController getListCascadeAnimation() {
AnimationSet set = new AnimationSet(true);

Animation animation = new AlphaAnimation(0.0f, 1.0f);
animation.setDuration(50);
set.addAnimation(animation);

animation = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f
);
animation.setDuration(100);
set.addAnimation(animation);

LayoutAnimationController controller =
new LayoutAnimationController(set, 0.5f);
return controller;
}

これでびよーんてなる


OMAKE:アニメーションが黒くなった場合の対処(追記)
アニメーション指定すると背景が黒くなることがあります。
そしたら
AndroidManifest.xmlのactivityで
android:theme="@android:style/Theme.Translucent.NoTitleBar"
のおまじないをすると良いみたいです。
ただ、あやふやな情報として書きますが、自分の端末でどれだけ設定削っても
黒くならなくなってしまったのでアッレーアッレーとかわけがわからなくなってきました。
正確な情報がだせたらまた追記していこうと思います。
関連

※情報源はadamrockerさんとことか、きもとさんとかadakodaさんとか。

0 件のコメント:

コメントを投稿