Android 動態佈局 動態生成 銷燬控制元件 改變控制元件的位置等
一種基於Android的動態佈局和管理的實現方法
技術領域
本實用新型涉及到一種在嵌入式平臺上動態生成、銷燬控制元件及動態改變位置的方法,尤其涉及Android平臺的通過自定義的XML或INI配置檔案動態佈局方法。
背景技術
為了更好地管理Android應用的使用者介面裡面的各個元件,Android提供了佈局管理器,使各個元件能在不同的裝置的螢幕上都能執行良好,現在Android共有線性佈局(LinearLayout)、表格佈局(TableLayout)、幀佈局(FrameLayout)相對佈局(RelativeLayout)和絕對佈局(AbsoluteLayout)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 intx;
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 introllSpeed; // 滾動速動
private int fontSize; // 字型大小
private int charSpace; // 字元間距
private int rowSpace; // 行間距
private int foregroundColor;// 前景色
private int backgroundColor;// 背景色
private Vector<String> txt; // 顯示文字
private Vector<integer> times; //
}
相關文章
- Android動態改變佈局Android
- BCB動態生成控制元件控制元件
- Android動態生成控制元件居中顯示Android控制元件
- Android之改變控制元件的背景及形態Android控制元件
- 動態移動控制元件 (轉)控制元件
- 動態改變類結構 & 動態…
- css實現高度動態變化的佈局CSS
- Qt動態新增控制元件QT控制元件
- 動態新增easyui 控制元件UI控制元件
- android: 動態載入碎片佈局的技巧Android
- GRIDPANEL動態佈局
- Masonry佈局控制元件,自動換行控制元件
- 動態計算控制元件高度控制元件
- 動態綁資料(Repeater控制元件控制元件
- easysize_動態調整對話方塊控制元件位置和大小控制元件
- IOS 動態改變cell的高度iOS
- android佈局改變動畫Android動畫
- 動態介面:DSL&佈局引擎
- 動態Vue.js佈局元件Vue.js元件
- java實現控制元件的移動及使用滑鼠改變控制元件大小Java控制元件
- 使用者控制元件的動態載入控制元件
- 改變自定義UIButton裡子控制元件的位置UI控制元件
- 動態新增控制元件時,計算控制元件大小的解決方法控制元件
- Android 動態佈局實現多主題切換Android
- 【譯】使用 Sketch 搭建動態佈局
- Android控制元件佈局屬性全解Android控制元件
- Android UI控制元件系列:TableLayout(表格佈局)AndroidUI控制元件
- 在執行時使用滑鼠移動控制元件和改變控制元件的大小 (轉)控制元件
- 組合控制元件的佈局控制元件
- aspx頁面中動態建立控制元件 (轉)控制元件
- Android佈局中動態新增ImageView並設定間隔AndroidView
- 【android】自定義佈局控制控制元件的位置可以通過繼承FrameLayout實現Android控制元件繼承
- 佈局新增長:新常態下移動營銷的獲客與擴量
- javascript動態改變css3的animationJavaScriptCSSS3
- 動態改變quartz的觸發器策略?quartz觸發器
- 動態改變螢幕設定 解析度、顏色等。 (轉)
- 動態路由,透過id改變,改頁面路由
- MFC動態建立控制元件的訊息處理 (轉)控制元件