2017-04-07 23 views
1

LienarLayoutにはButtonがあります。私はButtonLinearLayoutの両方にOnClickListenerを持っています。ある時点で、Buttonを無効にして、onClickイベントを親のLinearLayoutに渡したいと思います。 Button.setClickable(flase)を設定してこれを達成したことがわかりました。どちらが動作し、LinearLayoutがクリックを取得しますが、Buttonのクリックアニメーションは引き続き再生されます。さらに悪いことに、Buttonが描かれていないLinearLayoutをクリックすると、ボタンのクリックアニメーションが再生されます。ボタンをクリックしてアニメーションを無効にするEnEable(false)

私が欲しいものをどのように達成できるか知っていれば、私はそれを高く評価します。

P .:私がButton.setEnabled(false)を使用したくない理由は、ボタンを無効にしたくないためです。オンデマンドでボタンのクリック可能な状態を有効/無効にすることもできます。ですから、基本的にはボタンがアクティブになるようにし、クリックがLinearLayoutに渡されるようにします。

コード - 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> 

コード - Javaの:クリックする前に

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

Before click クリックの際のLinearLayout上: During click on LinearLayout

+0

クリックを達成したくない場合は 'button.setOnClickListener(null)'を使用し、将来必要に応じてリスナーを設定することができます。 –

+0

いくつかの回避策を提案できます:1)クリックの代わりにタッチリスナーを使用する。 2)ボタンに静的な画像の背景を設定します(状態描画可能ではありません)。3)クリック可能なビューをボタンの上に置くと、すべてのクリックを捕捉します。 –

答えて

3

あなたは単にbackgroundを与えることができますアニメーションが発生しないように色を変更します。

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

あなたが戻ってクリック可能なアニメーションを使用した場合、これは、この問題を解決します。この

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

を使用しています。

+0

もう一度クリック可能にすれば元の状態に戻すことはできますか? – rozina

+0

は解答を編集しました –

関連する問題