Android: настройка вкладок в состоянии: как сделать селектор доступным

Я знаю, как поместить значок на каждую вкладку, это не проблема. Я также столкнулся с этим: [Переполнение потока стека на почти такую ​​же вещь] [1]

Я следил за одной из ссылок с этого вопроса и нашел [это] [2]

В значительной степени он сказал, что использует селектор, определенный в XML, уверен, сделал это. Но нет никакого идентификатора, связанного с этим, поэтому я не уверен, как получить функцию селектора как drawable, чтобы я мог использовать его как значок для вкладок. Может быть, я ошибаюсь. Но это то, что у меня есть, и, очевидно, что-то не хватает.

<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))); 

Прямо сейчас drawable - это просто ссылка на ресурс с возможностью рисования. Как сделать селектор доступным?

Это мой вопрос [1]: Обновление значков Android Tab [2]: http://groups.google.com/group/android-evelopers/browse_thread/thread/ef3bdebcb715b385

Ответ 1

XML, который вы здесь указали, - это способ определения drawable, который позволяет вставлять оператор case. Он отображает различные возможности в зависимости от состояния представления, которому он назначен. Вы можете сохранить его как xml файл в папке res/drawable вашего проекта (например, tabselector.xml).

Чтобы использовать его для Tabhost, вам нужно построить TabActivity, как обычно (как показано в этом примере учебника).

Затем, когда вы добавляете каждую вкладку к хосту, вы указываете tabselector в качестве индикатора, как показано ниже для "TAB 1".

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));

Примечание. Вы не можете изменить цвет фона вкладки за значками в этой точке.

Ответ 2

Вы можете использовать View как индикатор, таким образом вы можете настроить его так, как вы пожелаете.

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));

Первая вкладка будет использовать вид в качестве индикатора, а второй - CharSequence. Посмотрите на фактический класс TabSpec (http://developer.android.com/reference/android/widget/TabHost.TabSpec.html).