Android滑动标签 - 以编程方式设置标签的宽度

时间:2014-12-30 14:45:40

标签: java android android-layout android-studio

使用我的滑动标签项目,如何以编程方式设置标签的宽度,以便它们使用滑动标签条的整个空间,并且每个标签的宽度大小相等?我已尝试使用下面的代码,但标签不会按要求拉伸。

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;
}

enter image description here

文字重量错误

text weight error

3 个答案:

答案 0 :(得分: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()); 
}

答案 1 :(得分:1)

在更新中,您现在可以使用

mSlidingTabLayout.setDistributeEvenly(true);

在onViewCeated中

可以找到更多here.

答案 2 :(得分:1)

我有一个不同的问题,我必须自定义每个标签的宽度:

Distribute Evenly

我正在使用setDistributeEvenly函数。相反,我需要设置每个textviews的权重。

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

希望它有所帮助!