我遇到了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
答案 0 :(得分:4)
我认为问题很简单,我评论了这一部分:
@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);
// }
}
现在它按照我想要的方式运行......我一直在查看代码的错误部分。
答案 1 :(得分:1)
我遇到问题时,它应该忽略标签中的文字。我使用@ larham的建议找到了修复here, #227。这基本上就是他所做的,但是阅读他对他所做的事情以及他为什么这样做的解释是个好主意:
在TabPageIndicator.java中,替换以下内容:
mTabLayout.addView(tabView, new LinearLayout.LayoutParams(0, MATCH_PARENT, 1));
使用:
mTabLayout.addView(tabView, new LinearLayout.LayoutParams(WRAP_CONTENT, MATCH_PARENT, 1));
为我修好了。
答案 2 :(得分:0)
我遇到了类似的问题,没有显示全文。 我解决了它减少左/右样式填充。
答案 3 :(得分:0)
对于宽度,我使用了Wrap内容属性,而不是布局权重= 1。 在TabPageIndicator类中,使用addTab(int,CharSequence,int)方法将mTabLayout.addView替换为以下内容:
mTabLayout.addView(tabView,new LinearLayout.LayoutParams(WRAP_CONTENT,WRAP_CONTENT));
答案 4 :(得分:0)
更新ViewPagerIndicator库:)正式修复:)