Text automatisch kürzen

  • Antworten:7
  • Bentwortet
NoWo
  • Forum-Beiträge: 17

24.01.2012, 13:57:07 via Website

Hallo zusammen,

ich wollte mal nachfragen, wie es möglich ist, Text automatisch zu kürzen.
Ich habe im Internet bereits ein paar Möglichkeiten gefunden, allerdings funktionierten diese nicht.

Hier meine xml:

1<?xml version="1.0" encoding="utf-8"?>
2<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="fill_parent"
4 android:layout_height="wrap_content">
5
6<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
7 android:layout_width="fill_parent"
8 android:layout_height="fill_parent"
9 android:orientation="vertical">
10
11
12<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
13 android:id="@+id/TableLayout_als_einzukaufend"
14 android:layout_width="wrap_content"
15 android:layout_weight="1"
16 android:stretchColumns="3"
17 android:layout_height="wrap_content"
18 android:layout_marginTop="20dp">
19
20 <TableRow android:layout_width="wrap_content" android:layout_height="wrap_content">
21 <TextView
22 android:layout_width="wrap_content"
23 android:layout_height="wrap_content"
24 android:layout_marginTop="20dp"
25 android:text=" " />
26 </TableRow>
27</TableLayout>
28</LinearLayout>
29</ScrollView>


Diese wird wie folgt von der Java-Klasse gefüllt:

1TableLayout table = (TableLayout)findViewById(R.id.TableLayout_als_einzukaufend);
2LinearLayout cell = new LinearLayout(this);
3TextView tv = new TextView(this);
4
5TableRow tr = new TableRow(this);
6tr.setBackgroundColor(Color.BLACK);
7tr.setPadding(0, 0, 0, 2); //Border between rows
8
9tr = new TableRow(this);
10tr.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
11
12TextView td_id = new TextView(this);
13td_id.setText("ID");
14tr.addView(td_id);
15
16TextView td_haendler = new TextView(this);
17td_haendler.setText("Text, der ggf. gekürzt werden soll !!!");
18td_haendler.setTextSize(15);
19tr.addView(td_haendler);
20
21TextView td_menge = new TextView(this);
22td_menge.setText("weiterer Text, nicht zu kürzen");
23td_menge.setTextSize(15);
24td_menge.setGravity(Gravity.CENTER);
25tr.addView(td_menge);
26
27table.addView(tr);

Vielen Dank,
NoWo

Antworten
Gelöschter Account
  • Forum-Beiträge: 281

24.01.2012, 19:30:13 via Website

Du hast aber schon mal programmiert, oder :-) In den meisten Sprachen gibt es Funktionen, die Strings manipulieren. Und so auch in Java - die Klasse String definiert für deinen Fall zum Beispiel die Methode subString ... Viel Erfolg beim Ausprobieren!

Antworten
Florian B.
  • Forum-Beiträge: 284

24.01.2012, 20:17:44 via Website

Was genau meinst du denn mit kürzen? Es gibt bei der TextView das Attribut ellipsize mit dem der Text in einer TextView automatisch gekürzt werden kann. Das Funktioniert aber nur wenn zusätzlich das Attribut singleLine="true" gesetzt wird.

Vielleicht hilft dir das ja weiter. Ansonsten solltest du vielleicht genauer erklären was du erreichen willst und warum. Dann kann man besser auf dein Problem eingehen.

Antworten
NoWo
  • Forum-Beiträge: 17

25.01.2012, 15:44:54 via Website

klar habe ich schon mal programmiert, aber vielleicht merkt man es mir an, dass ich noch nie in Java unterwegs war ;)

Ich möchte ja nicht die Strings selber kürzen (weiß ja nicht, welche Bildschirmbreite und wie viel Platz die anderen Zeichen davon bereits beansprucht haben), sondern dynamisch kürzen lassen.

Auf ellipsize bin ich bereits gestoßen, jedoch brachte es mir nicht das erwartete Ergebnis.
Habe es wie folgt vor "tr.addView(td_haendler);" (Zeile 19) eingesetzt:

1td_haendler.setSingleLine(true);
2td_haendler.setEllipsize(TruncateAt.END);

Das Resultat: es passiert leider gar nichts: Der Text wird ausgeschrieben und der Text vom nächsten TextView (td_menge) wird über den Bildschirm hinausgeschrieben.
Der Text von "td_haendler" soll aber so gekürzt werden, dass der folgende Text nicht über den Bildschirm hinausgeht (möglichst mit "..." am Ende, um zu erkennen, dass gekürzt wurde).

Wie mache ich das ???

Antworten
Florian B.
  • Forum-Beiträge: 284

25.01.2012, 16:27:38 via Website

Ja ellipsize ist normal schon das richtige Werkzeug hierfür. Leider funktioniert es aber nicht immer, bzw. ist zum Teil auch von anderen Attributen abhängig. Ich hab mich auch schon oft genug damit rumgeschlagen, es dann aber meist doch irgendwie zum Laufen bekommen. Kannst du mal noch die Attribute android:minLines android:maxLines und android:lines auf "1" setzen.

Antworten
NoWo
  • Forum-Beiträge: 17

25.01.2012, 17:24:26 via Website

Florian B.
Ja ellipsize ist normal schon das richtige Werkzeug hierfür. Leider funktioniert es aber nicht immer, bzw. ist zum Teil auch von anderen Attributen abhängig. Ich hab mich auch schon oft genug damit rumgeschlagen, es dann aber meist doch irgendwie zum Laufen bekommen. Kannst du mal noch die Attribute android:minLines android:maxLines und android:lines auf "1" setzen.

Dann bin ich aber beruhigt, dass nicht nur ich Probleme habe.. Hab mir schon eingeredet, dass es an mir liegt..

android:minLines und android:maxLines habe ich nicht gefunden (wie gesagt: mache ich nicht über die xml, sondern direkt im Code, also in der Klasse).
Anstatt android:lines habe ich "setLines()" gefunden.
Also so siehts nun aus:

1TextView td_haendler = new TextView(this);
2td_haendler.setText("Text, der ggf. gekürzt werden soll !!!");
3td_haendler.setTextSize(15);
4td_haendler.setSingleLine(true);
5td_haendler.setEllipsize(TruncateAt.END);
6td_haendler.setLines(1);
7tr.addView(td_haendler);

Leider ohne Änderung :(

Vielleicht hast Du/sonst noch jemand einen Tipp/Idee?

Antworten
Felix
  • Forum-Beiträge: 259

25.01.2012, 19:29:47 via Website

Tach!

Vorab: Vermeide bitte die Wörter automatisch und dynamisch. Beim Programmieren gibt es nichts, was durch diese beiden Wörter signifikant beschrieben werden könnte. Versuch stattdessen möglichst genau zu beschreiben, was dein Ziel ist.

Nun zu deinem Problem. ellipsize zusammen mit singleLine sind völlig ausreichend um einen Text zu kürzen. Du möchtest aber, dass der Text in einem TableLayout steht. Und Zellen darin dehnen sich aus, wenn es der Inhalt erfordert. Dem kann durch shrinkColums Einhalt geboten werden.


Felix.

NoWo

Antworten
NoWo
  • Forum-Beiträge: 17

25.01.2012, 19:50:31 via Website

Felix
Dem kann durch shrinkColums Einhalt geboten werden.

Ich werd verrückt, daran lags !!!
Eigentlich auch logisch, wenn man weiß, dass Java/Android so "denkt" :D
Tausend Dank :)

— geändert am 25.01.2012, 19:51:17

Antworten