これについての BlackBerry フォーラムでの議論を次に示します。
私が時々行ったことは、オブジェクトのisEditable()
プロパティを実際に利用することです。これは、編集可能性Field
と有効化が多少似た概念であるためです。isDisabled()
本当に別のコードを保持したい場合は、それで問題ありません。以下で使用する場所を置き換えてisEditable()
ください(ブール値を逆にすることを忘れないでください...これは、常に肯定的にプログラムする理由の1つです...のisEnabled()
代わりにメソッドを作成してくださいisDisabled()
)。
したがって、上記のコードの代わりに、このコードをBitmapButtonField
、または のいずれかに追加しBaseButtonField
ます。
public boolean isFocusable() {
return isEditable() && super.isFocusable();
}
そしてこれでBitmapButtonField
:
protected void paint( Graphics g ) {
int oldAlpha = g.getGlobalAlpha();
int index = g.isDrawingStyleSet( Graphics.DRAWSTYLE_FOCUS ) ? FOCUS : NORMAL;
if (!isEditable()) {
g.setGlobalAlpha(100); // alpha is 0 to 255, so this is 100/255
}
g.drawBitmap( 0, 0, _bitmaps[index].getWidth(), _bitmaps[index].getHeight(), _bitmaps[index], 0, 0 );
g.setGlobalAlpha(oldAlpha);
}
次に、マネージャー クラスで次のように、変更リスナーをセットアップするか、ボタンを無効にします。
BitmapButtonField btn =
new BitmapButtonField(Bitmap.getBitmapResource("button.png"),
Bitmap.getBitmapResource("button-lit.png"));
btn.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
Dialog.alert("Button clicked!");
}
});
btn.setEditable(false); // this disables the button
add(btn);
ただし、ボタンを無効にすると、変更リスナーが呼び出されないことを理解してください。それは、それが機能するはずの方法のようなものです。変更リスナーは、ボタンが有効でクリック可能な場合にのみ呼び出されます。
また、ボタンが無効になっているとき (編集不可)にボタンの外観を変えるためにpaint()
、ボタンが無効になっているときに別のアルファ値を設定するようにオーバーライドします。あなたはそれについて言及していませんでしたので、それが気に入らなければ、それを取り除くことができます.