文档章节

基于Android平台的动态生成控件和动态改变控件位置的方法

iSnowFlake
 iSnowFlake
发布于 2013/05/11 21:12
字数 2138
阅读 4.1K
收藏 2

      更多介绍链接:http://www.google.com/patents/CN103336691A?cl=zh

 

     关键字:Android 动态布局  改变位置

      Android的界面是由布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦。组件按照布局的要求组合排列,就形成了用户所看见的一个个界面。Android的五大布局分别是LinearLayout(线性布局)、FrameLayout(单帧布局)、 RelativeLayout(相对布局)、AbsoluteLayout(绝对布局)和TableLayout(表格布局)。

     其中:

     LinearLayout:LinearLayout按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。  

  FrameLayoutFrameLayout布局中,后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡。

  AbsoluteLayout是绝对位置布局。采用此种布局方式控件的位置将由一个绝对值来指定,在此布局中的子元素可以相互重叠。

    但是Android系统提供的5种布局方式并不能解决所有的需求,比如:

 

但是这5中布局方式都是预先通过代码或者在XML布局文件中定义好各个界面的布局方式,布局确定以后如果发现在某设备的显示效果不好只能是技术人员去修改相关的代码以适应之,用户不能够再改变界面上控件的个数、位置和大小。但是有时候我们需要在一台管理机上管理很多设备终端,(比如广告机,这些设备终端播放着视频、图片和滚动的字面等多媒体信息),这些设备终端的分辨率和宽高比例大部分情况都是不同的,需要显示的内容在每一个时刻也是不同的,

管理员需要根据终端设备配备屏幕参数的不同和需要展示的内容的不同编排节目内容,管理软件采用Android 现有的布局管理器都无法很好的满足要求,无法根据需要显示的内容和设备终端的屏幕属性来动态布局,动态管理。

发明内容

    本实用新型的目的是为了方便Android设备的使用者能够根据不同设备终端的屏幕属性和展示内容的不同来动态的为生成组件指定大小、位置,并能动态的添加新的组件、删除或替换已有组件,即能在运行前或者在运行的过程中增、删、改变控件的属性以及重新布局。

 

技术方案

为了能够动态的布局,我们首先会让终端操控者知道终端显示设备的分辨率,宽高比例等基本的参数,以便其能够编辑界面的布局情况。

终端操控者编辑完布局情况预览确认后会形成布局配置文件,分为两种情况:如果在本地操作会形成XML布局配置文件,反之如果在远程PC等管理端则会形成INI布局配置文件。

终端APK接收到确认布局命令后,布局解析器会解析获取到的XML或者INI布局配置文件,配置文件中会包含控件的类型、个数、位置和大小等基本的信息,然后封转成为java类对象,从这个对象中程序可以获知某种类型的控件的个数,在屏幕上的位置、大小和其他构造这种控件所需要的额外信息,不同控件所需要的额外信息一般来说是不同的。

当所有的信息都以类对象的形式封装好后,动态布局管理器就会开始在终端设备上布局。

在运行的过程中可以动态的(叠加)插入新的控件,也可以对已有的控件进行布局修改。


本发明所述的方法需要通过如下几个步骤来具体的实施:

   结合图1 所示,动态布局的步骤如下:

1、如果终端操控者不在本地操作,则先获取终端显示设备的基本属性。

        Display display = getWindowManager().getDefaultDisplay();

      screenHeight = display.getHeight();     //获取屏幕的高

 screenWidth = display.getWidth();      //获取屏幕的宽

    然后计算出宽高比后发送参数到远程操控端

2、如果终端操控者在本地则在本地编辑界面布局,在远程则通过获取的屏幕参数模拟终端显示设备来编辑布局,终端操控者通过鼠标、触摸屏等输入设备自定义在终端显示设备的不同区域显示不同的控件和控件的大小、位置、背景、背景透明度以及叠加显示的层次结构和构造本控件需要的其他额外信息。

   在编辑的过程中可以通过预览看见基本的布局情况,确认提交后,根据不同的操控平台会形成INI或者XML等基本的配置文件,配置文件的结构信息如附图2和附图3.

3、终端设备收到INI或者XML布局确认配置文件后,布局解析器会把布局配置文件中的内容解析封装成为java布局类对象,布局类UML图见附图4.

4、设备终端的软件根据配置文件的信息结合Android已经有的绝对布局管理器生成所需要的控件并显示之。

……

layoutManger =new AbsoluteLayout(this);     //定义布局管理器

setContentView(layoutManger);  //在视图中的内容都交给布局管理器控制

……

LayoutData layoutdata;                     //布局信息

Void setLayout(){     

   initdata.getInitHead()            //获取ini数据头

  if(0!=iniHead.play_obj_num)             //视频对象只有一个

               videoView=new VideoSurfaceView(this,src);

                videoViewLp=new AbsoluteLayout.LayoutParams

(playInfo.width, playInfo.height, playInfo.x, playInfo.y);

                layoutManger.addView(videoView, videoViewLp);

                break;

   if(0!=iniHead.grap_obj_num){    //图像对象可能会有多

pictureView[ ]= new Array<pictureView>[.grap_obj_num]

                for(int i=0;i< iniHead.grap_obj_num;i++){

                pictureView[i]=new pictureView(this,src);

              pictureViewLp=new AbsoluteLayout.LayoutParams

(picInfo.width, picInfo..height, picInfo.x, picInfo..y);

                layoutManger.addView(pictureView, pictureViewLp);

                //pictureView 对象集合

                }

   }

                break;


其他的控件布局设置

}


5、运行的过程中在本地或者远程控制端通过修改布局配置文件动态的修改显示的内容,对某一个控件的布局进行修改

新的布局参数=(AbsoluteLayout.LayoutParams)控件名称.getLayoutParams();

新的布局参数=.x=100;

新的布局参数=.y=100;

新的布局参数=.width=900;

新的布局参数=.height=500;                   

控件名称.setLayoutParams(新的布局参数);

 


附图说明

图1 :动态布局流程图

 

图2 :INI布局文件内容与结构图


图3 :XML布局文件内容与结构图

 

 

 

 

 

图4 :java布局类对象UML类图

 


附件: Layout 类内容与结构

public class LayoutData {

   private LayoutHead head;

   private LayoutPlayInfo playInfo;

   private List<LayoutPicInfo>  picInfoList;

   private List<LayoutTextInfo>  textInfoList;

   private Layout其他控件Info 其他控件Info;


   public class LayoutHead{

       private int playObjNum;         //    视频对象数

       private int grapObjNum;          //     图像对象数

       private int textObjNum;          //     文本对象数

       private int dateObjEnable;   //     日期对象启用

       private int timeObjEnable;   //     时间对象启用

       private int wdayObjEnable;     //     星期对象启用

   }

  

   public class LayoutPlayInfo{

       private int enable;          //有效标志,设为1有效

       private int playmode;         //播放模式,0-循环播放,1-随机播放     private int x;           

       private int y;              

       private Vector<String> src;               

private Vector<String> netPath;     //格式

   }

  

   public class LayoutPicInfo{

       private int enable;    //           有效标志,设为1有效

       private int x;           

       private int y;           

       private int width;    

       private int height;   

       private int displayTimes;//         每张图片的显示时间(秒)

       private int picSpecial;      //        特效模式

       private int specialStep;  //        特效速度

       private Vector<String> src;     

       private Vector<String> get; 

   }


      public class LayoutTextInfo{

       private int enable;        //     有效标志,设为1有效

       private int x;            //     左边x值,以OSD宽度的比例计算

       private int y;            //     上边y值,以OSD高度的比例计算

       private int width;         //     宽度,以OSD宽度的比例计算

       private int height;        //     高度,以OSD高度的比例计算

       private int displayMode;    //   显示方式,如从右到左滚动   private int rollSpeed;    //        滚动速动

       private int fontSize;     //        字体大小

       private int charSpace;     //        字符间距

       private int rowSpace;     //        行间距

       private int foregroundColor;//      前景色

       private int backgroundColor;//      背景色

       private Vector<String>  txt;            //        显示文本

       private Vector<integer> times;                //

}


    

© 著作权归作者所有

iSnowFlake
粉丝 36
博文 93
码字总数 53328
作品 0
深圳
高级程序员
私信 提问
加载中

评论(0)

Android 动态布局 动态生成 销毁控件 改变控件的位置等

更多介绍:http://www.google.com/patents/CN103336691A?cl=zh 一种基于Android的动态布局和管理的实现方法 技术领域 本实用新型涉及到一种在嵌入式平台上动态生成、销毁控件及动态改变位置的...

iSnowFlake
2013/06/11
7.2K
0
灵动分析核心技术详解

TalkingData 灵动分析是一个产品和运维使用的工具,他是用来分析App使用者是如何使用一个App的,通过对发布后的App进行动态埋点,解决了两大疑问: 第一,埋点不再需要在发布前预先编码; 第...

TalkingData
2015/10/26
344
0
51信用卡 Android 自动埋点实践

本文首发于 51NB 技术公众号,原文链接 51信用卡 Android 自动埋点实践 背景 随着公司业务的发展,对业务团队的敏捷性和创新性提出了更高的要求,而通过大数据的手段在一定程度上可以帮助我们...

51信用卡客户端团队
2019/02/22
0
0
[Xamarin] button及事件处理

在visual studio + Genymobile 的调试环境下,遇到连不上虚机的情况,在Xamarin官方论坛上找到解决方案,如下: 主要就是去android的project属性调整几个值 Couldn't connect to logcat, Ge...

zerobyte
2014/10/22
2.6K
0
Android 利用addView 动态给Activity添加View组件

本文主要讲述如何动态给UI界面添加布局和控件,在编程的时候很多时候需要动态显示一些内容,在动态添加View的时候,主要使用addView方法。 1. addView方法简介 在Android 中,可以利用排版Vie...

小湘西
2015/09/25
1.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

北京哪里有开电子餐饮费发票

开电子餐饮费发票发票电薇13564998196从主业来看,2019年众诚保险围绕车险业务采取增设分支机构、加强合作、优化用户体验等动作,但综合成本率仍有所上行,业内指出,车险的价格透明度属天然...

枅票嶶fp2090
26分钟前
32
0
哪里有开电子餐饮费发票

开电子餐饮费发票发票电薇13564998196从主业来看,2019年众诚保险围绕车险业务采取增设分支机构、加强合作、优化用户体验等动作,但综合成本率仍有所上行,业内指出,车险的价格透明度属天然...

枅票微fp2090
32分钟前
37
0
略谈分布式系统中的容器设计模式

本文作者:zytan_cocoa 略谈分布式系统中的容器设计模式 谭中意 2020/3/5 前言:云原生(Cloud Native)不仅仅是趋势,更是现在进行时,它是构建现代的,可弹性伸缩的,快速迭代的计算网络服...

百度开发者中心
03/11
17
0
OSChina 周三乱弹 —— 小姐姐的领带有点带歪了,请帮忙正一下

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《アイタクテ -voice & piano-》- 和紗 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
今天
23
0
对象名称前的单下划线和双下划线是什么意思?

问题: Can someone please explain the exact meaning of having leading underscores before an object's name in Python? 有人可以解释一下在Python中对象名称前加下划线的确切含义吗? ......

技术盛宴
今天
29
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部