2017-04-07 11 views
1

Ich habe eine LienarLayout mit einer Button drin. Ich habe eine OnClickListener auf der Button und der LinearLayout. Irgendwann möchte ich das Button deaktivieren und das onClick Ereignis dem Eltern LinearLayout übergeben. Ich habe herausgefunden, dass Sie dies erreichen, indem Sie Button.setClickable(flase) setzen. Was funktioniert und der LinearLayout bekommt den Klick, aber die Klick - Animation Button wird immer noch abgespielt. Noch schlimmer, wenn ich auf die LinearLayout klicke, wo die Button nicht gezeichnet wird, spielt die Schaltfläche Click Animation noch!Deaktivieren Schaltfläche klicken Animation ohne SetEnable (false)

Wenn jemand weiß, wie ich erreichen kann, was ich will, würde ich es sehr schätzen.

S.S .: Der Grund, warum ich Button.setEnabled(false) nicht verwenden möchte, ist, weil ich nicht möchte, dass die Schaltfläche deaktiviert aussieht. Ich möchte auch in der Lage sein, den klickbaren Zustand der Schaltfläche bei Bedarf zu aktivieren/deaktivieren. Also grundsätzlich möchte ich, dass der Button manchmal aktiv ist und dann andere Male für den Click zum LinearLayout durchläuft.

Der Code - xml:

<LinearLayout 
    android:id="@+id/linearLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="?android:attr/selectableItemBackground"> 

    <Button 
     android:id="@+id/button" 
     style="?android:attr/buttonBarButtonStyle" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:text="button"/> 

</LinearLayout> 

Der Code - java:

Button btn = (Button) view.findViewById(R.id.button); 
btn.setClickable(false); 

Vor Klick: Before click Während Klick auf Linearlayout: During click on LinearLayout

+0

Sie können 'button.setOnClickListener (null)' verwenden, wenn Sie keinen Klick erreichen möchten und den Listener jederzeit in Übereinstimmung mit der Anforderung einstellen können. –

+0

Ich kann einige Workaround-Optionen vorschlagen: 1) Touch-Listener anstelle von Klick verwenden. 2) Setzen Sie einen statischen Hintergrund auf die Schaltfläche (ohne die Zustände zu zeichnen), 3) platzieren Sie eine anklickbare Ansicht über die Schaltfläche, so dass alle Klicks erfasst werden. –

Antwort

3

Sie können einfach geben background Farbe, so wie die Animation nicht passieren wird.

android:background="@android:color/white" 

Wenn Sie klickbare Animation zurück möchten, verwenden Sie diese

TypedValue outValue = new TypedValue(); 
getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, outValue, true); 
yourButton.setBackgroundResource(outValue.resourceId); 

Dies wird dieses Problem lösen.

+0

Wie würde ich es wieder normal wiederherstellen, wenn ich es wieder klickbar mache? – rozina

+0

bearbeitet die Antwort –

Verwandte Themen