Настройка вкладок состояния в Android - PullRequest
18 голосов
/ 21 апреля 2009

Я знаю, как поставить значок на каждой вкладке, это не проблема. Я также столкнулся с этим: [Переполнение стека потока на почти то же самое] [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 - это просто ссылка на ресурс рисованного изображения. Как сделать селектор нарисованным?

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

Ответы [ 2 ]

21 голосов
/ 23 апреля 2009

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

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

1 голос
/ 20 января 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).

...