Wert in der main.xml durch die Activity ändern

  • Antworten:5
  • Bentwortet
Duckemai
  • Forum-Beiträge: 63

21.08.2010, 12:02:43 via Website

Hallo zusammen,

ich habe eine Frage zum Layout.
In der main.xml setzte ich ein Hintergrundfoto für eine app:

android:background="@drawable/picture1.jpg">

Das Foto wird aus dem Ordner drawable-hdpi gezogen. Klappt wunderbar.

Nun möchte ich das Foto im laufenden Programm ändern, und zwar von der Activity aus. Der neu zu
setzende String ist bereits dort ("picture2.jpg"). Eigentlich stelle ich mir das
so einfach vor, wie zB bei einem Button aus der Layout:

private Button num1;
num1 = (Button) findViewById(R.id.Button01);
num1.setTextSize(30); //to change the size of the text

Aber was, wenn nun wie bei mir der background geändert werden soll? Das sollte doch eigentlich ganz
einfach sein, so wie bei den Buttons. Kennt jemand den Code dafür?

Vielen Dank
Duckemai

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

21.08.2010, 12:16:13 via Website

Du kannst das in etwas so lösen:


1final View view = _activity.findViewById(R.id.background_pattern);// Suche nach dem View der den Background enthalten soll.
2
3final BitmapDrawable bgImage = (BitmapDrawable) _activity.getResources().getDrawable(resID);
4view.setBackgroundDrawable(bgImage);

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Duckemai

Antworten
Duckemai
  • Forum-Beiträge: 63

21.08.2010, 12:46:11 via Website

Dieses Drawable verstehe ich nun gar nicht.

_activtiy ist ja wohl this, also mein Activity.

was ist mit resID hier eigentlich gemeint?
Ich würde jetzt meinen, dass @+id/BlaBla gemeint ist.

Aber so was habe ich ja nicht für ein Foto. Oder doch?
Ich habe ja lediglich einen String: "Bild2.jpg" und das Foto ist im Ordner drawable-hdpi abgelegt. Kann ich den String also nicht benutzen?

Jetzt stehe ich vollkommen auf dem Schlauch. Was ist hier gemeint mit resID? Etwas aus der String.xml?

Sorry. Anfänger eben!

Gruß
Duckemai

— geändert am 21.08.2010, 12:52:13

Antworten
Tobias Eckert
  • Forum-Beiträge: 155

21.08.2010, 22:55:45 via Website

Duckemai
was ist mit resID hier eigentlich gemeint?

Alles was Du in Deinen Order "res" einstellst bekommt eine ID vom System. Wenn Du da eine Grafik mit dem Dateinamen "bild.jpg" reinstellst, kannst Du über die ResID "R.drawable.bild" in Deiner App darauf zugreifen. Genau wie Du Dein R.id.Button01 nutzt um auf Dein Button-Layout zuzugreifen. R.id.Button01 ist dann die Resource ID, oder kurz resID.

Duckemai
Aber so was habe ich ja nicht für ein Foto. Oder doch?
Ich habe ja lediglich einen String: "Bild2.jpg" und das Foto ist im Ordner drawable-hdpi abgelegt.

Doch, dann hast Du die resID R.drawable.bild2. Bzw. die hast Du wenn Du den Dateinamen auf komplett Kleinschreibung änderst. Mit Großbuchstaben im Dateinamen funktioniert es leider nicht.

Du kannst dann Deiner View sagen sie soll sich Ihren Hintergrund direkt aus Deinem res Folder lesen, über
1num1.setBackgroundResource(R.drawable.bild2);

Damit legst Du dann die Resource "bild2" als Hintergrund für Deinen Button fest.

Du musst aber aufpassen wie Du die Folder benutzt. Wenn Du Dein bild2.jpg nur im Ordner drawable-hdpi ablegst, und Du Deine App auf einem Gerät startest dass keine hdpi Auflösung hat, so wird der Inhalt des drawable-hdpi Folders ignoriert. Wenn Deine App auch auf Standard Auflösung laufen soll, musst Du das Bild im Ordner res\drawable ablegen.

Duckemai

Antworten
Duckemai
  • Forum-Beiträge: 63

22.08.2010, 10:58:42 via Website

Aaaaaach so, dass die ResId automatisch vergeben wird, habe ich nicht gerafft. Und daher auch nicht, dass mit dem
Bildnamen die ResId vorliegt. Ich suchte immer noch eine Möglichkeit, die ID dem System bekannt zu geben.
Jetzt klappt's auch.

Vielen Dank an Euch beide,
Duckemai

Antworten
Claudius E.
  • Forum-Beiträge: 18

08.01.2012, 18:11:57 via Website

Hi, sorry, dass ich diesen alten Thread nochmal hervorhole, aber ich möchte gerne eine Taschenlampe erstellen, die per Toggle Button gesteuert wird. Hierzu soll sich der Hintergrund bei Klick auf den Toggle Button ändern. Ich habe jetzt leider nur noch keine Methode, die den Hintergrund ändert und aus den oberen Posts bin ich auch nicht richtig schlau geworden. Hier ist die Activity:

1package de.android.taschenlampe;
2
3import android.app.Activity;
4import android.os.Bundle;
5import android.view.View;
6import android.widget.Toast;
7import android.widget.ToggleButton;
8
9public class TaschenlampeActivity extends Activity {
10 /** Called when the activity is first created. */
11 @Override
12 public void onCreate(Bundle savedInstanceState) {
13 super.onCreate(savedInstanceState);
14 setContentView(R.layout.main);
15
16 ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggle);
17 toggleButton.setOnClickListener(new View.OnClickListener()
18 {
19 public void onClick(View v) {
20 if (((ToggleButton)v).isChecked()){
21 ------Hier soll der Hintergrund auf weiß geändert werden--------
22 }
23 else
24 ------Hier soll er wieder zurück gesetzt werden-----------------
25 }
26 });
27 }
28}

Ich habe auch schon gedacht, dass man ein Fullscreen Bild anzeigen könnte, was dann bei Berühren des Screens wieder verschwindet, das habe ich aber noch weniger hinbekommen.

Antworten