9

ViewPager で別の問題が発生しましたが、現在の知識では解決できません。

私は ViewPager で TabPageIndicator を持っており、すべてのタブでテキストを表示しています。それは単純な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 行にし、楕円形ではなく、折り返しや 1 行以内のテキスト全体にする必要があります。ユーザーが全体を読むことができる必要があります...

しかし、それはできません。さまざまなオプションを試しましたが、まだいくつかの問題が発生します。テキストに複数の行があるが、最初の行しか表示されないか、テキストの一部しか表示されません。

似たようなことを経験したことがありますか?

どんな助けでも大歓迎です

編集 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...

4

5 に答える 5

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

今では私が望んでいたように動作します...私はいつもコードの間違った部分を見ていました。

于 2012-06-28T11:05:13.810 に答える
0

幅の Layout weight=1 の代わりに、Wrap content 属性を使用しました。TabPageIndicator クラスの addTab(int,CharSequence,int) メソッドで、mTabLayout.addView を次のように置き換えます。

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

于 2013-01-08T09:17:23.503 に答える
0

ViewPageIndicator ライブラリを更新してください :) 公式に修正されました :)

于 2013-09-13T07:58:04.880 に答える
0

同様の問題があり、テキスト全体が表示されませんでした。左/右のスタイルのパディングを減らして解決しました。

于 2012-10-10T06:56:29.670 に答える