web-dev-qa-db-ja.com

Androidでの状態のタブのカスタマイズ

各タブにアイコンを配置する方法を知っています。問題ありません。私もこれに遭遇しました:[ほぼ同じものでスタックオーバーフロースレッド] [1]

私はその質問からのリンクの1つをたどり、[これ] [2]を見つけました

ほとんどの場合、XMLで定義されたセレクターを使用すると言われていますが、確かにそうしました。しかし、関連付けられているIDがないため、セレクター関数をドローアブルとして取得する方法がわからないので、タブのアイコンとして使用できます。多分私はこれについて間違った方法で進んでいます。しかし、これは私が持っているものであり、明らかに何かが欠けています。

<selector
    Android:id="@+id/myselector"
    xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <!-- Non focused states -->
    <item
        Android:state_focused="false"
        Android:state_selected="false"
        Android:state_pressed="false"
        Android:drawable="@drawable/darklogo" />
    <item
        Android:state_focused="false"
        Android:state_selected="true"
        Android:state_pressed="false"
        Android:drawable="@drawable/lightlogo" />

    <!-- Focused states -->
    <item
        Android:state_focused="true"
        Android:state_selected="false"
        Android:state_pressed="false"
        Android:drawable="@drawable/lightlogo" />
    <item
        Android:state_focused="true"
        Android:state_selected="true"
        Android:state_pressed="false"
        Android:drawable="@drawable/lightlogo" />

    <!-- Pressed -->
    <item
        Android:state_pressed="true"
        Android:drawable="@drawable/lightlogo" />
</selector>

私のコードでは、例のタブが次を使用して生成されます:

  Host.addTab(Host.newTabSpec("three")  
                .setIndicator("map",drawables)  
                .setContent(new Intent(this, Map.class))); 

現在、ドローアブルはドローアブル画像リソースへの参照にすぎません。セレクターを描画可能にするにはどうすればよいですか?

これは私の質問です[1]: 更新Androidタブアイコン [2]: http://groups.google.com/group/Android- evelopers/browse_thread/thread/ef3bdebcb715b385

18
Chrispix

ここに含めたXMLは、caseステートメントを埋め込むことができるドローアブルを定義する方法です。割り当てられているビューの状態に応じて、異なるドローアブルが表示されます。ドローアブルとして、プロジェクトのres/drawableフォルダー内にxmlファイルとして保存する必要があります(例:tabselector.xml)。

これをTabhostに使用するには、通常のようにTabActivityを構築する必要があります(この チュートリアルの例 に示すように)。

次に、各タブをホストに追加するときに、下の「タブ1」に示すように、tabselectorドローアブルをインジケーターとして指定します。

Drawable mySelector = getResources().getDrawable(R.drawable.tabselector);

mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator("TAB 1", mySelector).setContent(R.id.textview1));
mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("TAB 2").setContent(R.id.textview2));

注:この時点では、アイコンの背後にあるタブの背景の色を変更できません

21
Reto Meier

ビューをインジケーターとして使用することもできます。これにより、希望どおりにカスタマイズできます。

mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator(View MyView).setContent(R.id.textview1));
mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("TAB 2").setContent(R.id.textview2));

最初のタブはインジケーターとしてビューを使用し、2番目のタブはCharSequenceを使用します。実際のTabSpecクラスを見てください(http://developer.Android.com/reference/Android/widget/TabHost.TabSpec.html)。

1
Moss