2013-01-11 71 views
1

我的應用程序的一部分擴展FragmentActivity。標籤和圖像與一些設備

該標籤具有圖像和文本(它有3個標籤,但是它們也有類似的代碼,唯一的區別是文本和圖像):

mTabManager.addTab("map", mTabHost.newTabSpec("map").setIndicator(context.getString(R.string.map), activity.getResources().getDrawable(R.drawable.maps_tab)), Maps.class, bundlePos); 

而且maps_tab.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<!-- When selected, use icon1 --> 
<item android:drawable="@drawable/ic_mapa_selected" 
    android:state_selected="true" /> 
<!-- When not selected, use icon2--> 
<item android:drawable="@drawable/ic_mapa_unselected" /> 
</selector> 

好一些設備如銀河王牌,或HTC野火S這項工作很好: enter image description here

但在其他設備GALAXY SII,銀河SIII或HTC失敗慾望Ç

enter image description here

這怎麼能不兼容解決?

+1

我有同樣的問題,而是創建一個自定義選項卡其得到有效解決,在ICS標籤圖像將不會顯示我想任何設備之後的任何問題! – juned

+0

好!我查了一下,發現它失敗的設備是ICS!你說「創建自定義選項卡」,但我恐怕不理解你。什麼是自定義選項卡? – user1256477

+1

我需要搜索我的代碼,一旦我得到我會在這裏發佈 – juned

回答

0

這裏是相同

TabSample.java實施

public class TabSample extends TabActivity { 
    /** Called when the activity is first created. */ 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     setTabs() ; 
    } 
    private void setTabs() 
    { 
     addTab("Home", R.drawable.tab_home, ArrowsActivity.class); 
     addTab("Search", R.drawable.tab_search, OptionsActivity.class); 

     //To add more tabs just use addTab() method here like previous line. 
    } 

    private void addTab(String labelId, int drawableId, Class<?> c) 
    { 
     TabHost tabHost = getTabHost(); 
     Intent intent = new Intent(this, c); 
     TabHost.TabSpec spec = tabHost.newTabSpec("tab" + labelId); 

     View tabIndicator = LayoutInflater.from(this).inflate(R.layout.tab_indicator, getTabWidget(), false); 
     TextView title = (TextView) tabIndicator.findViewById(R.id.title); 
     title.setText(labelId); 
     ImageView icon = (ImageView) tabIndicator.findViewById(R.id.icon); 
     icon.setImageResource(drawableId); 

     spec.setIndicator(tabIndicator); 
     spec.setContent(intent); 
     tabHost.addTab(spec); 
     int i = tabHost.getCurrentTab(); 
     Toast.makeText(TabSample.this, "tab->" + i,Toast.LENGTH_SHORT).show(); 
    } 
} 

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"> 
     <FrameLayout android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" android:layout_height="0dip" 
      android:layout_weight="1" /> 

     <TabWidget android:id="@android:id/tabs" 
      android:layout_width="fill_parent" android:layout_height="wrap_content" 
      android:layout_weight="0" /> 
    </LinearLayout> 
</TabHost> 

tab_indicator.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="0dip" 
    android:layout_height="55dip"  
    android:layout_weight="1" 
    android:orientation="vertical" 

    android:background="@drawable/tab_indicator" 
    android:padding="5dp"> 

    <ImageView android:id="@+id/icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:src="@drawable/icon" 

    /> 
    <TextView android:id="@+id/title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     style="?android:attr/tabWidgetStyle" 
    />  
</RelativeLayout> 

讓我知道,如果你有這個
感謝

+0

我會嘗試它,但是,TabActivity已棄用,使用不推薦的擴展是個好主意嗎? – user1256477

+0

是的,我知道它的棄用,你需要添加'@SuppressWarnings(「deprecation」)',它不是一個好主意,但直到我們有更好的選擇,我們可以使用它。它不會產生任何問題 – juned

+0

感謝您的答案,但這不是我的解決方案,我更喜歡圖像丟失比使用棄用。 – user1256477