2015-12-01 10 views
17

ich ein Layout haben, das wie folgt aussieht:ein Layout mit Textviews wickeln

<RelativeLayout> 
<!--aligned parent top--> 
</<RelativeLayout> 
<FlowLayout> 
<!--Should fill remaining space--> 
</FlowLayout> 
<RelativeLayout> 
<!--aligned parent bottom--> 
</<RelativeLayout> 

I verwendet FlowLayout eine Liste von Textviews zu zeigen (10-15 Textviews enthalten kann). Basierend auf dem verfügbaren leeren Bildschirmbereich möchte ich die Anzahl der Textansichten anzeigen. Wenn beispielsweise 15 Textansichten angezeigt werden und Platz für 10 Textansichten auf einem großen Bildschirm vorhanden ist, möchte ich 9 Textansichten anzeigen und in der letzten Textansicht "+6" anzeigen. In einem kleinen Bildschirm kann Platz nur für 5 Textansichten verfügbar sein, in dem ich 4 Textviews mit "+11" in der letzten Textansicht anzeigen möchte. Zum besseren Verständnis, hier ist der Screenshot. Wie Sie sehen können, ist die tatsächliche Anzahl der anzuzeigenden Textansichten 5. Es werden jedoch 2 angezeigt und +3 hinzugefügt. Auf der Grundlage des verfügbaren Platzes auf dem Bildschirm möchte ich eine Anzahl von Textansichten im Layout hinzufügen.

Wie kann dies programmgesteuert erreicht werden?

enter image description here

+0

können Sie herausfinden, wie viele Textansichten in Ihrem FlowLayout sichtbar sind? – Sree

+0

oder sonst werden Sie in scrollview setzen. also musst du nicht zählen. – KDeogharkar

+0

Ich möchte nicht Flow-Layout scrollen. Wie Sie im obigen Screenshot sehen können, möchte ich so viele Textansichten anzeigen, wie der Bildschirm es kann, und am Ende "+ übrig" anzeigen. –

Antwort

2

Versuchen Sie, die Textviews in einer Schleife hinzufügen, diese einzeln in einem neuen OnPreDrawListener hinzufügen. Überprüfen Sie nach jedem Hinzufügen, ob es das Leerzeichen in der Zeile überschreitet, und wenn dies der Fall ist, entfernen Sie es und fügen Sie den Zähler hinzu. Wenn die Zeile immer noch überschritten wird, entfernen Sie eine Zeile und erhöhen Sie den Zähler.

Der Schlüssel ist, jedes in einem separaten OnPreDrawListener zu testen, also passiert alles, bevor die Ansicht angezeigt wird, aber nach die Ansicht wurde Layout und Größe berechnet.

9

Versuchen programmatisch Textviews auf ein Linearlayout in einer for-Schleife, bei dem nach jeder Textview Zugabe Zugabe, (erhältlich verbleibende Breite erhalten können mit [ScreenWidth- (Summe der zugesetzten Textviews berechnet werden Breite + [Anzahl textviews * margin/padding für jedes])] *)

Wenn die Breite kleiner als ein bestimmtes Minimum ist (sagen Sie, dass Sie mindestens 100px für jede Textansicht benötigen), brechen Sie die Schleife und fügen Sie den Zählerindikatortext hinzu.

ich von unten Code denken kann, könnte es nicht genau, aber nur Sie, was denken Im zeigen

int screenWidth = getScreenWidth(); 
    int currentWidth=0; 
    int minimumWidthForAChildWithOffset = 100;//offset should include width of indicator 
    int childCount = 10; 
    int paddingForEachChild = 15; 
    for (int i = 0; i <childCount; i++) { 
     TextView label= getChildView(); 
     parent.addView(label, i); 
     currentWidth += parent.getChildAt(i).getWidth() + paddingForEachChild; 
     if(i!=childCount-1/*ignore if this is the last item*/ && screenWidth-currentWidth<=minimumWidthForAChildWithOffset){ 
      //add indicator label to layout here 
      break; 
     } 
    } 
+0

"Sagen Sie, Sie brauchen mindestens 100px für jede Textansicht" ... Die Textbreite ist nicht festgelegt. Alle Texte sind nicht gleich lang. Texte kommen von einem REST-Service. Also, wenn es drei Texte gibt, die 2-3 Zeichen lang sind, und dann kommt die vierte, die 20 Zeichen lang ist? –

2

Wenn ich etwas wie Sie beschrieben implementieren musste, würde ich versuchen, FlowLayout zu forcieren/unterzuordnen und seine onMeasure und onLayout Methoden zu aktualisieren.

Hier ist das Flowlayout: https://github.com/blazsolar/FlowLayout/blob/develop/FlowLayout/src/main/java/com/wefika/flowlayout/FlowLayout.java

1) Erster Schritt ist in onMeasure Höhe Flowlayout zu begrenzen. Auch könnte es genug sein, um so etwas zu tun:

<LinearLayout android:orientation="vertical" ... > 
    <RelativeLayout ... />  
    <FlowLayout android:layout_height="0dp" android:layout_weight="1" ... />   
    <RelativeLayout ... /> 
</LinearLayout> 

2) Zweiter Schritt ist onLayout zu aktualisieren, so dass es stoppt Linien und Linien Ansichten hinzuzufügen, wenn maximale Höhe erreicht ist, dann Ihrer Ansicht hinzufügen, die zeigt Anzahl der versteckte Ansichten

Verwandte Themen