1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

ListView Textfarbe

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von joschika77, 03.07.2009.

  1. joschika77, 03.07.2009 #1
    joschika77

    joschika77 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    1
    Registriert seit:
    26.05.2009
    Hallo, ich setze die Textfarbe meiner ListView in der *.xml auf Schwarz mit folgender Anweisung:

    Code:
    android:textColor="#000000"
    Leider bleibt die Schriftfarbe Weiß. Kann ich beim ListView nur den Background setzen? Wenn ja find ich sauschlecht.
     
  2. miracle2k, 03.07.2009 #2
    miracle2k

    miracle2k Android-Hilfe.de Mitglied

    Beiträge:
    89
    Erhaltene Danke:
    15
    Registriert seit:
    03.07.2009
    Du musst das Attribut nicht auf die Liste setzen, sondern auf die einzelnen TextView Elemente.

    Das heißt, wenn du es nicht eh schon tust, ein eigenes Layout für die Items verwenden, oder im Code via ViewBinder oder eigens angefertigtem Adapter mit SetTextColor() die Farbe verändern.

    Ich vermute ersteres wird für dich wohl der einfachere und bessere Weg sein.
     
  3. joschika77, 03.07.2009 #3
    joschika77

    joschika77 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    1
    Registriert seit:
    26.05.2009
    Hmmm...ne leider tue ich es noch nicht. Ich benutze einen ArrayAdapter. Das muß auch dynamisch sein.Wie kann ich das dem Adapter unterjubeln? Ich benutze im code folgendes:

    Code:
            myPostingTypeLV  = (ListView) findViewById(R.id.postingTypeListView);
            ArrayAdapter<String> adapterPos = new ArrayAdapter<String>(this,android.R.layout.simple_gallery_item,
                    aAllCategories);
            myPostingTypeLV.setAdapter(adapterPos);
            myPostingTypeLV.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
            {
                public void onItemSelected(AdapterView parentView, View childView, int position, long id) 
                {
                }
                public void onNothingSelected(AdapterView parentView) 
                {
                    //nothing to do
                }
             });
    
     
  4. miracle2k, 03.07.2009 #4
    miracle2k

    miracle2k Android-Hilfe.de Mitglied

    Beiträge:
    89
    Erhaltene Danke:
    15
    Registriert seit:
    03.07.2009
  5. joschika77, 03.07.2009 #5
    joschika77

    joschika77 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    1
    Registriert seit:
    26.05.2009
    Ok das hab ich soweit. Was is das? Kann ich das mit meiner Farbe ersetzen?

    Code:
    android:textColor="?android:attr/textColorPrimaryDisableOnly"
    
     
  6. miracle2k, 03.07.2009 #6
    miracle2k

    miracle2k Android-Hilfe.de Mitglied

    Beiträge:
    89
    Erhaltene Danke:
    15
    Registriert seit:
    03.07.2009
    Das ist eine Referenz auf ein Attribut im aktuellen Theme. D.h. z.B. je nach dem ob du den Light oder den Dark Style verwendest, oder ob zum Beispiel ein Handy wie das Hero eine andere Farbe für die Auswahl verwendet, werden hier automatisch die richtigen Farben verwendet.

    Du kannst den Wert einfach mit deiner eigenen Farbe ersetzen, richtig. Im Optimalfall würdest du natürlich eine Statelist von Farben verwenden, damit du auch bei ausgewählten/gedrückten/deaktivierten Items etc. die richtige Textfarbe hast, falls notwendig.
     
  7. joschika77, 03.07.2009 #7
    joschika77

    joschika77 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    1
    Registriert seit:
    26.05.2009
    Leider klappt das auch nicht. Die Farbe wird nicht gesetzt. :confused:
    Wie sieht es mit dieser Methode aus?
    Code:
    myPostingTypeLV.setSelection(aPosIndex);
    Die scheint auch nicht zu funktionieren. Seltsam! Seltsam!
     
  8. swordi, 03.07.2009 #8
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    bastel dir deinen eigenen adapter und überschreib die getView methode

    das funktioniert ganz sicher
     
  9. miracle2k, 03.07.2009 #9
    miracle2k

    miracle2k Android-Hilfe.de Mitglied

    Beiträge:
    89
    Erhaltene Danke:
    15
    Registriert seit:
    03.07.2009
    Du musst etwas falsch gemacht haben, denn: Ich hab das auch schon gemacht, und es klappte.

    Poste mal mehr von dem Code den du verwendest.
     
  10. joschika77, 06.07.2009 #10
    joschika77

    joschika77 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    1
    Registriert seit:
    26.05.2009
    Hallo.

    Das ist die simple_gallery_item.xml.Soll dann die Textfarbe Schwarz haben.
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    
    <!-- android:textColor="?android:attr/textColorPrimaryDisableOnly" -->
    <TextView 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        android:id="@android:id/text1"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="#000000"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxLines="1"/>
    
    Und das ist in der onCreate Methode vom Activity
    Code:
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            myPostingTypeLV  = (ListView) findViewById(R.id.postingTypeListView);
            myAdapterPos = new ArrayAdapter<String>(this,android.R.layout.simple_gallery_item,
                    myPostingTypes);
            myPostingTypeLV.setAdapter(myAdapterPos);
            myPostingTypeLV.setSelection(aPosIndex);
            myPostingTypeLV.setOnItemClickListener(new OnItemClickListener()
            {
                public void onItemClick(AdapterView<?> parentView,View childView,int position,long id) 
                {    
                    ECategoryPostingTypeActivity.this.setResult(Activity.RESULT_OK,
                        new Intent(myPostingTypes[position]));
                    ECategoryPostingTypeActivity.this.finish();
                }            
            });        
        }
    
    Hoffe das der Code reicht. Wenn was fehlt nochmal posten. Warum funktioniert die setSelection Methode nicht?
     
  11. swordi, 06.07.2009 #11
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    was ist aPosIndex???

    sehe da nicht, welchen wert das haben könnte.
     
  12. joschika77, 06.07.2009 #12
    joschika77

    joschika77 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    1
    Registriert seit:
    26.05.2009
    na der wert ist 0,1 oder 2. Das ist auch der richtige Index. Hab ich durchdebuggt. Muß ich vielleicht den Focus noch setzen? Es soll so aussehen als wenn eine Zeile den Fokus hat.
     
  13. swordi, 06.07.2009 #13
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    hmm hat setselection überhaupt eine auswirkung auf eine listview? die listview zeigt ja sowieso generell alle items ( soviel halt platz )
     
  14. joschika77, 06.07.2009 #14
    joschika77

    joschika77 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    1
    Registriert seit:
    26.05.2009
    Hmmm ja vielleicht ist er ja selected und markiert es halt nur nicht, weil die Methode es gar nicht so macht. Dazu muß ich vielleicht den Fokus setzen. Sag mal kann man den Adapter nachträglich nicht mehr ändern? Also in der Laufzeit keine neuen Items einfügen oder löschen? wenn ich das machen will hab ich da so eine Exception die sowas ähnliches sagt. Das wäre sehr schlecht wenn das so ist.
     
  15. miracle2k, 06.07.2009 #15
    miracle2k

    miracle2k Android-Hilfe.de Mitglied

    Beiträge:
    89
    Erhaltene Danke:
    15
    Registriert seit:
    03.07.2009
    Du verwendest nach wie vor "android.R.layout.simple_gallery_item" (das Original), nicht dein eigenes: "R.layout.simple_gallery_item".
     
  16. swordi, 06.07.2009 #16
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    nenn es anders, dann gibts da auch keine missverständnisse

    anstatt android.R.layout.simple_gallery_item
    musst du
    R.layout.myCoolGalleryItem nehmen
     
  17. miracle2k, 06.07.2009 #17
    miracle2k

    miracle2k Android-Hilfe.de Mitglied

    Beiträge:
    89
    Erhaltene Danke:
    15
    Registriert seit:
    03.07.2009
    Doch das geht prinzipiell auf jeden Fall: Daten ändern und Adapter.notifyDataSetChanged() aufrufen.

    Der ArrayAdapter hat Methoden wie add() und delete(), die das für dich erledigen müssten.
     
  18. miracle2k, 06.07.2009 #18
    miracle2k

    miracle2k Android-Hilfe.de Mitglied

    Beiträge:
    89
    Erhaltene Danke:
    15
    Registriert seit:
    03.07.2009
    Bezüglich setSelection(): Hier ist das Problem wohl der Unterschied zwischen Touch-Mode und Focus-Mode.

    Sobald man den Bildschirm berüht, geht die Oberfläche in besagten Touch-Mode, und Focus und Selektion wird dann nur noch in Ausnahmefällen angezeigt (View | Android Developers)).

    Du setzt also die Selection, und wenn du dann mit dem Trackball (oder den Pfeiltasten) nach oben oder unten navigierst, sollte es von deiner gesetzten Position aus passieren, aber solange du noch im Touch-Mode bist, wird nichts angezeigt.
     
  19. joschika77, 07.07.2009 #19
    joschika77

    joschika77 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    1
    Registriert seit:
    26.05.2009
    Die Methoden hatte ich gefunden aber er schmeisst immer ne Exception wenn ich was rausschmeißen will. Zuerst hatte ich die Methode clear(). Jetzt habe ich mal die Remove() Methode versucht. Aber nichts da. Immer geht er in den UnsupportedOperationException Block. Deswegen meine Frage ob das überhaupt geht Gut ist ja schon mal zu hören/lesen das es grundsätzlich geht.

    Also die neuen Items hängen mit dem Wechsel des SpinnerItems zusammen, mein Code dazu derzeit:

    Code:
            myCategorySpinner.setOnItemSelectedListener(new OnItemSelectedListener()
            {
    
                public void onItemSelected(AdapterView<?> parent,View v,int position,long id) 
                {
                        try
                        {
                        for(int i=myPostingTypes.length-1;i>=0;i--)
                            myAdapterPos.remove(myPostingTypes[i]);
                        
                        myCurrentCategory = myCategorySpinner.getSelectedItem().toString();
                        myPostingTypes = myDBConnection.getAllPostingTypesFromCurrentCategory(myCurrentCategory);
                        
                        for(int i=0;i<myPostingTypes.length;i++)
                            myAdapterPos.add(myPostingTypes[i]);
                        
                        myAdapterPos.notifyDataSetChanged();
                        }
                        catch(UnsupportedOperationException uep)
                        {
                            Log.i(TAG,uep.getMessage());
                        }
                        catch(Exception e)
                        {
                            Log.i(TAG,e.getMessage());
                        }                    
                }
    
     
  20. swordi, 07.07.2009 #20
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    ist das nicht .remove(Object); ??
     

Diese Seite empfehlen

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. listview android schriftfarbe

    ,
  2. item text listview farbe ändern