ScrollView in dynamischem Layout

  • Antworten:4
Georg Herbrand
  • Forum-Beiträge: 6

02.03.2014, 09:45:00 via Website

Hallo Zusammen,

ich möchte für einen Chat ein dynamisches Layout kreieren, das Scrollen zu älteren Nachrichten ermöglichen soll. Das Layout ist simpel

1<LinearLayout
2 ...
3 android:orientation="vertical"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent"
6 android:layout_gravity="bottom"
7 android:weightSum="100"
8 tools:context=".ChatActivity" >
9<ScrollView
10 android:id="@+id/ScrollArea"
11 android:layout_width="match_parent"
12 android:layout_height="match_parent"
13 android:layout_weight="20"
14 android:background="#0000FF">
15
16 <LinearLayout
17 android:id="@+id/loTextArea"
18 android:layout_width="match_parent"
19 android:layout_height="wrap_content"
20 android:layout_gravity="bottom"
21 android:orientation="vertical" >
22 </LinearLayout>
23
24</ScrollView>
25
26
27<LinearLayout
28 android:id="@+id/loInputArea"
29 android:layout_width="match_parent"
30 android:layout_height="match_parent"
31 android:layout_weight="80"
32 android:layout_gravity="bottom"
33 android:orientation="horizontal"
34 android:weightSum="100" >
35
36 <EditText
37 android:id="@+id/etInput"
38 android:layout_width="match_parent"
39 android:layout_height="wrap_content"
40 android:layout_weight="30" >
41
42 <requestFocus />
43 </EditText>
44
45 <Button
46 android:id="@+id/btSend"
47 android:layout_width="match_parent"
48 android:layout_height="wrap_content"
49 android:layout_weight="70"
50 android:text="Senden" />
51
52 </LinearLayout>
53
54</LinearLayout>

und der Programmcode erfüllt auch seinen Zweck.


1

[code]private void setloTextArea(String[] Text){
loTextArea.removeAllViews();
loTextArea.setGravity(Gravity.BOTTOM);



for (int i=0; i<Text.length;i++){

// Create TextView
TextView Entry = new TextView(this);
Entry.setId(i);
Entry.setTextSize(20);
Entry.setText(Text[i]);
Entry.setPadding(25, 25, 25, 25);
Entry.setGravity(Gravity.RIGHT);
loTextArea.addView(Entry);


}

ScrollArea.removeAllViews();
ScrollArea.fullScroll(View.FOCUS_UP);
ScrollArea.addView(loTextArea);

}[/code]

Das Problem ist, dass wenn das Layout "voll" ist und die Scrollfunktionalität "beginnen" sollte, werden ältere Nachrichten nicht mehr angezeigt aber dafür wird der Raum am unteren Ende des Layouts geschaffen. D.h. die letzten Nachrichten werden immer auf dem Screen angezeigt, ältere Nachrichten (oben) verschwinden und dafür wird unten der Platz angefügt, kann gescrollt werden und ist aber leer.

Bitte helft. Wie kann ich das LinearLayout so einrichten, dass beliebig viele Nachrichten anfügen kann, und bei bedarf zu älteren nachrichten hochscrollen kann.

Dank und Gruß

Georg

— geändert am 02.03.2014, 09:46:53

Antworten
impjor
  • Forum-Beiträge: 1.793

02.03.2014, 10:28:29 via App

Ich würde das ganze auf eine ListView umstellen.
Gerade für einen Chat, der ja schnell tausende Nachrichten enthalten kann. Willst du dann tausende Views in dein LinearLayout einfügen?

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Georg Herbrand
  • Forum-Beiträge: 6

02.03.2014, 10:55:37 via Website

Ja ich habe über ListView nachgedacht. Die App ist Teil eines Einsatzleitsystems. Es gibt also nur Kommunikation zwischen Zentrale und mobiler Einheit. Bietet ListView die gleichen graphischen Möglichkeiten? Die Anzahl der Nachrichten würde ich auf 25 oder 50 beschränken.

Die Optik muss ins CI passen.

Gruß Georg

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

02.03.2014, 11:13:49 via Website

Du kannst das ja mal selbst austesten, und dich dann für eine Möglichkeit entscheiden

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
impjor
  • Forum-Beiträge: 1.793

02.03.2014, 11:58:58 via Website

Eine ListView hat den Vorteil, dass sie nur die Elemente lädt, die auch wirklich benötigt werden.
Du kannst über einen eigenen Adapter für jeden Eintrag in der ListView eine eigene View verwenden, also sollte das mit dem Layout kein Problem sein. (Auch wenn ein vorgefertigter ArrayAdapter reichen sollte.)

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten