CodenameOne - BrowserComponent 不可滚动

Posted

技术标签:

【中文标题】CodenameOne - BrowserComponent 不可滚动【英文标题】:CodenameOne - BrowserComponent not scrollable 【发布时间】:2021-11-18 07:36:45 【问题描述】:

这个示例项目(下载了“bare-bones”项目)显示了一个不滚动的 BrowserComponent。

顺便说一句,基本项目(由他们的在线模板生成器创建)不起作用(!),因为缺少一个文件。我将该文件从我的另一个 CN1 项目(实际上来自这个问题的那个)复制到示例项目中,现在它可以编译了。

public class MyApp extends Lifecycle 

@Override
public void runApp() 

    Form hi = new Form("Hi World", new BorderLayout());
    //Form hi = new Form("Hi World", new BoxLayout.y()); alternate version
    hi.setScrollable(false); //you can also comment this one
    hi.setScrollableY(false);//you can also comment this one
    hi.setScrollableX(false);//you can also comment this one
    Button helloButton = new Button("Hello World");
    hi.add(BorderLayout.NORTH,helloButton);
    //hi.add(helloButton); alternate version
    helloButton.addActionListener(e -> hello());
    hi.getToolbar().addMaterialCommandToSideMenu("Hello Command",
            FontImage.MATERIAL_CHECK, 4, e -> hello());
    Container mainContainer=new Container(new BorderLayout());
    BrowserComponent bc=new BrowserComponent();
    
    bc.setScrollable(true);
    bc.setScrollableY(true);

    bc.setPage("<html><BODY><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P><P>TEXT</P></BODY></HTML>",""); // it's a long page so it can be scolled

    //mainContainer.add(BorderLayout.CENTER,bc); alternate version
    //hi.add(BorderLayout.CENTER,mainContainer); alternate version
    hi.add(BorderLayout.CENTER,bc);
    hi.show();


private void hello() 
    Dialog.show("Hello Codename One", "Welcome to Codename One", "OK", null);



我是否遗漏了一些重要的东西,让用户可以通过触摸滚动?

我编译了几个不同的版本,包括在表单或容器内居中 BC 等等(见注释行)。

我在 CN1 模拟器和真正的 android 设备(服务器构建)上对其进行了测试,它不可滚动(而是选择了文本)。我听从了他们的所有建议,因此 BC 以 BorderLayout 为中心,并且表单设置为不可滚动。

我记得我真正的应用程序在某个时候可以运行。现在我测试了我的应用程序,发现它不起作用,所以我制作了这个示例应用程序。也许我错了。

这不是初学者的问题,而是关于 BC 有问题的问题。 我知道这样的组件在许多系统上都是不稳定的,例如像 SwiftUI 这样的重要系统,但是 当然是在CN1上。

在 CN1 模拟器上滚动条总是出现,所以我可以测试它,BC 可以通过使用滚动条滚动。但是鼠标事件没有被正确处理。

在我的实际项目中,我有很多解决方法来处理 BC 内的鼠标事件,但这里的示例项目是一个非常简单的项目,只有 BC。

BC 被最近的一些更新破坏以修复其他问题的可能性不大。

那么现在的解决办法是什么?

【问题讨论】:

【参考方案1】:

您将浏览器组件包装器设置为可滚动,这有效地阻止了浏览器组件内的本机滚动。只是不要调用任何 setScrollable 任何东西,滚动将适用于边框布局的情况。

【讨论】:

当然,这是默认尝试,如您所知,这是根据您之前的建议和指南进行的不同尝试。那么什么是工作代码?你能把答案放进去吗?只是一个简单的可滚动 BC,在表单中使用触摸或鼠标(滚动条不算在内)。 注意我特指上面的代码...

以上是关于CodenameOne - BrowserComponent 不可滚动的主要内容,如果未能解决你的问题,请参考以下文章

如何将 CodenameOne 源附加到我的项目?

CodenameOne - BrowserComponent 不可滚动

使用 Codenameone 显示推送通知

Codenameone订阅

将 LWUIT 项目转换为 Codenameone 时出错

CodenameOne - 使用 android.buildToolsVersion=27 构建时,Android 应用程序无法启动