codenameone - 在轮播选项卡中显示不同类型的文件
问题描述
我需要实现一个轮播来显示图像/视频/pdf/ppt 文件。我使用 Tab 组件来实现它。但它没有按预期工作。第一个选项卡正确显示图像,但同时打开第三个选项卡上的 pdf 文件。第二个标签视频不播放。我尝试在选项卡选择时调用这些事件,但仍然无法正常工作。我的代码如下。
Form hi = new Form("Swipe Tabs", new LayeredLayout());
Tabs t = new Tabs();
t.hideTabs();
container1 = BoxLayout.encloseY();
container2 = BoxLayout.encloseY();
container3 = BoxLayout.encloseY();
InputStream is = null;
ImageViewer iv = null;
try{
is = Display.getInstance().getResourceAsStream(getClass(), "/Img1.png");
iv = new ImageViewer(Image.createImage(is));
}catch(Exception exc){
exc.printStackTrace();
}
container1 = BoxLayout.encloseY(iv);
FileSystemStorage fs = FileSystemStorage.getInstance();
fs.mkdir(fs.getAppHomePath());
String fileName = fs.getAppHomePath() + "test.mp4";
if(!fs.exists(fileName)) {
Util.downloadUrlToFile("http://localhost/app/test.mp4", fileName, true);
}
try{
Media video = MediaManager.createMedia(fileName, true);
video.setNativePlayerMode(true);
container2 = BoxLayout.encloseY(new MediaPlayer(video));
video.play();
}catch(Exception exc){
exc.printStackTrace();
}
fs = FileSystemStorage.getInstance();
fs.mkdir(fs.getAppHomePath());
final String fileName1 = fs.getAppHomePath() + "file1.pdf";
if(!fs.exists(fileName1)) {
Util.downloadUrlToFile("http://localhost/app/file1.pdf", fileName1, true);
}
container3 = BoxLayout.encloseY();
Display.getInstance().execute(fileName1);
t.addTab("Tab1", container1);
t.addTab("Tab2", container2);
t.addTab("Tab3", container3);
new ButtonGroup(firstTab, secondTab, thirdTab);
firstTab.setSelected(true);
Container tabsFlow = FlowLayout.encloseCenter(firstTab, secondTab, thirdTab);
hi.add(t);
hi.add(BorderLayout.south(tabsFlow));
hi.show();
解决方案
Display.execute
启动外部查看器以显示某些内容。它不会创建您可以嵌入的组件。我们不支持嵌入 PDF,因为它在 Android 上不可用并且在 iOS 上有点不稳定。如果您只关心 iOS,您可以使用 aBrowserComponent
来显示 PDF。您可以使用按钮并execute
在按下按钮时调用以显示 PDF。
改变这个:
container2 = BoxLayout.encloseY(new MediaPlayer(video));
video.play();
至:
MediaPlayer mp = new MediaPlayer(video);
container2 = mp;
mp.setAutoplay(true);
mp.setLoop(true);
最后,我建议使用Log.e()
not printStackTrace()
。
推荐阅读
- firebase - 如何使用 fire-base 作为后端来构建一对一(私人)聊天应用程序?
- python-3.x - 为什么 Python 多重继承不调用一个父级
- visual-studio - 如何在 .editorconfig 中定义任务列表标记?
- alignment - OpenLayers - 多边形边界
- javascript - 如何从 exif 数据中提取特定信息并显示在我们的网页中/
- java - Android 快速位图绘制
- google-data-studio - 是否有任何 API 仅通过 REST API 将数据从数据库获取到 Google Data Studio
- python - 无法在 pyqt5 中设置 TabOrder
- android - Listview android填充
- plugins - 用于切换到收藏夹窗格的参数(主页功能未加载收藏夹)