当前位置: 首页 > news >正文

J2ME GUI实战之9 ----------自定义控件布局,DIY Layout

最近,有项目中用LWUIT做UI时,发现GridLayout有个不好的地方,那就是。。。。。如下图:

GridLayout并行显示控件的效果图 可以发现,使用GridLayout是把控件按照界面长宽平分而排列的,左边的Label控件就占了冗余的地方。。。。。。。。。或许你会想到使用其他GridLayout来实现自适应的控件 并排效果,但是LWUIT原有的Layout是没有完全符合这个要求的,所以就只能靠自己DIY一个了。

以下,就是我按照原有GridLayout修改得来的新布局,如下图:

自适应控件布局

直接贴出修改的代码,其中的代码很大一部分是源自GridLayout.java(modify from GridLayout.java),因此只把关键部分贴出来:

public void layoutContainer(Container parent) { int width = parent.getLayoutWidth() - parent.getSideGap() - parent.getStyle().getPadding(Component.RIGHT) - parent.getStyle().getPadding(Component.LEFT); int height = parent.getLayoutHeight() - parent.getBottomGap() - parent.getStyle().getPadding(Component.BOTTOM) - parent.getStyle().getPadding(Component.TOP); int x = parent.getStyle().getPadding(Component.LEFT); int y = parent.getStyle().getPadding(Component.TOP); int numOfcomponents = parent.getComponentCount(); //取得所有Label控件的最长字符串 String str=""; for(int i=0;i<numOfcomponents;i+=2)//Label控件处于0,2,4,6....... { String tmpstr=((Label)(parent.getComponentAt(i))).getText(); if(tmpstr.length()>str.length()) str=tmpstr; } //Label控件的长度 int lbWidth=((Label)(parent.getComponentAt(0))).getStyle().getFont().stringWidth(str); lbWidth*=1.3; //与Label并行的控件的长度 int cmpWidth = width-lbWidth; int cmpHeight; if (numOfcomponents > rows * columns) { cmpHeight = (height)/(numOfcomponents/columns +1);//actual rows number } else { cmpHeight = (height)/rows; } int row = 0; for(int i=0; i< numOfcomponents; i++){ Component allCmp = parent.getComponentAt(i); Style cmpStyle = allCmp.getStyle(); int marginLeft = cmpStyle.getMargin(Component.LEFT); int marginTop = cmpStyle.getMargin(Component.TOP); int marginRight = cmpStyle.getMargin(Component.RIGHT); int marginBottom= cmpStyle.getMargin(Component.BOTTOM); if(i%2==0){//如果是Label控件,偶数 allCmp.setWidth(lbWidth - marginLeft - marginRight); allCmp.setX(x + marginLeft); } else{//如果是与Label控件并行的控件,奇数 allCmp.setWidth(cmpWidth - marginLeft - marginRight); allCmp.setX(x + lbWidth + marginLeft); } allCmp.setHeight(cmpHeight - marginTop - marginBottom); allCmp.setY(y + row*cmpHeight + marginTop); if((i + 1)%columns == 0){ row++; } } }


相关文章:

  • PHP配置文件翻译
  • 手把手教你Symbian开发(书目征求意见)
  • Asp.Net Cache
  • Asp.Net Sync ASync Processing request
  • 点评315:分众和中移动背后的故事
  • 中移动自建平台欲深度掌控产业链主导权
  • C# Asp.Net Set Image Url to byte[]
  • Google Android介绍..
  • “中关村装机”感受网店的力量
  • Oracle中锁定行的查找方法
  • svn删除仓库中某个目录的方法
  • 整合通讯录上“在乎网”
  • windows smartphone上几种java模拟器使用体验
  • OMA协议向导-一个帮助你了解OMA协议的简明教程(一)(二)
  • 美国百年老报关门将转型新闻网站
  • CSS 提示工具(Tooltip)
  • jdbc就是这么简单
  • Spring Cloud Feign的两种使用姿势
  • springboot_database项目介绍
  • uva 10370 Above Average
  • 如何解决微信端直接跳WAP端
  • 设计模式 开闭原则
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • # C++之functional库用法整理
  • # Java NIO(一)FileChannel
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C#)获取字符编码的类
  • (Forward) Music Player: From UI Proposal to Code
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)ssm码农论坛 毕业设计 231126
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (循环依赖问题)学习spring的第九天
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)ObjectiveC 深浅拷贝学习
  • (转)visual stdio 书签功能介绍
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (转载)Google Chrome调试JS
  • (转载)虚函数剖析
  • ***原理与防范
  • .gitignore文件_Git:.gitignore
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET/C# 的字符串暂存池
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .NET文档生成工具ADB使用图文教程
  • .net知识和学习方法系列(二十一)CLR-枚举
  • /etc/skel 目录作用