Probleme mit duplicateParentState

  • Antworten:1
Marco S.
  • Forum-Beiträge: 105

16.04.2010, 10:54:44 via Website

Liebe Entwickler,

aktuell habe ich folgendes Problem, bei dem ich Hilfe benötige:


Ich möchte gerne einen "großen Button" in meinem Hauptmenü haben, der links ein Bild und rechts daneben 2 Texte (übereinander) hat.

Ich habe also einen ImageButton (spricht über android:background ein Xml mit selector und items an) und ein LinearLayout mit zwei TextViews.


Damit nun auch auf die Texte geklickt werden kann und automatisch die Grafik vom ImageButton verändert wird und das OnClickEvent getriggert wird, habe ich mir folgendes überlegt.

- ich packe alles in einen Container (TableRow in meinem Fall), der android:clickable="true" hat
- ImageButton bekommt ein android:duplicateParentState="true" und "erbt" damit alle Stati vom Parent (also dem Container TableRow)

Jetzt wirds seltsam: ich kann nun in der ganzen TableRow klicken, und es wird immer das Event getriggert und der Button visuell eingedrückt...

...es sei denn ich klicke dort wo das Image sitzt. Da passiert dann gar nichts. :mad:


Hat jemand eine Idee?

Viele Grüße,
Marco

— geändert am 16.04.2010, 10:56:58

Antworten
Marco S.
  • Forum-Beiträge: 105

17.04.2010, 11:23:06 via Website

Da noch keiner geantwortet hat hier etwas konkretes für euch.

Erstmal ein Screenshot:



Wie gesagt benutze ich um zu zeigen dass etwas geklickt wurde button_green.xml mit 2 verschiedenen Grafiken:

1<?xml version="1.0" encoding="utf-8"?>
2<selector xmlns:android="http://schemas.android.com/apk/res/android">
3
4 <item android:state_focused="false" android:state_pressed="false"
5 android:drawable="@drawable/button_green_normal" />
6
7 <item android:state_focused="true" android:state_pressed="false"
8 android:drawable="@drawable/button_green_normal" />
9
10 <item android:state_focused="false" android:state_pressed="true"
11 android:drawable="@drawable/button_green_hover" />
12
13 <item android:state_focused="true" android:state_pressed="true"
14 android:drawable="@drawable/button_green_hover" />
15
16</selector>

Dieses benutze ich als Hintergrund von den ImageButtons.

Das main.xml besteht aus einem Logo und den zwei grossen Buttons (LinearLayouts), die wiederum aus ImageButton und TextView bestehen.

Wichtig hier sind clickable=true beim LinearLayout und duplicateParentState=true beim ImageButton.

1<?xml version="1.0" encoding="utf-8"?>
2<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="fill_parent" android:layout_height="fill_parent"
4 android:background="#141414">
5
6 <ImageView android:id="@+id/top" android:layout_width="wrap_content"
7 android:layout_height="wrap_content" android:src="@drawable/top"
8 android:layout_alignParentTop="true" />
9
10 <!-- important here: android:clickable="true" -->
11 <LinearLayout android:id="@+id/bigbutton_1"
12 android:layout_below="@+id/top" android:layout_width="250dip"
13 android:layout_height="100dip" android:background="@drawable/bigbutton"
14 android:layout_centerHorizontal="true" android:layout_marginTop="25dip"
15 android:clickable="true">
16
17 <!-- important here: android:duplicateParentState="true" -->
18 <ImageButton android:id="@+id/green_button"
19 android:layout_width="wrap_content" android:layout_height="wrap_content"
20 android:background="@drawable/button_green" android:layout_gravity="center_vertical"
21 android:duplicateParentState="true" />
22
23 <TextView android:layout_width="wrap_content"
24 android:layout_height="wrap_content" android:text="You can click me !"
25 android:layout_gravity="center_vertical" android:textColor="#BBB5A5"
26 android:textSize="18dip" />
27 </LinearLayout>
28
29 <!-- important here: android:clickable="true" -->
30 <LinearLayout android:id="@+id/bigbutton_2"
31 android:layout_below="@+id/bigbutton_1" android:layout_width="250dip"
32 android:layout_height="100dip" android:background="@drawable/bigbutton"
33 android:layout_centerHorizontal="true" android:layout_marginTop="25dip"
34 android:clickable="true">
35
36 <!-- important here: android:duplicateParentState="true" -->
37 <ImageButton android:id="@+id/green_button"
38 android:layout_width="wrap_content" android:layout_height="wrap_content"
39 android:background="@drawable/button_red" android:layout_gravity="center_vertical"
40 android:textColor="#BBB5A5" android:textSize="18dip"
41 android:duplicateParentState="true" />
42
43 <TextView android:layout_width="wrap_content"
44 android:layout_height="wrap_content" android:text="Click me, too !"
45 android:layout_gravity="center_vertical" android:textColor="#BBB5A5"
46 android:textSize="18dip" />
47 </LinearLayout>
48
49</RelativeLayout>

Hat jemand eine Ahnung wie ich es hinbekommen kann?

Anbei noch der Link zum Projekt zum rumspielen: http://www.anddev.org/download.php?id=2058

Gruß & Danke,
Marco

Antworten