87

これまで、ユーザーがボタンを押さないようにしたい場合は、を設定しbutton.setClickable(false);、通常はテキストをある種の灰色に変更していました(ボタンが無効になっていることをユーザーに知らせるため)。今日、私はそのsetEnabled()物件に出くわしました。

そこで、ドキュメントにアクセスして、以下のメソッドの説明を確認しました。

setEnabled(boolean enabled)
   Set the enabled state of this view.

これはどういう意味ですか?有効状態/クリック可能状態と無効状態/クリック不可状態の違いは何ですか?クリック可能なプロパティを使用することと、プロパティを使用することの違いを誰かに説明してもらえsetEnabled()ますか?いつ何を使うべきですか?Stack Overflowを検索しましたが、関連するものが見つかりませんでした。

4

7 に答える 7

86

それはどういう意味ですか?

「GUIウィジェット」のウィキペディアページの引用:

アプリケーションのコンテキストでは、ウィジェットは特定の時点で有効または無効にできます。有効なウィジェットには、キーストロークやマウスアクションなどのイベントに応答する機能があります。このようなイベントに応答できないウィジェットは無効と見なされます。無効になっているウィジェットの外観は、通常、有効になっているウィジェットとは異なります。無効になっているウィジェットは、明るい色で描画されているか、何らかの方法で視覚的に隠されている可能性があります。例については、右の画像を参照してください。

この概念は数十年前から存在しており、ほとんどのGUIフレームワークに見られます。

有効状態/クリック可能状態と無効状態/クリック不可状態の違いは何ですか?

Androidでは、クリックできないウィジェットはクリックイベントに応答しません。無効になっているウィジェットはクリックできないだけでなく、無効になっていることを視覚的に示します。

「..ボタンが視覚的に「無効」になるので、視覚的にどのように変更されますか?」とはどういう意味ですか?

のようにButton見えて応答するのButtonは、その背景です。これはStateListDrawableです。無効状態に使用される特定のイメージがあります。

于 2013-03-25T13:46:22.297 に答える
7

他の場所で言及されていない大きな違いは、ビューが重なっていることです。clickable=trueおよびenabled=falseのビューでは、背後にあるビューを押すことはできません。ただし、clickable = falseのビューでは、背後にあるビューを押すことができます。

于 2019-02-01T03:30:01.970 に答える
6

したがって、基本的に、有効にされたfalseは応答に応答せず、実行時に設定されたときにクリック可能なfalseはまだ応答し、私が試したばかりだと信じています。

于 2016-08-03T10:29:08.867 に答える
2

Dilipが言ったように、実行時に設定された場合、setClickableは機能しません。これを機能させるための秘訣は次のとおりです。

ToggleButton toggle = ...
toggle.setOnTouchListener(new ToggleButton.OnTouchListener() {

  @Override
  public boolean onTouch(View v, MotionEvent event) {
     // If true is returned, the event is eated by the TouchListener
     return !v.isClickable();
  }
});
于 2016-08-16T13:27:50.363 に答える
1

ビューは、外部キーボード、方向パッド(リモート/ゲームコントローラー)、および支援デバイス(スイッチスクリーンリーダー)にも応答できます。

于 2016-11-17T17:28:35.723 に答える
0

違いは上にリストされていますが、ヒントがあります。setOnClickListener()の後にsetClickable()を使用します。このため:

public void setOnClickListener(@Nullable OnClickListener l) {
    if (!isClickable()) {
        setClickable(true);
    }
    getListenerInfo().mOnClickListener = l;
}
于 2018-07-15T06:35:10.410 に答える
0

setClickable public void setClickable(ブールクリック可能)

特定のビューのクリックイベントを有効または無効にします。ビューがクリック可能になると、クリックするたびにその状態が「押された」状態に変わります。このビューのプロパティが無効になっている場合、状態は変更されません。

setEnabled public void setEnabled(ブール値が有効)

このビューの有効な状態を設定します。特定のビューが有効に設定されている場合は、パラメータでtrueを渡し、そうでない場合はfalseを渡します。

于 2018-08-20T11:19:09.633 に答える