9

Ich habe ein anderes Problem mit ViewPager festgestellt und ich kann es nicht mit meinem derzeitigen Wissen im Augenblick lösen.Android TabPage Indikator Inhalt Verpackung Problem

Ich habe TabPageIndicator mit ViewPager und auf jeder Registerkarte, zeige ich Text. Es ist ganz einfach 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> 

ich der Text in den Registerkarte will eine einzelne Zeile immer zu sein und immer ganzen Text, nicht ellipsize, keine Verpackung, nicht mehr als 1 Zeile zu sein. Es ist erforderlich, damit der Benutzer es ganz lesen kann ...

Aber ich kann das nicht tun, ich habe verschiedene Optionen ausprobiert und ich stoße immer noch auf einige Probleme - entweder der Text hat mehr als nur eine Zeile, aber nur die erste wird angezeigt, oder nur ein Teil des Textes wird angezeigt.

Haben Sie Ähnliches erlebt?

Ich glaube, dass das Problem hier ist:

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

Antwort

4

ich das Problem einfach, war glaube ich

Jede Hilfe

EDIT ONE geschätzt diesen Teil auskommentiert:

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

Jetzt funktioniert es so, wie ich es wollte ... Ich habe ständig nach den falschen Teilen des Codes gesucht.

+0

ich das versucht, aber es hat nicht funktioniert – Shehabix

0

Ich hatte ein ähnliches Problem, der gesamte Text wurde nicht angezeigt. Ich habe es gelöst, links/rechts Stil Polsterung zu reduzieren.

0

Anstelle des Layout-Gewichtes = 1 für die Breite habe ich das Attribut Wrap content verwendet. Im TabPageIndicator Klasse, die addTab ersetzen (int, CharSequence, int) -Methode, die mTabLayout.addView mit folgendem:

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

1

Ich hatte Probleme mit der Ellipse Text in den Tabs, wenn es nicht sollte. Ich habe den Fix here, #227 mit @ Larrams Vorschlag gefunden. Hier ist im Grunde, was er tat, aber es wäre eine gute Idee, seine Erklärung zu lesen, was er tat und warum er es getan hat:

In TabPageIndicator.java, ersetzen Sie die folgenden Schritte aus:

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

mit:

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

Das reparierte es für mich.

0

Update der ViewPageIndicator Bibliothek :) offiziell festgelegt wurde :)

+0

war die Frage: „Haben Sie erfahren etwas ähnliches Jede Hilfe ist willkommen“ .. Ich hatte die Das gleiche Problem, und es wurde behoben, um die neueste Version aus dem Git Repo zu ziehen. also warum nicht? – cV2