22

android:clickableXMLではいつ使用する必要がありますか?私たちは今までにすべきですか?
そのようなXML宣言とコード内宣言の間に違いはありますmyButton.setOnClickListenerか?ドキュメントを読みましたが、この属性をいつ、なぜ使用する必要があるのか​​わかりませんでした。

PS。私は広告SDKを実装していましたが、開発者が一緒に使用android:clickableしていることがわかり、WebViewなぜ彼らがそれを使用したのか興味をそそられました。

4

6 に答える 6

9

ドキュメントが述べているように、そして私が知る限り:

clickable-このビューがクリックイベントに反応するかどうかを定義します。「true」または「false」のブール値である必要があります。

したがって、たとえば、WebviewまたはViewを宣言してこのビューにlayout.xmlを設定しようとすると、属性を指定しない限り、イベントは発生しません。OnClickListenerOnClick

  android:clickable=true
于 2011-10-19T07:04:31.157 に答える
8

clickableクリックを消費してトップビューの下のビューに移動しないようにするビューが必要な場合に便利なようです。

たとえば、特定の時間FrameLayoutに原資産の上に表示するものがあります。RelativeLayoutユーザーが下にあるものをクリックするとEditText、フォーカスがその下に移動しEditTextます。FrameLayoutがまだ表示されていたときは本当に迷惑です。これで、ユーザーはキーボードがポップアップした理由や入力している場所がわかりません。

を設定clickable="true"すると、ユーザーが誤って基になるフィールドをFrameLayoutクリックすることがなくなりました。EditText

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    ...>
    <EditText>
    <EditText>
    <EditText>
    <!-- FrameLayout with grayed-out background. -->
    <FrameLayout
        android:id="@+id/sometimes_visible_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#80808080"
        android:clickable="true"
        android:visibility="gone"
        android:focusable="true"
        ...>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            ...>
            <View>
            <View>
        </LinearLayout>
    </FrameLayout>
</RelativeLayout>
于 2017-09-07T17:07:54.430 に答える
2

view.setOnClickListenerのいずれかに設定している場合View、たとえば:myButton.setOnClickListener(new OnClickListener)デフォルトでは、と見なされclickable="true"ます。

したがって、のようなXMLファイルでそのことを言及する必要はありません android:clickable="true"onClick()イベントは、を使用せずに発生し ますandroid:clickable="true"

于 2017-06-13T14:37:56.460 に答える
1

アクティビティをスワイプ可能にした状況を経験しました(左/右または右/左にスワイプして前後に移動します)。一部の画面には、LinearLayoutのみで埋められた場所がありました。で実行したときにスワイプアクションが登録されない原因となるレイアウトはありOnClickListenerませんでした(必要ありませんでした)LinearLayout。設定するandroid:clickable="true"ことで問題は解決しました。

あなたの質問に答えるために、そして上記のように、-属性を使用するclickableことが役立つ場合があります。

anを設定することは-attributeOnClickListenerを設定することと同じであるとは言えないと思いますが、確かに設定するとクリック可能になり、-attributeは役に立たなくなります(その特定の状況では)。clickableOnClickListenerViewclickable

于 2011-10-19T07:05:36.787 に答える
1

ご参考までに; 属性を使用するandroid:onClick=""か、プログラムで呼び出すsetOnClickListener(...)と、Viewクラスはclickableフラグをに設定しtrueます。

/**
 * Register a callback to be invoked when this view is clicked. If this view is not
 * clickable, it becomes clickable.
 *
 * @param l The callback that will run
 *
 * @see #setClickable(boolean)
 */
public void setOnClickListener(@Nullable OnClickListener l) {
    if (!isClickable()) {
        setClickable(true);
    }
    getListenerInfo().mOnClickListener = l;
}

クリック可能フラグを自分で設定する必要がある場合については、ほとんどの場合、ビューをクリックできないようにする場合、たとえば、一部のデータの読み込み中に繰り返しの呼び出しを停止する場合などです。

于 2019-05-15T03:16:25.067 に答える
0

その場合になぜ使用したのかはわかりませんが、linearLayoutを拡張するクラスを作成するときに使用する必要がありました。

独自の「コントロール」を作成し、クリック可能にしたかったので、それを使用する必要がありました。

これは、使用するシナリオの1つです。

于 2011-10-19T07:05:42.603 に答える