2010-07-08 52 views
1

我在我的一個活動中使用標籤視圖。我想根據他們的選擇更改制表符的可繪製。所以就是這樣 - 我有4張圖片T11,T12,T21,T22。我想要在選擇標籤1的情況下最初設置圖像T11和T22。現在我想,只要我選擇選項卡2.更改選擇標籤的可繪製 - android

改變圖像T12和T21到目前爲止,我通過抽拉型的XML文件,嘗試使用:

繪製左選項卡(TAB1) -

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:state_window_focused="false" android:state_enabled="true" 
    style="?attr/left_active" /> 

<item android:state_window_focused="false" android:state_enabled="false" 
    style="?attr/left_inactive" /> 
<item android:state_pressed="true" android:state_enabled="true" 
    style="?attr/left_active" /> 
<item android:state_pressed="true" android:state_enabled="false" 
    style="?attr/left_inactive" /> 
</selector> 

繪製對象的Tab鍵向右(TAB2) -

<item android:state_window_focused="false" android:state_enabled="true" 
    style="?attr/right_active" /> 

<item android:state_window_focused="false" android:state_enabled="false" 
    style="?attr/right_inactive" /> 
<item android:state_pressed="true" android:state_enabled="true" 
    style="?attr/right_active" /> 
<item android:state_pressed="true" android:state_enabled="false" 
    style="?attr/right_inactive" /> 

在活動:

TabHost tabHost = getTabHost(); 
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("Tab1", getResources().getDrawable(R.drawable.left)).setContent(new Intent(this, Left.class))); 
tabHost.addTab(tabHost.newTabSpec("tab2") 
    .setIndicator("Tab2", getResources().getDrawable(R.drawable.right)) 
    .setContent(new Intent(this, Right.class))); 
tabHost.setCurrentTab(1); 

請幫助...

+0

問號標記在style =上代表什麼? – jonney 2014-07-17 14:27:07

+0

@jonney問號意味着它是對當前主題中資源值的引用。 – OrhanC1 2015-09-07 14:11:27

回答

9

我終於得到了我的問題的答案。我之前做的是正確的做法。我做錯了什麼是,在可繪製的文件中使用樣式屬性。

所以這裏以備將來參考示例代碼:

繪製對象文件(創建繪製文件夾名稱tab_left.xml文件)

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="false" android:state_selected="false" 
     android:state_pressed="false" android:drawable="@drawable/tab_left_inactive" /> 

    <item android:state_focused="false" android:state_selected="true" 
     android:state_pressed="false" android:drawable="@drawable/tab_left_active" /> 

    <item android:state_focused="true" android:state_selected="false" 
     android:state_pressed="false" android:drawable="@drawable/tab_left_inactive" /> 

    <item android:state_focused="true" android:state_selected="true" 
     android:state_pressed="false" android:drawable="@drawable/tab_left_active" /> 

    <item android:state_pressed="true" 
     android:drawable="@drawable/tab_left_active" /> 
</selector> 

設置此作爲標籤的背景圖片:

TabWidget tw = getTabWidget(); 
View leftTabView = tw.getChildAt(0); 
leftTabView.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_left); 
View rightTabView = tw.getChildAt(1); 
rightTabView.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_right); 
+0

正是我在尋找的東西,像魅力一樣工作,很容易實現。謝謝! – Emilio 2011-12-09 10:13:32

+0

當我的代碼幫助某個人時,總是感覺不舒服...如果它對你有幫助,你可以按下投票按鈕。 – mudit 2011-12-09 12:56:53

+1

已經做到了。 :) – Emilio 2011-12-09 14:33:45

1

我在我的應用程序做到了這一點,但不使用XML /樣式。我在代碼中做了它,然後在onTabChanged()方法中交換背景圖像。你可以在我的評論中看到後Android TabHost - Activities within each tab

然後onTabChanged看起來像這樣的代碼

部分:

public void onTabChanged(String tabId) { 
     if ("tabMap".equals(tabId)) { 
      txtTabMap.setBackgroundDrawable(getResources().getDrawable(newsList==null?R.drawable.bg_tab_right_active_left_inactive:R.drawable.bg_tab_middle_active_both_inactive)); 
      txtTabInfo.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_tab_left_inactive_right_active)); 
      if(txtTabNews!=null)txtTabNews.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_tab_right_inactive_left_active)); 
     } else if ("tabInfo".equals(tabId)) { 
      scrlDescription.scrollTo(0, 0); 
      txtTabMap.setBackgroundDrawable(getResources().getDrawable(newsList==null?R.drawable.bg_tab_right_inactive_left_active:R.drawable.bg_tab_middle_inactive_left_active)); 
      txtTabInfo.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_tab_left_active_right_inactive)); 
      if(txtTabNews!=null)txtTabNews.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_tab_right_inactive_left_inactive)); 
     } else if ("tabNews".equals(tabId)) { 
      txtTabMap.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_tab_middle_inactive_right_active)); 
      txtTabInfo.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_tab_left_inactive_right_inactive)); 
      if(txtTabNews!=null)txtTabNews.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_tab_right_active_left_inactive)); 
     } 
    } 
+0

感謝Mathias,但我有另一個問題..我在我的應用程序中使用主題,所以將有多個圖像的選項卡,並會改變,如果用戶更改應用程序的主題。那麼我怎麼實現呢? – mudit 2010-07-08 10:39:29