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, а затем обработать сенсорное событие. Как жирный при действии вниз и установить нормальное действие.