LiewView Einträge mit farbigen Zeichen

  • Antworten:5
Thomas
  • Forum-Beiträge: 7

20.08.2014, 10:35:21 via Website

Hallo zusammen,

ich möchte eine Listview wo in einer Zeile(Item) in einem Textview nicht die ganze Textfarbe sondern nur einzelne Zeichen andersfarbig sind.

Beispiel mit Textview (die Zahlen 456 sind rot), ( [ ] entsprechen < > )

TextView txt1 = (TextView) findViewById(R.id.textView1 ) ;
txt1.setText(Html.fromHtml("123" + "[font color='#ff0000']" + "456" + "[/font]" + "789" )) ;

Beispiel Listview (mit Textview in der custom_list_item.xml )

ListView ListView1 = (ListView)findViewById(R.id.listView1 ) ;
ArrayList<String> ArrayList1=new ArrayList<String>( ) ;
ArrayAdapter<String> aa = new ArrayAdapter<String>(this, R.layout.custom_list_item, R.id.CustomText1 , ArrayList1 ) ;
noteList1.add("123"+"[font color='#ff0000']"+"456"+"[/font]"+"789" ) ;
ListView1.setAdapter(aa );

hier funktioniert Html.fromHtml nicht.

Habt ihr einen anderen Lösungsvorschlag?

viele Grüße
Thomas

— geändert am 20.08.2014, 10:38:56

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

20.08.2014, 10:44:59 via Website

Du musst dann deinen Eigenen Adapter bauen, damit das Funktioniert.
Ich hätte es erstmal so gemacht:

ArrayList<Spanned> ArrayList1=new ArrayList<Spanned>( ) ;
ArrayList1.add(Html.fromHtml("123" + "[font color='#ff0000']" + "456" + "[/font]" + "789" ));

ArrayAdapter<Spanned> simpleAdpt = new ArrayAdapter<Spanned>(this, R.layout.custom_list_item, R.id.CustomText1 , ArrayList1 ) {
                public View getView(int position, View view, ViewGroup viewGroup)
                {
                    final View vi = super.getView(position, view, viewGroup);

                               Spanned s = (Spanned)this.getItem(position);
                    ((TextView)vi).setText(s);
             return vi;
        };

Das funktioniert so, bei dir tut es nicht, da Html.fromHTML() einen Spanned zurückgibt und keinen String.
Du musst dem Adapter erst beibringen, wie er mit dem Spanned umgehen muss.

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

Antworten
Thomas
  • Forum-Beiträge: 7

20.08.2014, 12:07:20 via Website

Hallo Pascal,

vielen Dank, ich probier es aus.

viele Grüße
Thomas

Antworten
Thomas
  • Forum-Beiträge: 7

20.08.2014, 14:10:52 via Website

Hallo Pascal,

mit dem ArrayAdapter[Spanned] simpleAdpt.... funktioniert es, danke.

Nun habe ich noch eine zweite Frage.

Geht das auch wenn die Daten aus einer Datenbank kommen?
Ich bin leider noch nicht so fit. Die Adapter sind zu verschieden.
Der formatierte Text ("123" + "[font color='#ff0000']" + "456" + "[/font]" + "789" ) steht in der DB-Spalte Titel.
Drei Spalte gebe ich über das R.layout.row2 in drei TextViews.
Über den setOnItemClickListener lese ich dann die ID aus.

ListView listView1 = (ListView) findViewById(R.id.listView1);
Cursor cur = mDB.getDatabase().rawQuery(sql, null);
if (cur != null) {
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.row2, cur,
new String[] { "_id", "Nummer","Titel" }, new int[] {R.id.txtR1, R.id.txtR2,R.id.txtR3 });
listView1.setAdapter(mAdapter);
}

viele Grüße
Thomas

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

20.08.2014, 17:13:28 via App

Warscheinlich ist es einfacher aus der DB strings zu lesen und diese dann wieder zu deiner Arraylist hinzufügen.
Aber gehen tut das schon.Ich habe halt noch nie mit ner Db auf Android gearbeitet somit kann ich dir da wenig helfen.

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

Antworten
Thomas
  • Forum-Beiträge: 7

21.08.2014, 08:46:52 via Website

Hallo Pascal,

trotzdem vielen Dank. Vielleicht hat noch jemand anders eine Idee?

viele Grüße
Thomas

Antworten