Android滑动选项卡 - 编程设置选项卡宽度

3
使用我的滑动选项卡项目,我该如何以编程方式设置选项卡的宽度,使它们使用整个滑动选项卡条并且每个选项卡的宽度大小相等?我尝试使用下面的代码,但选项卡不会按预期进行拉伸。
SlidingTabLayout.java
protected TextView createDefaultTabView(Context context) {
    TextView textView = new TextView(context);
    textView.setGravity(Gravity.CENTER);
    textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, TAB_VIEW_TEXT_SIZE_SP);
    textView.setTypeface(Typeface.DEFAULT_BOLD);
    textView.setTextColor(context.getResources().getColor(R.color.black));
    textView.setWidth(0);

    int padding = (int) (TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density);
    textView.setPadding(padding, padding, padding, padding);

    return textView;
}

输入图像描述

文本加粗错误

文本加粗错误

3个回答

3
在你的方法中添加以下内容。
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
textView.setWidth(size.x / count); // Where count is number of textviews

如果您需要支持旧版本,请使用以下内容。
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB_MR2) 
{ 
    display.getSize(size); 
} 
else 
{ 
    size.set(display.getWidth(), display.getHeight()); 
}

我已经在我的代码中加入了那行,但仍然没有任何变化。 - wbk727
使用了那段代码后,我得到了这个结果(一个消失的条纹)。请在文本权重错误部分上方查看上面的图片。 - wbk727
不确定但有一个更简洁的方法setDistributeEvenly(true)。如果你想要更小的代码,你也可以尝试这个。只是建议 :) - Rohit5k2
我需要把它放在哪里? - wbk727
只需要在创建 SlidingTabLayout 类的对象时,在该对象上调用此方法即可。有时间可以试一下。现在您可以使用其他代码。 - Rohit5k2
显示剩余5条评论

1
在更新中,您现在可以使用以下内容:

mSlidingTabLayout.setDistributeEvenly(true);

在onViewCreated方法中,

更多信息可以在这里找到。


1
我有一个不同的问题,需要自定义每个标签的宽度:

Distribute Evenly

我正在使用setDistributeEvenly函数。相反,我需要设置每个textview的权重。
将此变量添加到您的SlidingTabLayout.java中:
private int[] mTabWeights;

这个方法应该设置选项卡的权重:

public void setTabWeights(int[] weights){
        mTabWeights = weights;
    }

请查找方法 populateTabStrip(),并添加一个 else 语句
if (mDistributeEvenly) {
     LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) tabView.getLayoutParams();
     lp.width = 0;
     lp.weight = 1;

}else{
     LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) tabView.getLayoutParams();
     lp.width = 0;
     lp.weight = mTabWeights[i];
}

你可以重构代码使其更加清晰。以下是使用时的代码:
stNews = (SlidingTabLayout) findViewById(R.id.stNews);
stNews.setDistributeEvenly(false);
stNews.setTabWeights(new int[]{2,3,3});

这是最终结果:

enter image description here

希望它能有所帮助!

你能解决新的TabLayout问题吗?我在那里遇到了同样的问题。 - Hamzeh Soboh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接