2010年11月28日日曜日

Android タブコンテンツの黒線はなんなんだ?!

Tab を使ったレイアウトで タブコンテンツに Activity(Intent) を割り当てる場合、テーマに Theme.Light を指定するとこうなります。



ぶざまなw

この黒線はなんだ!?




結論から言うと、フルスクリーンモード以外の Activity には(多分必ず)この線が入ります。


普通のレイアウトで Theme.Light


普通のレイアウトで Theme.Light.NoTitleBar


普通のレイアウトで Theme.Light.NoTitleBar.Fullscreen


ほら、なくなったでしょ。


なので、試しにフルスクリーンでタブレイアウトにしてみました。

<application;gt タグに指定した場合


お、消えたよ。

なぜフルスクリーンモードでこの線がきえるかというと、

<item name="android:windowContentOverlay">@null</item>

を設定しているからなんです。


http://developer.android.com/reference/android/R.attr.html#windowContentOverlay

This Drawable is overlaid over the foreground of the Window's content area, usually to place a shadow below the title.

タイトルの下の影。まさにそれです。
つまり、この設定をした独自テーマを作れば別にフルスクリーンしなくてもいいんです。


と思って、タブコンテンツの <Activity> タグに上記の設定をした独自テーマを設定したんですけど、だめでした。 ><

それで、もしかして、、、、「タブコンテンツのテーマはタブホストのテーマと同じになって、個別に設定できない?」と思って、試しに TabHost の <Activity> タグに android:theme="@android:style/Theme.Black"、タブコンテンツの <Activity> タグに android:theme="android:style/Theme.Light" としたら、予想通り!タブコンテンツは黒テーマになりました。 orz

ならば、コードから!ということでタブコンテンツの onCreate() で setTheme(android.R.style.Theme_Light) したのですが、あえなく撃沈。。。




結局、TabHost のテーマに <item name="andorid:windowContentOverlay">@null<item /> 入れないとダメってことか。



ちゃんと消えるけど、TabHost のタイトルバーの下の影もきえちゃうから、なんかのっぺり。。。


タブコンテンツの onCreate() で


getWindow().setBackgroundDrawableResource(android.R.color.darker_gray);


とかやればウィンドウの背景を変えられるから、なんとかコードから windowContentOverlay の設定変えられないかなぁ。。。と思ったんだけど、runtime 時に個別の style 属性は設定できないみたい。いつか対応されるのかな。。。 http://www.mail-archive.com/android-developers@googlegroups.com/msg22161.html



のっぺりが嫌な場合は、上記のコードでタブコンテンツの背景を設定してごまかすしかないかも。



 



 

0 件のコメント:

コメントを投稿