4

最終讓每個CustomView完全包裝Tab父項後,我遇到了一個問題,其中的選項卡太長,並將操作欄變成滑塊。我的drawables的寬度爲150px,這應該很好,因爲我測試了三星Galaxy S2屏幕的px寬度,並獲得了480px(480/3標籤= 160px每個)。操作欄選項卡自定義視圖太長

截圖:

enter image description here


設置:每個選項卡是由具有附着在佈局不同drawawble資源相同RelativeLayout的設置。該佈局然後傳遞給Tab的setCustomView()。我不認爲每個Tab都需要ImageView,除非這樣可以解決我的問題。某些樣式配置更改(例如刪除TabView的左側和右側填充)已經完成,以便將自定義視圖放在Tab上。


代碼(不使用的ImageView,設置在RelativeLayout的繪製資源)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="56dp" 
    android:layout_margin="0dp" 
    android:paddingBottom="2dp" > 

<!--  <ImageView 
     android:id="@+id/ivCustomTab" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingBottom="2dp" 
     android:contentDescription="@string/tabsDescription" 
     android:duplicateParentState="true" /> --> 

</RelativeLayout> 


//setting up tabs + custom views on tabs 
    LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    RelativeLayout discoverTabLayout = (RelativeLayout) inflater.inflate(R.layout.actionbar_tabs, null); 
    RelativeLayout tagsTabLayout = (RelativeLayout) inflater.inflate(R.layout.actionbar_tabs, null); 
    RelativeLayout badgeTabLayout = (RelativeLayout) inflater.inflate(R.layout.actionbar_tabs, null); 
    //ImageView customTabImg = (ImageView) customTabLayout.findViewById(R.id.ivCustomTab); //re-setting this ImageView for each tab 

    ActionBar.Tab discoverTab = actionBar.newTab();//.setText("Discover").setIcon(R.drawable.selector_tabicon_discover);//.setCustomView(drawable.selector_tab_discover); 
    //customTabImg.setImageResource(R.drawable.selector_tab_discover); 
    discoverTabLayout.setBackgroundResource(R.drawable.selector_tab_discover); 
    discoverTab.setCustomView(discoverTabLayout); 


<!-- Application theme. --> 
<style name="Theme.AppTheme" parent="AppBaseTheme"> 
    <!-- All customizations that are NOT specific to a particular API-level can go here. --> 
    <item name="android:textSize">18sp</item> 
    <item name="actionBarTabStyle">@style/Theme.TabsNoPadding</item> 
    <item name="android:actionBarTabStyle">@style/Theme.TabsNoPadding</item> 
</style> 

<style name="Theme.TabsNoPadding" parent="@style/Widget.Sherlock.ActionBar.TabView"> 
    <item name="android:paddingLeft">0dp</item> 
    <item name="android:paddingRight">0dp</item> 
    <item name="android:minWidth">0dp</item> 
</style> 


我已經試過什麼:

  • 添加的android:layout_width = 「120dp」 到RelativeLayout的縮短了標籤,但寬度保持不變。
  • 重新調整圖像大小,並減少45px的總長度,無需更改。如果我將它們設置得太小,它們將不會覆蓋標籤主機。
  • 我也注意到,標籤customView(s)大部分時間都消失onCreate()。不知道這是否與我不想要的標籤滾動佈局的渲染有關。

如果需要,我可以發佈我的主活動代碼。

+0

你能發表你的xml嗎? – TheFlash

+0

@Pratik發佈。有什麼建議麼? –

回答

0
  1. 我會建議思考在dp(密度獨立像素),而不是px(像素)在Android工作時。

  2. 如果你想要一個自定義的tabbar,我會建議只需創建一個寬度設置爲match_parent和高度由你選擇(例如48dp)的LinearLayout。方向將被設置爲水平。

裏面的LinearLayout每個視圖中創建儘可能多的ImageView或查看你想要的選項卡,設置寬度0dp,高度match_parent,最重要的重量爲1(不帶DP或者其他單位)在LinearLayout中。這樣標籤將具有相同的寬度,並且它們將保持在屏幕的邊界內。

希望這會有所幫助。