如何在黑莓上突出显示焦点自定义按钮域(ImageButtonField)?

Posted

技术标签:

【中文标题】如何在黑莓上突出显示焦点自定义按钮域(ImageButtonField)?【英文标题】:How to highlight focused custom buttonfield (ImageButtonField) on Blackberry? 【发布时间】:2012-02-13 16:18:48 【问题描述】:

我创建了一个自定义 ButtonField 类,其中有一个图像作为按钮。但是,我希望能够选择此图像并知道它已被选中,无论是通过部分突出显示它还是在它周围放置一个正方形,等等。我的 UI 中有一个 BitmapField,当我选择它时它以蓝色突出显示,但我使用 ImageButtonField 的其他图像没有蓝色突出显示。我不希望位图在被选中时完全消失。

这里是代码:

package mypackage;

import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.Characters;
import net.rim.device.api.ui.component.BitmapField;

    public class ImageButtonField extends BitmapField

    public ImageButtonField(Bitmap image) 
        super(image);
    

    public boolean isFocusable() 
        return true;
    

    protected boolean navigationClick(int status, int time) 
        fieldChangeNotify(0);
        return true;
    

    protected boolean trackwheelClick(int status, int time) 
        fieldChangeNotify(0);
        return true;
    

    protected boolean keyChar(char character, int status, int time) 
        if(Characters.ENTER == character || Characters.SPACE == character) 
            fieldChangeNotify(0);
            return true;
        
        return super.keyChar(character, status, time);
    

任何修改这个类以使其工作的帮助都会有很大帮助。我尝试完成这项工作没有成功!

【问题讨论】:

【参考方案1】:

要删除默认样式属性,您可以添加以下方法:

protected void applyTheme(Graphics arg0, boolean arg1) 


protected void drawFocus(Graphics graphics, boolean on) 

您可以覆盖paint方法并通过检查焦点状态来绘制您想要的任何东西,例如以下代码将在位图图像上绘制一个红色透明层。

protected void paint(Graphics graphics) 
    super.paint(graphics);
    if (isFocus()) 
        graphics.setGlobalAlpha(128);
        graphics.setColor(0xFF0000);
        graphics.fillRect(0, 0, getWidth(), getHeight());
    

其实我没有很好地理解你的问题:)。

【讨论】:

谢谢!天哪,我花了这么长时间才弄清楚这一点!你对我的帮助比你知道的还要多! :D

以上是关于如何在黑莓上突出显示焦点自定义按钮域(ImageButtonField)?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式让所有进程在黑莓上运行

如何在黑莓10中处理自定义控件的触摸事件

能够在黑莓地图中显示多个位置,但地图的位置是固定的。我无法放大和缩小

如何在黑莓应用程序中制作超链接?

黑莓推出原生网络浏览器

在 Swift (tvOS) 中,如何更改 UIButton 的突出显示和焦点颜色?