首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在blackberry的高级ui示例中使用bitmapbuttonfield禁用按钮

如何在blackberry的高级ui示例中使用bitmapbuttonfield禁用按钮
EN

Stack Overflow用户
提问于 2012-07-12 18:10:54
回答 1查看 315关注 0票数 1

我在高级ui示例中使用位图按钮字段。默认情况下,在5.0 jre中没有禁用按钮的方法,所以我添加了下面的代码来禁用按钮,然后禁用按钮的功能正在工作,但setchangelistener不工作,这是我的问题。下面是我为禁用button..please检查而添加的代码。我是否需要更改调用操作方法中的任何内容?

代码语言:javascript
复制
 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;
 }
EN

回答 1

Stack Overflow用户

发布于 2012-07-15 09:16:13

这是一个discussion on the BlackBerry forums about this

我有时所做的实际上是利用Field对象的isEditable()属性,因为可编辑性和被启用在某种程度上是相似的概念。如果您真的想保留单独的isDisabled()代码,那也没问题。只需替换下面我使用isEditable() (记住反转布尔值...这就是为什么编程总是是肯定的.使您的方法成为isEnabled()而不是isDisabled())。

因此,我只需将此代码添加到BitmapButtonFieldBaseButtonField中,而不是上面发布的任何代码

代码语言:javascript
复制
public boolean isFocusable() {
   return isEditable() && super.isFocusable();
}

这是BitmapButtonField格式的

代码语言:javascript
复制
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类中一样:

代码语言:javascript
复制
  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值。你没有提到这一点,所以如果你不喜欢,你当然可以把它拿出来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11449613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档