9

Napotkałem inny problem z ViewPagerem i nie mogę rozwiązać go z obecną wiedzą.Problem związany z pakowaniem zawartości TabPage w Androidzie:

Mam TabPageIndicator z ViewPager i na każdej karcie, wyświetlam tekst. To proste 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> 

chcę tekst na karcie, aby być zawsze w jednej linii i być zawsze cały tekst, a nie ellipsize, bez owijania, nie więcej niż 1 wiersz. Jest to wymagane, aby użytkownik mógł odczytać go w całości ...

Ale nie mogę tego zrobić, próbowałem różnych opcji i nadal napotykam pewne problemy - albo tekst ma więcej niż jedną linię, ale wyświetlana jest tylko pierwsza z nich lub wyświetlana jest tylko część tekstu.

Czy doświadczyłeś czegoś podobnego?

Każda pomoc jest mile widziana

EDIT ONE:

Wierzę, że problem jest tutaj:

@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 ...

Odpowiedz

4

Myślę, że problem był prosty, ja Skomentował tę część:

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

Teraz działa tak, jak chciałem ... Przez cały czas patrzyłem na niewłaściwe części kodu.

+0

próbowałem tego, ale to nie działa – Shehabix

0

Miałem podobny problem, cały tekst nie był wyświetlany. Rozwiązałem to, zmniejszając dopełnienie lewego/prawego stylu.

0

Zamiast szerokości układu = 1 dla szerokości użyłem atrybutu Zawijanie zawartości. W klasie TabPageIndicator metoda addTab (int CharSequence int), wymienić mTabLayout.addView z:

mTabLayout.addView (TabView nowe LinearLayout.LayoutParams (WRAP_CONTENT, WRAP_CONTENT));

1

Występowały problemy z elipsyzacją tekstu na kartach, gdy nie powinien. Znalazłem poprawkę here, #227 używając sugestii @ larhama. Tutaj w zasadzie to, co zrobił, ale byłby to dobry pomysł, aby przeczytać jego wyjaśnienie, co zrobił i dlaczego to zrobił:

W TabPageIndicator.java wymienić następujące:

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

z:

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

To naprawiło to dla mnie.

0

aktualizacja Biblioteka ViewPageIndicator :) została oficjalnie ustalona :)

+0

pytanie brzmiało: „Czy doświadczył czegoś podobnego Każda pomoc jest mile widziana” .. miałem ten sam problem i został naprawiony, aby pobrać najnowszą wersję z repozytorium git. więc czemu nie? – cV2

Powiązane problemy