Android TabPage Indicator内容包装问题

我遇到过ViewPager的另一个问题,现在我无法用我目前的知识来解决这个问题。

我有TabPageIndicator与ViewPager和每个选项卡上,我正在显示文本。 这是简单的textView:

<?xml version="1.0" encoding="utf-8"?> <view xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" class="viewpagerindicator.TabPageIndicator$TabView" > <TextView android:id="@+id/vpi_tab_text" android:layout_width="fill_parent" android:layout_height="fill_parent" android:singleLine="true" android:ellipsize="marquee" android:gravity="center" android:paddingBottom="10dip" android:paddingLeft="8dip" android:paddingRight="8dip" android:paddingTop="10dip" android:textColor="@drawable/vpi_tab_text_color" android:typeface="serif" /> </view> 

我希望选项卡中的文本始终是单行,并且始终是整个文本,而不是椭圆化,不打包,不超过1行。 用户需要能够读取整个…

但是我不能这样做,我尝试了不同的选项,但仍然遇到一些问题 – 文本不仅仅是一行,而且只显示第一行,或者只显示一部分文本。

你有类似的经历吗?

任何帮助表示赞赏

编辑一:

我相信问题在这里:

 @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { final int widthMode = MeasureSpec.getMode(widthMeasureSpec); final boolean lockedExpanded = widthMode == MeasureSpec.EXACTLY; setFillViewport(lockedExpanded); final int childCount = mTabLayout.getChildCount(); if (childCount > 1 && (widthMode == MeasureSpec.EXACTLY || widthMode == MeasureSpec.AT_MOST)) { if (childCount > 2) { mMaxTabWidth = (int) (MeasureSpec.getSize(widthMeasureSpec) * 0.4f); } else { mMaxTabWidth = MeasureSpec.getSize(widthMeasureSpec) / 2; } } else { mMaxTabWidth = -1; } final int oldWidth = getMeasuredWidth(); super.onMeasure(widthMeasureSpec, heightMeasureSpec); final int newWidth = getMeasuredWidth(); if (lockedExpanded && oldWidth != newWidth) { // Recenter the tab display if we're at a new (scrollable) size. setCurrentItem(mSelectedTabIndex); } } 

mMaxTabWidth …

Solutions Collecting From Web of "Android TabPage Indicator内容包装问题"

我认为这个问题很简单,我评论了这个部分:

  @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); // Re-measure if we went beyond our maximum size. // if (mParent.mMaxTabWidth > 0 && getMeasuredWidth() > mParent.mMaxTabWidth) { // super.onMeasure(MeasureSpec.makeMeasureSpec(mParent.mMaxTabWidth, MeasureSpec.EXACTLY), heightMeasureSpec); // } } 

现在它按我想要的方式工作…我一直在查看代码的错误部分。

我遇到了问题,它不应该在选项卡中省略文本。 我在这里find了修正,使用@ larham的build议#227 。 这基本上是他所做的,但是阅读他对他做了什么以及为什么做的解释是个好主意:

在TabPageIndicator.java中,replace以下内容:

 mTabLayout.addView(tabView, new LinearLayout.LayoutParams(0, MATCH_PARENT, 1)); 

有:

 mTabLayout.addView(tabView, new LinearLayout.LayoutParams(WRAP_CONTENT, MATCH_PARENT, 1)); 

这为我修好了。

我有一个类似的问题,整个文本没有显示。 我解决了它减less左/右风格填充。

我使用了Wrap content属性,而不是宽度为1的Layout weight。 在TabPageIndicator类中,addTab(int,CharSequence,int)方法将mTabLayout.addViewreplace为以下内容:

mTabLayout.addView(tabView,新的LinearLayout.LayoutParams(WRAP_CONTENT,WRAP_CONTENT));

更新ViewPageIndicator库:)正式修复:)