2016-10-10 5 views
0

私はカスタムボタンレイアウトを持っています。その中心にある通常のボタンと背景のFrameLayout、テキストの隣にアイコンがあります。OnClickListenerレイアウト検出

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<FrameLayout 
    android:id="@+id/framelayout" 
    style="?android:attr/buttonStyle" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentStart="true" 
    android:layout_centerVertical="true" 
    android:background="#F00"> 

    <android.support.v7.widget.AppCompatButton 
     android:id="@+id/buttonWithIcon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal|bottom" 
     android:background="@null" 
     android:drawableStart="@android:drawable/ic_delete" 
     android:gravity="center" 
     android:textAllCaps="false" 
     android:textColor="#FFF"/> 
</FrameLayout> 

Iは、ONボタンonClickListenersを有し、Iを実現、バックグラウンド(=でframeLayout)をクリック検出されませんでした。このため、FrameLayoutとButtonのクリックを検出するonClickListenerが必要です。これは、同じ動作をする2つのリスナーを必要としません。

RelativeLayoutにIDを割り当てようとしましたが、レイアウトが見つかりませんでした(= null)。

多分私のボタンのレイアウトは最適ではありません。しかし、私はアイコンとテキストの間にスペースを入れずに、テキストの横にアイコンがある全角ボタンが必要です。

アイコンがこの

button.setCompoundDrawablesWithIntrinsicBounds(R.mipmap.ic_icon, 0, 0,0);

ように設定されますが、あなたに

+0

必要なのは、最後に「スペース」がないボタンと次のビュー(アイコン)が必要な場合は、[setPadding](https:// developers)で削除する方法です。 android.com/reference/android/view/View.html#setPadding(int,%20int,%20int,%20int)): 'button.setPadding(0,0,0,0);'これで解決できなかった場合は、 ViewHolderの[Maginsのレイアウトパラメータ](https://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html) – Bonatti

答えて

1

OnClickListenerを両方のビューに追加することができます。そうすれば、あなたはコードを一度しか書いておらず、FrameLayoutButtonのどちらかをクリックすると、同じコードが実行されます。

0

あなたは彼らがクリッカブルになりたいあなたのビューのすべてを入れて、全体のビューのすべてのclickListenersを削除することができますありがとうございました。

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<LinearLayout 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/linearlayout"> 

<FrameLayout 
    style="?android:attr/buttonStyle" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentStart="true" 
    android:layout_centerVertical="true" 
    android:background="#F00"> 

    <android.support.v7.widget.AppCompatButton 
     android:id="@+id/buttonWithIcon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal|bottom" 
     android:background="@null" 
     android:drawableStart="@android:drawable/ic_delete" 
     android:gravity="center" 
     android:textAllCaps="false" 
     android:textColor="#FFF"/> 
</FrameLayout> 
</LinearLayout> 

とのLinearLayoutにこのclickListenerを追加します。

LinearLayout linearlayout=(linearLayout)findViewById(R.id.linearlayout); 
linearlayout.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //Add Your Code Here 
      } 
     }); 
+0

これはまさに私がやっていることです - このソリューションでは、クリックボタン(アイコンとテキスト)は登録されていません。 – newclear

+0

私の回答を編集しました –

+0

ありがとうございました。編集した回答をプロジェクトに追加しましたが、ボタンのクリックはまだ登録されていません。 – newclear

0

ビュー引数を使用しての活動で関数を作成し、あなたのレイアウトで、あなたの二つのビューにonClickのを設定します。

活動:

public void myAction(View v){ 
// Do what you want 
} 

あなたのレイアウト:

<FrameLayout 
    android:id="@+id/framelayout" 
    style="?android:attr/buttonStyle" 
    android:onClick="myAction" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentStart="true" 
    android:layout_centerVertical="true" 
    android:background="#F00"> 

    <android.support.v7.widget.AppCompatButton 
     android:id="@+id/buttonWithIcon" 
     android:onClick="myAction" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal|bottom" 
     android:background="@null" 
     android:drawableStart="@android:drawable/ic_delete" 
     android:gravity="center" 
     android:textAllCaps="false" 
     android:textColor="#FFF"/> 
</FrameLayout> 

はたぶんまた、ボタンにイベントをディスパッチすることができる、私は今テストすることはできませんだけでframeLayoutに追加します: )