Drawable ändern durch Config / Spinner

  • Hi Community


    In einem widget sollte eine png durch die config änderbar sein...

    habe in den config_layout.xml

    Java
    <Spinner
            android:id="@+id/spinner1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />


    in der widget_layout.xml

    Java
    <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/widgetimg" />

    und meine configactivity

    Java
    // Lade Config-UI
    		setContentView(R.layout.config);
    		spinner = (Spinner) findViewById(R.id.spinner1);
    
    
    		// fülle Spinner
    		ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
    				this, R.array.widgetimg, android.R.layout.simple_spinner_item);
    		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    		spinner.setAdapter(adapter);


    wie realisiere ich es nun, das wenn ich in der spinner etwas anderes wähle, das sich dementsprechend die @drawable/widgetimg des widget_layout's ändert... ?

  • Du greifst da auf zwei verschiedene Sachen zu:
    R.array.widgetimg ist ein Array (von Strings),
    R.drawable.img1 etc. werden im Android als (irgendwelche) int gespeichert.

    Du musst also eine Datenstruktur speichern, z.B. HashMap<String, Integer> mit der Zuordnung des Strings und der Drawable-Resource-ID.

    Wenn du so eine HashMap aufgebaut hast, kannst du mit folgenden Befehlen weiterkommen (in sinnvoller Kombination - ich habs nicht getestet):

    Java
    int pos = spinner.getSelectedItemPosition();
    String selectedItem = getResources().getStringArray(R.array.widgetimg)[pos];
    int drawableId = myHashMap.get(selectedItem);
    myImageView.setImageDrawable(getResources().getDrawable(drawableId));


    Das hätte ich auch alles in einen Befehl packen können, aber so ist es schon unübersichtlich genug... ^^

    Wenn du das im OnItemSelectedListener vom Spinner verarbeitest, bekommst du pos schon mal gratis geliefert...

    Das Leben kann so hart sein, man muss nur richtig wollen!!!

    2 Mal editiert, zuletzt von UweApps (7. März 2012 um 22:22)

  • ost leider keine imageview, sondern eine android:dial"xx" von <AnalogClock>


    Java
    myHashMap = new HashMap<String, Integer>();
    myHashMap.put("widgetimg1", R.drawable.widgetimg1);
    myHashMap.put("widgetimg2", R.drawable.widgetimg2);
    int pos = spinner.getSelectedItemPosition();
    String selectedItem = getResources().getStringArray(R.array.widgetimg)[pos];
    int drawableId = myHashMap.get(selectedItem);
    .setImageDrawable(getResources().getDrawable(drawableId));

    ist dieser ansatz schonmal richtig ?

  • Das ist schon fast egal - du hast ja mit dem Codebeispiel alle Teile in der Hand und musst dann gucken, wo du das Drawable auf der Oberfläche anzeigst.

    Fast alle Widgets kennen setBackgroundDrawable() - dann hast du das Bild auch auf dem Schirm. ;)

    Das Leben kann so hart sein, man muss nur richtig wollen!!!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!