android - SlidingTabsColors适合整个屏幕

时间:2014-05-13 11:02:05

标签: android tabs

我已按照此示例创建了一个非常漂亮的滑动选项卡式布局:http://developer.android.com/samples/SlidingTabsColors/project.html

非常好,但我希望标签条适合整个屏幕长度。我现在只有4个项目,并且在显示所有内容后滑动选项卡才会停止。我希望它适合整个屏幕,就像最新的Facebook应用程序中使用的那样。

有没有人有想法?

1 个答案:

答案 0 :(得分:5)

由于SlidingTabStrip类扩展了LinearLayout,您可以使用权重来影响每个视图在布局中占用的空间。

就我而言,如果选项卡中还有剩余空间,我希望视图使用相同的空间量。我所做的是修改SlidingTabLayout class where it populates the tab stripaddView()方法已更改为提供LayoutParams,为每个添加的视图指定相同的权重。

如果所有视图的总大小大于所有视图的可用大小,则会强制视图占用整个空间(如果它们小于标签条的总可用大小)并且与原始实现具有相同的行为条。

原始代码:

private void populateTabStrip() {
    final PagerAdapter adapter = mViewPager.getAdapter();
    final View.OnClickListener tabClickListener = new TabClickListener();

    for (int i = 0; i < adapter.getCount(); i++) {
        View tabView = null;
        TextView tabTitleView = null;

        if (mTabViewLayoutId != 0) {
            // If there is a custom tab view layout id set, try and inflate it
            tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip,
                    false);
            tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId);
        }

        if (tabView == null) {
            tabView = createDefaultTabView(getContext());
        }

        if (tabTitleView == null && TextView.class.isInstance(tabView)) {
            tabTitleView = (TextView) tabView;
        }

        tabTitleView.setText(adapter.getPageTitle(i));
        tabView.setOnClickListener(tabClickListener);

        mTabStrip.addView(tabView);
    }
}

修改后的代码:

private void populateTabStrip() {
    final PagerAdapter adapter = mViewPager.getAdapter();
    final View.OnClickListener tabClickListener = new TabClickListener();

    for (int i = 0; i < adapter.getCount(); i++) {
        View tabView = null;
        TextView tabTitleView = null;

        if (mTabViewLayoutId != 0) {
            // If there is a custom tab view layout id set, try and inflate it
            tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip,
                    false);
            tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId);
        }

        if (tabView == null) {
            tabView = createDefaultTabView(getContext());
        }

        if (tabTitleView == null && TextView.class.isInstance(tabView)) {
            tabTitleView = (TextView) tabView;
        }

        tabTitleView.setText(adapter.getPageTitle(i));
        tabView.setOnClickListener(tabClickListener);

        mTabStrip.addView(tabView, new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1.0f));
    }
}