我在高级ui示例中使用位图按钮字段。默认情况下,在5.0 jre中没有禁用按钮的方法,所以我添加了下面的代码来禁用按钮,然后禁用按钮的功能正在工作,但setchangelistener不工作,这是我的问题。下面是我为禁用button..please检查而添加的代码。我是否需要更改调用操作方法中的任何内容?
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;
}发布于 2012-07-15 09:16:13
这是一个discussion on the BlackBerry forums about this。
我有时所做的实际上是利用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);
}然后,我可以设置一个更改监听器,或者禁用该按钮,就像在我的manager类中一样:
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);但是,要知道,如果您禁用了a按钮,这意味着您的更改监听器将不会被调用。这就是它应该如何工作的。仅当按钮处于启用状态并因此可单击时,才会调用更改侦听器。
另外,请注意,为了使按钮在禁用(不可编辑)时看起来不同,我覆盖了paint(),以便在按钮禁用时设置不同的Alpha值。你没有提到这一点,所以如果你不喜欢,你当然可以把它拿出来。
https://stackoverflow.com/questions/11449613
复制相似问题