# Man sieht nicht ob Button gedrückt wurde!



## DrDevil_Gamer (12. Jul 2014)

Hallo,
seit ich den Button eine Background Farbe  gegeben habe, sehe ich nicht mehr ob der Button gedrückt wurde.
Woran kann das liegen?

Danke schon mal im voraus.


----------



## turtle (12. Jul 2014)

Ich fasse es nicht

Du gibst NULL Informationen und erwartest von uns eine Antwort?


----------



## DrDevil_Gamer (13. Jul 2014)

Sorry ist das erste Forum in das schreibe, ich hoffe ich drücke mich jetzt besser aus.

Also in meinem Programm habe ich ein Button und wenn man halt auf dem Button drückt blickt der Button kurz auf als Zeichen das er gedrückt wurde. So aber jetzt habe ich die Background Farbe vom Button geändert und zwar so.

```
<Button
                android:id="@+id/button1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="#99000000"
                android:text="@string/Button1"
                android:textColor="#FFFFFF" />
```

Aber jetzt sieht man nicht mehr ob der Button gedrückt wurde bzw sieht man nicht mehr das er kurz auf blickt wenn ich drauf drücke.


----------



## themrdomi (13. Jul 2014)

Hallo,
wenn du einen benutzerdefinierten Button nimmst, (also eine bestimmte Farbe) ist der Button immer in dieser Farbe.
Ich zeige dir mal, wie ich das gelöst habe:
Ich habe zwei Bilder erstellt (in Photoshop, geht aber auch in Paint oder Gimp), und diese tausche ich dann bei dem Klick auf den Button aus.
Dafür erstelle ich eine neue XML-Datei im Ordner Drawable und rufe diese dann auf:

Das ist der Code für den Button:

```
<Button
        android:id="@+id/button1"
        android:layout_width="325dp"
        android:layout_height="50dp"
        android:layout_marginBottom="20dp"
        android:layout_marginLeft="18dp"
        android:layout_weight="0.005"
        android:background="@drawable/custom" />
```

Das ist der Code für die neue XML-Datei, die nennst du bitte custom.xml:

```
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" android:drawable="@drawable/button1_pressed"></item>
    <item android:drawable="@drawable/button1"></item>

</selector>
```
Deine zwei Buttons müssen natürlich auch im Drawable Ordner gespeichert werden.

Ich hoffe, ich konnte dir helfen.

Lg
Dominik


----------



## DrDevil_Gamer (14. Jul 2014)

Also ich habe das jetzt so gemacht. 
Das ist der Code vom Button.

```
<Button
                android:id="@+id/button1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/Button1"
                android:textColor="#FFFFFF"
                android:background="@drawable/custom" />
```

Und das ist der Code von der XML Datei 

```
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
  
    <item android:state_pressed="true" android:background="#FFDE00"></item>
    <item android:background="#99000000"></item>

</selector>
```
Aber wenn ich Die App jetzt auf meinem Handy mache dann sagt er mir "Leider wurde (Name der App) beendet.

habe ich vlt etwas falsch gemacht?


----------



## dzim (14. Jul 2014)

Bestimmt hast du dass, aber was sollen wir deiner Meinung nach machen? Rätselraten? Wie Turtle schon sagte: Gib uns mehr Informationen! Was sagt Logcat (die Debug-Konsole)? Es wird 100%ig ein Stacktrace ausgegeben und den brauchen eigentlich nicht nur wir, sondern auch du, denn sonst müssen wir alle immer in die grosse Glasskugel schauen...


----------



## DrDevil_Gamer (14. Jul 2014)

Bei mir steht in der Logcat
das hier.


```
07-14 05:32:31.463: E/AndroidRuntime(1901): FATAL EXCEPTION: main
07-14 05:32:31.463: E/AndroidRuntime(1901): Process: com.example.soundboard007, PID: 1901
07-14 05:32:31.463: E/AndroidRuntime(1901): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.soundboard007/com.example.soundboard007.DetlefSoundboard}: android.view.InflateException: Binary XML file line #23: Error inflating class android.widget.Button
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.app.ActivityThread.access$700(ActivityThread.java:135)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.os.Handler.dispatchMessage(Handler.java:102)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.os.Looper.loop(Looper.java:137)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.app.ActivityThread.main(ActivityThread.java:4998)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at java.lang.reflect.Method.invokeNative(Native Method)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at java.lang.reflect.Method.invoke(Method.java:515)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at dalvik.system.NativeStart.main(Native Method)
07-14 05:32:31.463: E/AndroidRuntime(1901): Caused by: android.view.InflateException: Binary XML file line #23: Error inflating class android.widget.Button
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.view.LayoutInflater.createView(LayoutInflater.java:620)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.app.Activity.setContentView(Activity.java:1928)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at com.example.soundboard007.DetlefSoundboard.onCreate(DetlefSoundboard.java:58)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.app.Activity.performCreate(Activity.java:5243)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	... 11 more
07-14 05:32:31.463: E/AndroidRuntime(1901): Caused by: java.lang.reflect.InvocationTargetException
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at java.lang.reflect.Constructor.constructNative(Native Method)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.view.LayoutInflater.createView(LayoutInflater.java:594)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	... 26 more
07-14 05:32:31.463: E/AndroidRuntime(1901): Caused by: android.content.res.Resources$NotFoundException: File res/drawable-xhdpi/custom.xml from drawable resource ID #0x7f020000
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.content.res.Resources.loadDrawable(Resources.java:2096)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.view.View.<init>(View.java:3545)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.widget.TextView.<init>(TextView.java:622)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.widget.Button.<init>(Button.java:107)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.widget.Button.<init>(Button.java:103)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	... 29 more
07-14 05:32:31.463: E/AndroidRuntime(1901): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #4: <item> tag requires a 'drawable' attribute or child tag defining a drawable
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:181)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:937)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.graphics.drawable.Drawable.createFromXml(Drawable.java:877)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	at android.content.res.Resources.loadDrawable(Resources.java:2092)
07-14 05:32:31.463: E/AndroidRuntime(1901): 	... 34 more
```

Aber ich weiß jetzt nicht was ich damit anfangen soll ich bin noch Neuling.

Ich hoffe ihr könnt damit was anfangen.


----------



## dzim (14. Jul 2014)

Aha. Du hast den Code von @themrdomi schlecht kopiert: Selektoren (das, was du als "background" an deinen Butten hängst) besitzen selbst kein "background" Attribut (was dir (zumindest in Eclipse) auch noch nicht einal vorgeschlagen wird!), sondern nur diverse state-Attribute und das "drawable"-Attribut. Heisst: mach aus "background" bitte als erstes "drawable".
Ich vermute, dass das aber auch nicht direkt klappen wird, und du dann entweder eine separate drawable dafür anlegen musst, die so etwas wie das hier enthält
[XML]
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <solid android:color="@color/xyz"/>
</shape>
[/XML]
(Nur ein Beispiel, du hast da schon noch eine Reihe mehr Möglichkeiten. Suche im Netzt nach "Android Drawable" oder so.)

Oder indem du inline irgendetwas á la [XML]<item><color android:color="@color/xyz"/></item>[/XML] angibst (vergiss dann aber die "state"-Attribute nicht).

Mein Default-Button-Selector sieht z.B. so aus:
[XML]
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable="@drawable/base_shape_transparent" />
    <item android:state_pressed="true" android:drawable="@drawable/base_shape_transparent_pressed" />
    <item android:state_enabled="true" android:drawable="@drawable/base_shape_transparent" />
    <item android:state_enabled="false" android:drawable="@drawable/base_shape_transparent_disabled" />
    <item android:drawable="@drawable/base_shape_transparent" />
</selector>
[/XML]

die dazugehörige *base_shape_transparent.xml* sieht dann so aus
[XML]
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <gradient
        android:angle="270"
        android:centerColor="@color/black"
        android:endColor="@color/darkestGrey"
        android:startColor="@color/darkestGrey" />
    <corners android:radius="5dp" />
    <stroke
        android:width="1dp"
        android:color="@color/darkGrey" />
    <padding
        android:bottom="2dp"
        android:left="5dp"
        android:right="5dp"
        android:top="2dp" />
</shape>
[/XML]
(_*base_shape_transparent_pressed*_ und _*base_shape_transparent_disabled*_ variieren nur die Farben ein wenig.)


----------



## themrdomi (14. Jul 2014)

Hi,
soviel ich weiß können die Farbcodes nur sechsstellig sein!
Deiner (#99000000) hat aber 8 Stellen.

Lg


----------



## dzim (14. Jul 2014)

@themrdomi: 8 Stellen gehen, die ersten beiden sind dann der Alpha-Wert. Verwende ich an einigen Stellen auch. Primär bei Overlays für die Map, oder um den Disabled-Zustand darzustellen.

Sein Problem ist einfach nur ein invalides XML. Ein "background"-Attribut gibt es für die item-Tags in Drawable-Selektoren nicht, sondern nur ein "drawable"-Attribut.


----------



## DrDevil_Gamer (14. Jul 2014)

Danke danke danke es hat funktioniert.:toll::applaus:


----------

