2

xml ドローアブルのみでHolo のような ActionBar タブの背景を作成することは可能ですか? はいの場合、どのように?いいえの場合、制限は何ですか?

ここに画像の説明を入力

Android ソース コードを参照すると、タブの背景がtab_indicator_holo.xmlで描画可能なセレクターで定義されていることがわかりました。

<selector 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/tab_unselected_holo" />
    <item android:state_focused="false" android:state_selected="true"  android:state_pressed="false" android:drawable="@drawable/tab_selected_holo" />

    <!-- Focused states -->
    <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_focused_holo" />
    <item android:state_focused="true" android:state_selected="true"  android:state_pressed="false" android:drawable="@drawable/tab_selected_focused_holo" />

    <!-- Pressed -->
    <!--    Non focused states -->
    <item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_holo" />
    <item android:state_focused="false" android:state_selected="true"  android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" />

    <!--    Focused states -->
    <item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_holo" />
    <item android:state_focused="true" android:state_selected="true"  android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" />
</selector>

そして、 tab_selected_holo.9.pngなど、状態ごとに 9 つのパッチ ドローアブルを使用します。

これらの 9 つのパッチ ドローアブルをレイヤー リスト ドローアブル、シェイプ ドローアブル、またはそれらの組み合わせに置き換えることで、さまざまな PNG ファイルを作成する必要がなくなるのではないかと考えていました (密度ごとに 6 つ)。

ActionBarSherlockも 9 つのパッチ ドローアブルを使用していることに気付いたので、これが唯一の方法である可能性が高いです。

4

2 に答える 2

2

ActionBar タブを完全にカスタマイズするには、「ホーム」という架空のタブに対して次のようなことを試してください。このレイアウトには、画像とラベルが含まれています。

(1) 通常どおりタブを作成しますが、ActionBar.Tab.setCustomView() でカスタム レイアウトを指定します。

// Home tab
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
HomeFragment homeFragment = new HomeFragment();
RelativeLayout layoutView = (RelativeLayout)inflater.inflate(R.layout.layout_tab_home, null);
TextView title = (TextView)layoutView.findViewById(R.id.title);
ImageView img = (ImageView)layoutView.findViewById(R.id.icon);
ActionBar.Tab tabHome = mActionBar.newTab();
tabHome.setTabListener(homeFragment);
title.setText(this.getString(R.string.tabTitleHome));
img.setImageResource(R.drawable.tab_home);
tabHome.setCustomView(layoutView);
mActionBar.addTab(tabHome);

(2) タブのレイアウトを作成する (layout_tab_home.xml)

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="56dip" android:layout_weight="0" android:layout_marginLeft="0dip" android:layout_marginRight="0dip">
    <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:paddingBottom="2dip" />
    <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/icon" android:paddingLeft="0dip" android:paddingRight="0dip" style="@style/tabText" />
</RelativeLayout>

(3)画像のドローアブルを設定します

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:drawable="@drawable/home_sel" />
    <item android:state_selected="false" android:drawable="@drawable/home_unsel" />
</selector>

この例では、選択された状態と選択されていない状態の色が異なる PNG グラフィックがあります。

バックグラウンド ドローアブルに最も関心があるようです。同じことが当てはまりますが、RelativeLayout にバックグラウンド ドローアブルを設定し、上記と同様のセレクターを使用します。

于 2012-07-25T20:22:07.417 に答える
0

挿入ドローアブルを使用して、下部にライン ストリップを作成できます。このxmlは、投稿したもののように、下部に青い線のある白い長方形を作成します. 次に、その状態に状態リスト ドローアブルを使用できます。

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetBottom="0dp"
android:insetLeft="-5dp"
android:insetRight="-5dp"
android:insetTop="-5dp" >

<shape>
    <solid android:color="#FFF" />

    <stroke
        android:width="3dp"
        android:color="#00F" />
</shape>
</inset>

詳細については、この投稿をご覧ください: http://blog.stylingandroid.com/archives/1329

于 2012-12-03T15:26:16.853 に答える