2017-07-06 83 views
1

有人能向我解釋什麼,我應該從這個website正是到這個代碼:如何使用圖標自定義標籤欄?

III. To change tab icon use TabLayout.Tab#setIcon method. You can get TabLayout.Tab object via TabLayout#getTabAt method, which accept tab index as parameter. 

... 
//after initialization TabLayout and ViewPager 
TabLayout.Tab tabCall = tabLayout.getTabAt(ITEM_CALL); 
tabCall.setIcon(R.drawable.selector_call); 

//repeat this code for all your tabs 
... 

因爲我在紅獲得tabLayoutITEM_CALL

enter image description here

+0

您是否按照他們的建議聲明TabLayout?即'TabLayout tabLayout =(TabLayout)findViewById(R.id.tabLayout);' –

+0

@DanielNugent好的,我做到了,謝謝。如何修復'ITEM_CALL'? –

+0

這是一個你需要聲明的常量。另外,你應該在'onCreate()'中調用'setIcon()',而不是'getPageTitle()' –

回答

0

您需要先創建選擇器xml文件,然後將它們放在您的可繪製文件夾中,這些選擇器文件需要引用選定狀態和非選定狀態的有效可繪製。

然後,只需在活動的onCreate()中設置標籤圖標即可。

這是你的活動應該是什麼樣子,以表現出三個標籤,每個標籤只顯示一個圖標:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager); 

     viewPager.setAdapter(new TabPagerAdapter(getSupportFragmentManager())); 

     TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout); 
     tabLayout.setupWithViewPager(viewPager); 

     TabLayout.Tab tabCall = tabLayout.getTabAt(0); 
     tabCall.setIcon(R.drawable.selector_call); 

     TabLayout.Tab tabHeart = tabLayout.getTabAt(1); 
     tabHeart.setIcon(R.drawable.selector_heart); 

     TabLayout.Tab tabContacts = tabLayout.getTabAt(2); 
     tabContacts.setIcon(R.drawable.selector_contacts); 
    } 

    class TabPagerAdapter extends FragmentPagerAdapter { 

     public TabPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public int getCount() { 
      return 3; 
     } 

     @Override 
     public Fragment getItem(int position) { 

      switch (position) { 
       case 0: 
        return new CallFragment(); 
       case 1: 
        return new HeartFragment(); 
       case 2: 
        return new ContactsFragment(); 
      } 

      return null; 
     } 
    } 
} 

每個標籤都需要自己選擇的XML文件,這裏是什麼樣的一個例子第三個標籤的選擇器應該如下所示:

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

    <item 
     android:state_selected="true" 
     android:drawable="@drawable/contacts_selected" /> 

    <item 
     android:state_selected="false" 
     android:drawable="@drawable/contacts_unselected" /> 

</selector> 
0

聲明此爲您的MainActivity類別恆定

private static final Striing ITEM_CALL = 0; 

做你的onCreate()這個聲明:

TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout); 

然後在繪製文件夾中創建selector_call.xml用此代碼:

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

    <item 
     android:state_selected="true" 
     android:drawable="@drawable/ic_call_selected" /> 

    <item 
     android:state_selected="false" 
     android:drawable="@drawable/ic_call_unselected" /> 

</selector> 
+0

我得到錯誤:'引起:java.lang.NullPointerException:嘗試調用虛擬方法'android.support.design.widget.TabLayout $ Tab android.support.design.widget.TabLayout $ Tab.setIcon(int)'on一個空對象引用' –

+0

在這一行:'tabCall.setIcon(R.drawable.icon);' –

+0

你把selector_call.xml放在drawable文件夾中了嗎? – Karim