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...

  • 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. ;)

Jetzt mitmachen!

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