我在高级ui示例中使用位图按钮字段。默认情况下,在5.0 jre中没有任何方法可以禁用该按钮,因此,我添加了以下禁用和则禁用该按钮的功能起作用,但setchangelistener不起作用那是我的问题..这是我为禁用按钮添加的代码。。请查收。我需要更改invoke操作方法中的任何内容吗?
public boolean isDisable() {
return isDisable;
}
public void setDisable(boolean isDisable) {
this.isDisable = isDisable;
invalidate();
}
public boolean isFocusable() {
return isFocusable && !isDisable;
}
public void setFocusable(boolean isFocusable) {
this.isFocusable = isFocusable;
}
protected boolean invokeAction(int action) {
if (!isDisable){
fieldChangeNotify(0);
}
return true;
}
public boolean setEnabled() {
return false;
}
以下是BlackBerry论坛上关于此问题的讨论。
我有时所做的实际上是在Field
对象上使用isEditable()
属性,因为可编辑性和启用是有点相似的概念。如果您真的想保留单独的isDisabled()
代码,那没关系。只需替换下面我使用isEditable()
的地方(记住反转布尔值…这是总是以肯定的方式编程的原因之一…使您的方法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()
以设置不同的alpha值。你没有提到,所以如果你不喜欢,你当然可以把它拿出来。