Actionbar 拉伸选项卡

Actionbar stretch out tabs

是否可以用选项卡填满操作栏? 目前我的标签在正常 phone 上伸展开,但当我使用平板电脑时它非常小。

我已经找到了:

private void setTabsMaxWidth() {
   DisplayMetrics displaymetrics = new DisplayMetrics();
   getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
   int screenWidth = displaymetrics.widthPixels;
   final ActionBar actionBar = getActionBar();
   final View tabView = actionBar.getTabAt(0).getCustomView();
   final View tabContainerView = (View) tabView.getParent();
   final int tabPadding = tabContainerView.getPaddingLeft() + tabContainerView.getPaddingRight();
   final int tabs = actionBar.getTabCount();
   for(int i=0 ; i < tabs ; i++) {
      View tab = actionBar.getTabAt(i).getCustomView();
      TextView text1 = (TextView) tab.findViewById(R.id.tab_title);
      text1.setMaxWidth(screenWidth/tabs-tabPadding-1);
  }
}

并结合选项卡上的自定义视图:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <TextView
        android:id="@+id/tab_title"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:text="TEST"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        />

</LinearLayout>

但还是不行

有什么想法吗?

谢谢

首先让我告诉您,这种用于实现选项卡(作为 ActionBar 的导航模式)的技术已被弃用。您应该改用寻呼机适配器,它可以很好地与工具栏配合使用。有带有 SlidingTabLayouts 的官方 android 示例向您展示了如何实现它,see this dev byte for some more info.

其次,如果你沿着 SlidingTabsLayout 路线走,在 createDefaultTabView() 方法中,我添加了这个以确保我的两个选项卡平均填充屏幕宽度:

    //Set tabs to take up entire screen width
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    Point size = new Point();
    if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB_MR2) {
        display.getSize(size);
    }
    else
    {
        size.set(display.getWidth(), display.getHeight());
    }
    textView.setWidth(size.x / 2);

快速浏览一下您的代码,我认为您应该设置文本视图的宽度,而不是 maxWidth。但是我觉得你的计算不太清晰,所以我不确定它是否也有误。