TabHost на Facebook для Android - PullRequest
       14

TabHost на Facebook для Android

0 голосов
/ 07 октября 2010

Кто-нибудь знает, как это сделал Facebook:



alt text



Из того, что я знаю, мы не можем изменить высоту tabhost. Я предполагаю, что они положили взгляд «Фрэнк Чо» на табхост, чтобы он выглядел короче, но я могу ошибаться. Кто-нибудь знает, что происходит?

Ответы [ 2 ]

3 голосов
/ 07 октября 2010

На самом деле вы можете иметь настраиваемые виджеты вкладок. Вам нужно установить индикатор вкладки в какой-то пользовательский макет (с вашими рисованными объектами), и вы должны быть в порядке.

Вот полу-пример:

final TabHost host = getTabHost();

final TextView indicator = (TextView) getLayoutInflater().inflate(
                            R.layout.tab_indicator,
                            getTabWidget(), false);
indicator.setText("Tab title");

host.addTab(host.newTabSpec("The tab tag")
            .setIndicator(indicator)
            .setContent([put your content here]));
}

Где макет tab_indicator может выглядеть следующим образом:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tab_label"
    android:layout_width="0dip"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:gravity="center"
    android:textSize="14sp"
    android:textStyle="bold"
    android:minHeight="38dp"
    android:background="@drawable/minitab" />

Миниатюра для рисования является селектором для рисования элементов (поэтому вам нужно иметь изображение для выбранного, по умолчанию, нажатого и невыбранного). Приложение facebook использовало несколько белых рисованных изображений для вкладки по умолчанию и синий градиент для рисования для невыбранных вкладок.

Проверьте приложение Google IO Schedule для полного рабочего примера: http://code.google.com/p/iosched/ (и, в частности, TrackDetailActivity.java)

2 голосов
/ 07 октября 2010

У кого-то еще был правильный ответ, но я почему-то удалил его ...

Рассматриваемая высота - не высота TabHost, а TabWidget.

Попробуйте использовать версию setIndicator(), которая берет View вместо просто String или String плюс прорисовываемый ресурс. Хотя я еще не играл с этим, я понимаю, что это хорошо решает эту проблему.

Тем не менее, будьте осторожны, чтобы не получить слишком жесткие вкладки.

...