Настройка вкладок по состоянию в Android

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

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

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

<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 — это просто ссылка на ресурс drawable image. Как сделать селектор доступным?

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


person Chrispix    schedule 21.04.2009    source источник


Ответы (2)


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

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

Затем, когда вы добавляете каждую вкладку на хост, вы указываете tabselector drawable в качестве индикатора, как показано для «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));

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

person Reto Meier    schedule 22.04.2009
comment
Как обычно. Большое Вам спасибо. Я думаю, что отсутствие моей папки с возможностью рисования было моей большей проблемой. Спасибо, что включили код, который заставил меня двигаться. Я ценю это. - person Chrispix; 23.04.2009
comment
это возможно сейчас? я имею в виду ваше заявление о примечании. проверьте мой вопрос, пожалуйста: stackoverflow.com/questions /2810075/ - person Praveen; 11.05.2010

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

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

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

person Moss    schedule 20.01.2010