2014-12-30 3 views
2

С помощью моего проекта выдвижных вкладок, как я могу программно установить ширину вкладок так, чтобы они использовали все пространство скользящей язычки и каждый равный по ширине? Я попытался использовать код ниже, но вкладки не будут растягиваться по желанию.Скользящие язычки Android - программно заданная ширина вкладок

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

Добавьте это в методе

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()); 
} 
+0

У меня уже была эта строка в коде, но ничего не изменилось. – MacaronLover

+0

Попробуйте отредактировать блок кода – Rohit5k2

+0

После использования этого блока кода я получаю это (исчезнувшая полоса). Пожалуйста, проверьте изображение выше в разделе ** «Ошибка веса текста» **. – MacaronLover

1

В обновлении теперь эти можно использовать,

mSlidingTabLayout.setDistributeEvenly(true);

в onViewCeated,

Больше можно найти here.

1

У меня есть другая проблема, в которой я должен был настроить каждый из ширины вкладок:

Distribute Evenly

я использовал setDistributeEvenly функцию. Вместо этого мне нужно было установить каждый вес текстовых просмотров.

Добавить эту переменную на вашем 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

Надеется, что это помогает!

+0

Можете ли вы решить проблему для нового TabLayout? У меня такая же проблема. –

Смежные вопросы