7

次の XML レイアウトを使用するフラグメントがあります。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/card"
    android:clickable="true"
    android:onClick="editActions"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/title"
        style="@style/CardTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:duplicateParentState="true"
        android:text="@string/title_workstation" />

    <Button
        android:id="@+id/factory_button_edit"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:duplicateParentState="true"
        android:text="@string/label_edit" />

</LinearLayout>

ご覧のとおり、onClickパラメータが on に設定されていLinearLayoutます。これで、TextViewこれは正しくトリガーされ、すべての空の領域でトリガーされます。ただ、Button設定したonClickメソッドを呼び出しません。

これは正常ですか?のどこでも onClick メソッドが呼び出されるようにするには、どうすればよいLinearLayoutですか?

4

10 に答える 10

7

次のようなコードで、ボタンの onClick アクションを直接追加します。

Button btn = findViewById(R.id.factory_button_edit);
btn.setOnClickListener(button_click);

      OnClickListener button_click = new OnClickListener() {

        @Override
        public void onClick(View v) {
            editActions;
        }
    };

またはxmlを追加

android:onClick="editActions"

あなたのボタンに

于 2013-10-30T15:56:34.087 に答える
4

TouchDelegateを使用する必要があると思います:

Android は TouchDelegate クラスを提供して、親が子ビューのタッチ可能な領域を子の境界を超えて拡張できるようにします。これは、子を小さくする必要があるが、タッチ領域を大きくする必要がある場合に便利です。必要に応じて、このアプローチを使用して、子のタッチ領域を縮小することもできます。

于 2013-10-30T15:51:04.300 に答える
3

レイアウトを子でクリック可能にするには、すべての子にこのオプションを追加する必要があります:

 android:clickable="false"

その後、クリック処理は親上がります。

于 2015-07-23T04:26:26.637 に答える
2

さて、これがいくつかの子を持つバーで、このバーだけを子領域でクリック可能にしたい場合は、親のすべての子にこのオプションを追加してみてください:

android:clickable="false"

そしてもちろん、私のブログsetOnClickListenerの例のメインレイアウトに追加します

例:

<LinearLayout  
      android:id="@+id/parent"  
      android:layout_width="match_parent"  
      android:layout_height="wrap_content"  
      android:orientation="horizontal">  
      <ImageButton  
           android:clickable="false"  
           android:layout_width="40dp"  
           android:layout_height="40dp"  
           android:text="Cinema"  
           android:textSize="13sp"  
           android:layout_marginRight="10dp" />  
      <Button  
           android:clickable="false"  
           android:layout_width="match_parent"  
           android:layout_height="40dp"  
           android:text="Check in"  
           android:textSize="13sp"/>  
 </LinearLayout> 
于 2014-04-28T08:23:47.660 に答える
2

それをやってみてください

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/card"
    android:clickable="true"
    android:onClick="editActions"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/title"
        style="@style/CardTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/title_workstation" />

    <Button
        android:id="@+id/factory_button_edit"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="clickMe"
        android:text="@string/label_edit" />

</LinearLayout>

およびあなたのアクティビティまたはフラグメント

    public void editActions(View v) {
        Toast.makeText(this, "Layout", Toast.LENGTH_SHORT).show();
    }

    public void clickMe(View v) {
        Toast.makeText(this, "clickMe", Toast.LENGTH_SHORT).show();
    }
于 2013-10-30T16:01:51.077 に答える
0

ボタンのこのパラメーターを削除する必要があると思います。

android:duplicateParentState="true"
于 2013-10-30T16:02:54.223 に答える