Android tabHost

У меня есть 2 вопроса относительно tabHost: я создал tabHost с двумя вкладками, а для заголовков таблиц я использую setIndicator (TextView) (я работаю с api level 4), мой заголовок фона белый. Я использую селектор для названия, чтобы выбрать между изображениями diff для заголовка.

  1. Я хочу сделать текст заголовка полужирным шрифтом только при выборе / нажатии. Мне не удалось это сделать, используя селектор, который у меня есть. Могу я вообще это сделать? Идея в том, что в случаях я использую drawable a, я хочу, чтобы текст был жирным. Другие случаи не выделены жирным шрифтом. Такой же вопрос касательно текстColor.

  2. Это похоже на ошибку – когда вкладка открывается первым, текст на выбранной вкладке (тот, который я использовал в tabHost.setCurrentTab (tabId)) вообще не отображается. После первого нажатия / фокусировки / фокусировки любой другой элемент выглядит хорошо. Любая идея, почему или как это решить?

заранее спасибо

On tabActivity –

TextView title1 = new TextView(MainActivity.getInstnace(), null, android.graphics.Typeface.NORMAL); TextView title2 = new TextView(MainActivity.getInstnace(), null, android.graphics.Typeface.NORMAL); title1.setText("teb11 title"); title1.setBackgroundResource(R.drawable.tabtitle); title1.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable.tab1), null, null, null); title2.setText("tab22 title"); title2.setBackgroundResource(R.drawable.tabtitle); title2.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable.tab2), null, null, null); TabSpec tab1 = mTabHost.newTabSpec("tab1").setIndicator(title1).setContent(R.id.list1); TabSpec tab2 = mTabHost.newTabSpec("tab2").setIndicator(title2).setContent(R.id.list2); mTabHost.addTab(tab1); mTabHost.addTab(tab2); mTabHost.setCurrentTab(0); 

Селектор tab1.xml

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@drawable/iconselect"/> <item android:state_pressed="true" android:drawable="@drawable/iconselect"/> <item android:drawable="@drawable/icon"/> </selector> 

Селектор для tabTitle

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/tabselected"/> <item android:state_selected="true" android:drawable="@drawable/tab" /> <item android:state_focused="true" android:drawable="@drawable/tab" /> </selector> 

По вашему вопросу №1:
На TabsAdapter используйте onPageSelected(int position) следующим образом:

  public void onPageSelected(int position) { //your logic here fixTitleText(); } 

а также:

  private void fixTitleText() { for (int i = 0; i < mTabHost.getTabWidget().getChildCount(); i++) { View view = mTabHost.getTabWidget().getChildAt(i); TextView tv = (TextView) view.findViewById(android.R.id.title); tv.setTextColor(getResources().getColor(R.drawable.text_selector)); tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14); tv.setTypeface(null, Typeface.BOLD); } } 

Просто обратите внимание, что этот код для HONEYCOMB и выше, до этого иерархия представлений хоста вкладки немного отличается

Это мой xml

 <?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="60px" android:background="@drawable/headerbk" android:paddingTop="12px" android:orientation="vertical" android:gravity="center_horizontal"> </TabWidget> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@+id/list1" android:background="@drawable/bk" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:scrollbars="vertical" android:divider="@drawable/separationline" android:cacheColorHint="#00000000" android:footerDividersEnabled="false" android:listSelector="@drawable/selected" /> <ListView android:id="@+id/list2" android:background="@drawable/bk" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:scrollbars="vertical" android:divider="@drawable/separationline" android:cacheColorHint="#00000000" android:footerDividersEnabled="false" android:listSelector="@drawable/selected" /> </FrameLayout> </LinearLayout> </TabHost> 

Могу ли я увидеть ваш макет XML или вы делаете это только с помощью команд Java. В любом случае, я бы хотел увидеть больше, чем просто псевдокод, чтобы на самом деле работать над этим.

Это будет либо ваш файл main.xml, либо функция OnCreate (). ЕСЛИ вы настраиваете свой макет через XML, main.xml должен иметь содержимое, похожее на:

 <?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent"> <RelativeLayout android:id="@+id/RelativeLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffffff"> </RelativeLayout> <RelativeLayout android:id="@+id/RelativeLayout02" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffffff"> </RelativeLayout> </FrameLayout> </LinearLayout> </TabHost> 

Это можно сделать исключительно с помощью команд Java, но особенно при фиксации # 2 нам, скорее всего, понадобится больше узнать о вашем коде. Как часть функции OnCreate (), я бы рекомендовал инициализировать все материалы, которые вы хотите отобразить. В противном случае, если он не находится в вашем main.xml, и он не инициализирован, он не будет показан.

Если требуется выделение полужирным шрифтом,

Там могут быть разные способы, но я сделал это …

Чтобы создать пользовательский TextView, а затем обработать сенсорное событие. Как жирный при действии вниз и установить нормальное действие.

Intereting Posts
Qt как подключиться к существующему файлу SQLlite в ОС Android? Предупреждение Android Proguard: невозможно записать ресурс (запись в дубликат zip) Настройка стиля базовых TextViews в style.xml Был ли Dalvik перенесен на другие платформы (например, Linux, Windows и т. Д.)? Как использовать динамический источник в jQuery combo box в приложении Android с помощью телефонной затычки Возможность динамического разрешения зависимостей модулей на основе версии Android google maps Polygon добавить круглое отверстие Как настроить / вычислить текстурбуфер в glTexCoordPointer при импорте из OBJ-файла Файловый ввод-вывод на смонтированном USB-устройстве хранения данных в режиме USB Host (Android 3.1 и выше) UnknownError: ApiException: Key hash **** не соответствует … когда у меня установлено приложение FB Обновления данных RecyclerView и адаптера Механизм виртуализации Genymotion не найден / загрузка плагина прервана на Mac Как начать работу после разблокировки btn нажмите и перед открытием экрана? Использование datetime в SQLite для получения значений в этом месяце и в прошлом месяце IllegalStateException: <MyFragment> в настоящее время отсутствует в FragmentManager