首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ToolTip定制

ToolTip定制
EN

Stack Overflow用户
提问于 2012-06-13 08:35:09
回答 2查看 574关注 0票数 0

参考前面我在堆栈上提出的问题,我创建了一个CustomToolTip

Custom pop Up

Dialog creation

现在,我已经创建了一个如下所示的CustomisedToolTip,但问题是整个屏幕被显示或占用了我需要的空间,以便前一个屏幕上的TextField在那一刻处于活动状态

自定义工具提示I生成的代码如下

代码语言:javascript
运行
AI代码解释
复制
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.Characters;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.BitmapField;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.PopupScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;
import net.rim.device.api.ui.decor.Background;
import net.rim.device.api.ui.decor.BackgroundFactory;


public class ToolTip extends PopupScreen{

     protected void applyTheme() {

        }

    private static VerticalFieldManager vfm=new VerticalFieldManager(Manager.NON_FOCUSABLE|Manager.FIELD_HCENTER){


        protected void paint(Graphics graphics) {

            graphics.setColor(0x00FFFFFF); 
            graphics.fillRect(0,0,getWidth(),getHeight());
            graphics.setColor(0x00000000);
            graphics.drawRect(0,0,getWidth(),getHeight());
            super.paint(graphics);

        }   


    };

    private LabelField lbl;
    private static int xPosition;
    private static int yPosition;
    private String message;
    private static Bitmap toolTipImg;
    private static BitmapField toolTipBmpFld;
    private static ButtonField button;
    public ToolTip(final String message,int xPos,int yPos,final Bitmap toolTipImg){
        super(vfm);
        this.xPosition=xPos;
        this.yPosition=yPos;
        this.message=message;
        this.toolTipImg=toolTipImg;


        button=new ButtonField(message,ButtonField.NON_FOCUSABLE){
            protected void paint(Graphics graphics) {
                graphics.drawBitmap(0,0, toolTipImg.getWidth(), toolTipImg.getHeight(), toolTipImg, 0, 0);
                super.paint(graphics);
            }
            protected void layout(int width, int height) {
                super.layout(width, height);
                setExtent( toolTipImg.getWidth(),  toolTipImg.getHeight());

            }
        };

        vfm.add(button);
    }

    protected void sublayout(int width, int height) {
        super.sublayout(width, height);
        setPosition(xPosition, yPosition);


    }

    protected boolean keyChar(char c, int status, int time) {
        // TODO Auto-generated method stub
        if(c==Characters.ESCAPE)
        {
            UiApplication.getUiApplication().popScreen(UiApplication.getUiApplication().getActiveScreen());
        }
        return super.keyChar(c, status, time);
    }


}

我能在黑莓中得到这样的弹出窗口吗?

EN

回答 2

Stack Overflow用户

发布于 2012-06-18 10:54:39

在这种情况下,重写MainScreenprotected void paint(Graphics graphics)方法会很有帮助。

Field获得焦点时,您可以告诉MainScreen (父屏幕)在完成自己的绘制后在指定位置绘制tooltip。当Field失去焦点时,您可以避免使用tooltip绘制。此外,还可以引入timer,以便在一段时间后删除tooltip

检查下面的实现。实现还需要改进,目前它只代表了我的想法。

代码语言:javascript
运行
AI代码解释
复制
public final class MyScreen extends MainScreen implements TooltipProtocol {

    private TooltipProtocol tooltipProtocolInstance;
    public MyScreen() {
        tooltipProtocolInstance = this;
        ButtonField bfOne = getButtonField("ButtonField One", "Tooltip One", 200, 20);
        ButtonField bfTwo = getButtonField("ButtonField Two", "Tooltip Two", 200, 60);
        add(bfOne);
        add(bfTwo);
    }

    private ButtonField getButtonField(String text, final String tooltiptext, final int x, final int y) {
        ButtonField bf = new ButtonField(text) {
            protected void onFocus(int direction) {
                tooltipProtocolInstance.showToolTipText(tooltiptext, x, y);
                super.onFocus(direction);
            }
            protected void onUnfocus() {
                tooltipProtocolInstance.hideToolTipText();
                super.onUnfocus();
            }
        };
        return bf;
    }

    private String toolTipText;
    private int xTooptip;
    private int yTooptip;
    private Timer tooltipTimer;


    public void showToolTipText(String text, int x, int y) {
        toolTipText = text;
        xTooptip = x;
        yTooptip = y;
        if (tooltipTimer != null) {
            tooltipTimer.cancel();
            tooltipTimer = null;
        }
        tooltipTimer = new Timer();
        tooltipTimer.schedule(new TimerTask() {
            public void run() {
                hideToolTipText();
            }
        }, 2000);

        invalidate();
    }

    public void hideToolTipText() {
        toolTipText = null;
        invalidate();
    }

    protected void paint(Graphics graphics) {
        super.paint(graphics);
        if (toolTipText != null) {
            int oldColor = graphics.getColor();
            graphics.setColor(Color.GREEN);
            graphics.drawText(toolTipText, xTooptip, yTooptip);
            graphics.setColor(oldColor);
        }
    }
}

interface TooltipProtocol {
    public void showToolTipText(String text, int x, int y);
    public void hideToolTipText();
}

以下是上述代码的输出:

当第一个按钮获得焦点时

当第一个按钮失去焦点,第二个按钮获得焦点时

当定时器隐藏第二个按钮的tooltip

票数 2
EN

Stack Overflow用户

发布于 2012-06-15 11:46:40

据我所知,您希望创建一个类似于工具提示的弹出式屏幕,但您希望用户与您的LoginScreen UI元素进行交互,而不会被工具提示挡住整个屏幕。

这在黑莓中是无法实现的。PropupScreen的行为就像一个对话框。当我们将弹出屏幕的实例推送到屏幕堆栈以使其在视觉上出现时,它总是会阻塞代理屏幕。除非从屏幕堆栈中删除弹出式窗口,否则无法与LoginScreen UI组件进行交互,尽管它们在视觉上是可用的。

有关更多详细信息,请访问Blackberry java文档:http://www.blackberry.com/developers/docs/6.0.0api/net/rim/device/api/ui/container/PopupScreen.html

编辑:1个

您可以创建一个提供计时器的ToolTip屏幕。你可以在谷歌上搜索,我相信你会得到很多代码样本。我在下面列出了一个链接。

http://v4ks1n.wordpress.com/2011/01/28/tooltips-class-for-blackberry/

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

https://stackoverflow.com/questions/11011042

复制
相关文章
pycharmpip升级失败_如何更新pip版本
打开文件管理找到当前虚拟环境下的 lib下的site-packages文件删除pip-18.0.dist-info文件
全栈程序员站长
2022/11/17
1.7K0
pycharmpip升级失败_如何更新pip版本
TensorFlow版本-如何更新?(踩坑版)
2017/10/26,我的tensorflow是从0.12版本升级到最新版本(1.3)的,基于python3.5的 升级 升级很简单(在这里感谢一下为简化 TensorFlow 安装过程的工程师们),
双愚
2018/05/28
10.3K0
使用 Github Dependabot 自动更新依赖版本
在软件开发工作中,代码依赖管理是个绕不过的话题。针对依赖管理,不同的语言、工具、平台和团队都有自己的解决方案。本文将会介绍 GitHub 推出依赖版本更新工具 Dependabot。正如其名字,Dependabot 就是一个机器人,用来自动更新项目依赖,确保仓库代码依赖的包和应用程序一直处于最新版本。经过一段时间的试用,笔者认为这是一款不错的工具,尤其对于开源项目。
郭旭东
2021/12/04
4K0
使用 Github Dependabot 自动更新依赖版本
如何在路由绑定中使用 IParsable
IParsable 是 .Net 7 中新增的接口,它可以将字符串转换为对应的实体。在 Controller 的 Route 绑定中可以使用 IParsable 来绑定复杂的实体。
newbe36524
2023/08/23
1470
pycharm2020.3.3使用_pycharm更新python版本
PyCharm–》Preferences –》Appearance &Behavior –》system setting–》Updates–》去掉勾选即可
全栈程序员站长
2022/09/26
4340
pycharm2020.3.3使用_pycharm更新python版本
Git 版本更新
操作平台:windows 打开 Git bash 工具 查看当前 git 版本信息 git --version 输入命令 git update //旧版 git update-git-for-windows //新版 等待完成即可
攻城狮杰森
2022/06/03
1.5K0
Git 版本更新
Gradle版本更新
但是上面两种方式有时会下载很慢,所以通过手动下载gradle https://services.gradle.org/distributions
IT晴天
2021/05/24
2.9K0
Intellij Idea 使用SVN更新到指定版本
默认情况下,changes视图,在Incoming中更新任意版本,整个项目都会被更新。这样会导致的更新到很多不应该更新的版本。
程序新视界
2022/05/06
2.7K0
Intellij Idea 使用SVN更新到指定版本
WordPress 版本更新
WordPress 是一个内容管理系统 (WCM),即它是一种以最佳方式组织创建、存储和展示 Web 内容的整个过程的工具。WordPress 作为一种改进工具开始了它的旅程,以增强日常写作的常规排版。但它被视为一种博客工具,当我们进入今年最后一个季度时,WordPress 成为最常用的 WCM 系统,而且不仅在博客社区中也是如此。
海拥
2023/01/01
2.7K0
WordPress 版本更新
ios 版本更新提示-硬更新/软更新
步骤一: 将检测更新写到APPDelegate的applicationDidBecomeActive中
用户1219438
2019/01/03
1.3K0
【JetPack】数据绑定 DataBinding 简介 ( 使用要求 | Gradle 版本 | 定义数据类 | 定义数据绑定布局 | Activity 数据绑定 | 绑定类生成规则 )
1 . 数据绑定作用 : 不使用 Java 代码 , 直接在 layout 布局文件 中完成组件的 文本 , 图片 等数据 的设置 ;
韩曙亮
2023/03/27
1.1K0
【JetPack】数据绑定 DataBinding 简介 ( 使用要求 | Gradle 版本 | 定义数据类 | 定义数据绑定布局 | Activity 数据绑定 | 绑定类生成规则 )
win10 uwp 如何使用DataTemplate 转换绑定Event到Command绑定 ObservableCollectionDataTemplate 绑定 ViewM
这是数据模板,一般用在数组的绑定,显示数组中的元素。 假如我们有一个列表,列表里是书,包括书名、作者、还有出版,那么我们只有源信息,如何把它显示到我们的ListView,就需要DataTemplate。 使用很简单,我们可以定义在资源,也可以定义在ItemTemplate。 数据模板有绑定的问题。 我们使用Binding和WPF其实没有多少不同,在Mode只有OneWay,OneTime,TwoWay。我们使用的x:bind在DataTemplate才和原来有一些不同。 我们使用x:bind需要我们对我们数据的类型,这个在前没有,我开始不知,弄了好久,最后才知道,还有一个,UWP默认是OneTime,也就是绑定只有一次。
林德熙
2018/09/18
2.7K0
CentOS 使用 yum update 更新时保留特定版本的软件
有时需要保留特定版本的软件不升级,但升级其他软件,这时就需求用到下面的技巧。当CentOS/RHEL/Fedora下的Linux服务器使用 yum update 时命令如何排除选定的包呢?
用户1685462
2021/08/31
1.5K0
如何选择合适的 django 版本使用
然后,该如何选择一个合适的版本,是一股脑装最新版(很肯能存在一些小问题,如:与其他库的兼容性问题)还是有方法可寻呢,请看:
卓越笔记
2023/02/18
3.1K0
如何选择合适的 django 版本使用
更新pip版本的命令_升级pip版本的命令
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说更新pip版本的命令_升级pip版本的命令,希望能够帮助大家进步!!!
Java架构师必看
2022/06/09
7.7K0
浅谈android应用的版本更新
我们都知道一个软件不可能一个版本就能做到特别完美,都需要经过不断的修改和优化才能成为一个稳定的版本。我们需要不停的对软件进行 功能添加 ,bug修复以及性能上
再见孙悟空_
2023/02/10
6040
浅谈android应用的版本更新
更新 Ubuntu 系统的 Python 版本
apt的全称是“Advanced Packaging Tool”,是 Linux 系统下的一款安装包管理工具。在 Ubuntu 的终端中输入如下指令,目的是更新当前系统的软件并安装一个组件 software-properties-common。
老齐
2021/04/30
15.9K0
更新 Ubuntu 系统的 Python 版本
php curl 版本更新,php curl 更新
项目服务器使用的是阿里云centos6.8,默认的 curl 版本为7.19.您可以通过phpinfo()来查看版本或者shell
高久峰
2023/07/02
5670
点击加载更多

相似问题

如何预测y的x给定值(包括以前的x值和y值)

12

用拟合模型从Y值预测X值

13

给定数据点和y值,给出x值

18

在XYSeries中将重复X值的Y值相加

13

R: X对Y变化的预测值?

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档