# Background/Visibility



## m3ndax (22. Nov 2011)

Hallo, kurze Frage, 

ich will ein Hintergrundbild bei einer App machen.
Dazu habe ich in den Ordner res -> Layout einfach ein .png gezocken und des bei meiner main.xml als Background angegeben. Wenn ich die App auf meinem Handy installiere, kann ich sie garnichtmehr öffnen. An was liegt das? bzw Was ist falsch?

2. Ich habe einen Button, der soll durch klicken einen anderen Button anzeigen. Dazu brauche ich doch eigeentlich nur visibility auf visible setzen?

d.h. : button1.visibility.style = "visible";

Nur das funktioniert so nicht...

Danke für eure Antworten


----------



## schlingel (22. Nov 2011)

Was genau verwendest du als Entwicklungswerkzeug? 

button1.visibility.style = "visible"; schaut sehr nach JS aus. Nativ würde man das so machen: button1.setVisibility(View.VISIBLE);

Und was genau meinst du mit du kannst die Anwendung nicht öffnen? Fehlermeldung? Logcat?


----------



## m3ndax (22. Nov 2011)

Also ich programmiere mit Java und dem Developer tool von android halt 
Ich kenn mich mit java nicht so aus. habe es eher von C# abgeleitet...
Ähm, ne ich installiere die app auf meinem handy, und ich will danach auf "öffnen" klicken, und dass funktioniert nicht...
Zudem wird die App nicht bei meinen sonstigen Apps angezeigt...


----------



## schlingel (22. Nov 2011)

Das heißt du arbeitest direkt von der Konsole aus. Funktioniert denn das hinauf pushen? Was spuckt die Konsole aus? Wenn du noch nicht sattelfest bist, empfielt es sich Eclipse mit dem ADT-Plugin zu verwenden. Dann kannst du das hinauf pushen und starten der App automatisch per IDE erledigen. Und Logcat ist auch automatisch angehängt.

Logcat gibt's übrigens auch in der Konsole wenn du Eclipse nicht verwenden möchtest. 

PS: C# ist mittlerweile weit weg von Java. Wenn du dich noch an .Net 1.1 erinnerst orientier dich daran. Übrigens musst du in der Doku nachschauen welche Methode was bewirkt. Nicht jedes XML-Attribut hat immer eine entsprechende Methode.


----------



## m3ndax (22. Nov 2011)

Achso, nein ich entwickel mit eclipse und AVD und SDK Manager von Android.
analogClock1.setVisibility(View.VISIBLE)/>    funktioniert übrigends auch nicht so...
Hast du vielleicht einen anderen vorschlag?

Trotzdem Danke für die antwort =)


----------



## schlingel (22. Nov 2011)

Verwendest du das in der Activity oder im dazugehörigen layout-XML?

Im XML ist es ein Attribut (android:visibility="gone"), im Code funktioniert das auf jeden Fall. Zeig einmal her deinen Code. Und hol dir den Logcat. Wenn du deine App startest - sofern sie sich kompilieren läßt - sollte in der Console-View angezeigt werden dass die App installiert und gestartet wird worauf du dann in logcat Debug-Ausgaben bekommen solltest.

Aber zeig auf jeden Fall auch deinen Code her. Übrigens, ist alles automatisch visible du musst es also nicht extra anzeigen lassen wenn du es vorher nicht versteckt hast.


----------



## m3ndax (22. Nov 2011)

Ich hab einfach mal 2 buttons mit dem designer in der main.xml erstellt

    <Button
        android:id="@+id/button1"
        android:layout_width="96dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.07"
        android:text="Button" 
        button2.android:visibility="gone"/>

beim anderen button die standarteinstellungen auf invisible gestellt...


----------



## m3ndax (22. Nov 2011)

schlingel hat gesagt.:


> Verwendest du das in der Activity oder im dazugehörigen layout-XML?
> 
> Aber zeig auf jeden Fall auch deinen Code her. Übrigens, ist alles automatisch visible du musst es also nicht extra anzeigen lassen wenn du es vorher nicht versteckt hast.



Ich will aber wenn man auf den einen Button klickt, dass dann erst der andere angezeigt wird....


----------



## schlingel (23. Nov 2011)

Also, das hört sich so an als solltest du einmal ein bisschen in das Manual schauen. Ein guter Anfangspunkt ist dieser Post . Der listet nicht nur Tutorials auf sondern auch eBooks. Eines davon hab ich geposted (Android - Grundlagen ...) was sehr gut für dich geeignet sein sollte.

Aber ich will mal nicht so sein und helfe dir mit dem Anfang. Als prinzipiell benötigst du einmal ein xml dass dir dein Layout beschreibt:

[XML]
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  androidrientation="vertical">
  <Button
       android:id="@+id/btnShow"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:text="show" />

  <Button
       android:id="@btnInvisible"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:text="tada!"
       android:visibility="gone" />
</LinearLayout>
[/XML]

Damit hast du einmal ein ganz, ganz simples Layout dass nur die zwei Buttons anzeigt. Wenn du das File im Ordner res/layout als test.xml ablegst kannst du dessen ID per R.layout.test ansprechen. Als nächstes musst du noch die Activity entsprechend damit verdrahten:


```
/* Hier fehlen imports! */
public class MyActivity extends Activity {
        private Button btnShow;

        private Button btnInvisible;
  
  	@Override
	public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.test);
  
           /* Jetzt holen wir die Button-Instanz über das gesetzte Layout */
           btnShow = (Button)findViewById(R.id.btnShow); // Wenn hier null zurückkommt ist das falsche Layout gesetzt oder die ID falsch.
           btnInvisible = (Button)findViewById(R.id.btnInvisible);
           btnShow.setOnClickListener(new OnClickListener() {
                        public void onClick(View v) {
                              btnInvisible.setVisibility(View.VISIBLE);
			}
           });
        }
}
```

Tu dir den Gefallen und improvisier nicht. Google hat hier ein wunderbares System geschaffen dass sich ein ganz klein wenig wie WPF oder Silverlight anfühlt - aber eben doch ganz anders ist. (Keine RoutedEvents, keine Converter, kein MVVM, etc.)

Java per se programmiert sich komplett anders als C#. Ich war selber 2,5 Jahre als .Net-Entwickler tätig und bin bei meinem Umstieg in so einige Fallstricke getappt. Hier kannst du ein paar Gedanken dazu nachlesen.


----------

