1. 程式人生 > >Android 動態佈局 動態生成 銷燬控制元件 改變控制元件的位置等

Android 動態佈局 動態生成 銷燬控制元件 改變控制元件的位置等

一種基於Android的動態佈局和管理的實現方法

技術領域

本實用新型涉及到一種在嵌入式平臺上動態生成、銷燬控制元件及動態改變位置的方法,尤其涉及Android平臺的通過自定義的XMLINI配置檔案動態佈局方法。

背景技術

為了更好地管理Android應用的使用者介面裡面的各個元件,Android提供了佈局管理器,使各個元件能在不同的裝置的螢幕上都能執行良好,現在Android共有線性佈局(LinearLayout)、表格佈局(TableLayout)、幀佈局(FrameLayout)相對佈局(RelativeLayout)和絕對佈局(AbsoluteLayout5種佈局。

但是這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:動態佈局流程圖

2INI佈局檔案內容與結構圖

3XML佈局檔案內容與結構圖

4java佈局類物件UML類圖

附件:Layout類內容與結構

publicclassLayoutData {

privateLayoutHeadhead;

privateLayoutPlayInfoplayInfo;

privateList<LayoutPicInfo>picInfoList;

privateList<LayoutTextInfo>textInfoList;

privateLayout其他控制元件Info其他控制元件Info;

publicclassLayoutHead{

privateintplayObjNum;//視訊物件數

privateintgrapObjNum;//影象物件數

privateinttextObjNum;//文字物件數

privateintdateObjEnable;//日期物件啟用

privateinttimeObjEnable;//時間物件啟用

privateintwdayObjEnable;//星期物件啟用

}

publicclassLayoutPlayInfo{

privateintenable;//有效標誌,設為1有效

privateintplaymode;//播放模式,0-迴圈播放,1-隨機播放privateintx;

privateinty;

privateVector<String>src;

privateVector<String>netPath;//格式

}

publicclassLayoutPicInfo{

privateintenable;//有效標誌,設為1有效

privateintx;

privateinty;

privateintwidth;

privateintheight;

privateintdisplayTimes;//每張圖片的顯示時間(秒)

privateintpicSpecial;//特效模式

privateintspecialStep;//特效速度

privateVector<String>src;

privateVector<String>get;

}

publicclassLayoutTextInfo{

privateintenable;//有效標誌,設為1有效

privateintx;//左邊x值,以OSD寬度的比例計算

privateinty;//上邊y值,以OSD高度的比例計算

privateintwidth;//寬度,以OSD寬度的比例計算

privateintheight;//高度,以OSD高度的比例計算

privateintdisplayMode;//顯示方式,如從右到左滾動privateintrollSpeed;//滾動速動

privateintfontSize;//字型大小

privateintcharSpace;//字元間距

privateintrowSpace;//行間距

privateintforegroundColor;//前景色

privateintbackgroundColor;//背景色

privateVector<String>txt;//顯示文字

privateVector<integer>times;//

}

相關推薦

Android 動態佈局 動態生成 銷燬控制元件 改變控制元件位置

一種基於Android的動態佈局和管理的實現方法 技術領域 本實用新型涉及到一種在嵌入式平臺上動態生成、銷燬控制元件及動態改變位置的方法,尤其涉及Android平臺的通過自定義的XML或INI配置檔案動態佈局方法。 背景技術 為了更好地管理Android應用的使用者介面裡面

元件改變元件的值

子元件改變父元件的值,會報錯。其實是採用單向資料流,子元件不能直接改變父元件的值,是以單向資料流的方式流轉資料。可以採用以下兩種減少程式碼量的方式改變父元件的值(忽略on和emit事件方式)。 方法一::xx.sync 和 $emit(‘update:xx’) Vue.compone

Android FrameLayout佈局中的控制元件設定居中動態設定

Android FrameLayout 佈局檔案靜態設定裡面的控制元件時是預設左上角疊加的。 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_w

Android動態佈局,並動態為TextView控制元件設定drawableLeft、drawableRight屬性新增圖示

注:(圖中每一個條目和圖示都是由程式碼動態生成) 程式碼動態佈局,並需要為每一個條目設定圖示,此時用到了 android:drawableLeft="@drawable/icon" 父x

android開發筆記 動態生成控制元件

動態生成介面的方法很簡單首先要卻這個介面的佈局,是AbsoluteLayout,RelativeLayout還是其他,然後就可以再裡面新增控制元件了:public void onCreate(Bundle savedInstanceState) {super.onCreat

Android在java程式碼中動態改變控制元件或者佈局寬高

有時候,在xml檔案中設定佈局已經不能滿足我們的需求,我們需要在java程式碼中動態進行佈局。這就涉及到一個寬高適配的問題。可以通過獲取螢幕的寬高,通過螢幕寬高的相對比例對控制元件和佈局的寬高進行設定:

Android使用LayoutInflater動態載入佈局和操作控制元件

我們知道在Android中通過佈局檔案來描述軟體的介面,而通常在Activity中都是使用setContentView()來將佈局顯示出來。但是如果我們在非Activity的情況下,而且需要對佈局中的控制元件進行設定等操作,該如何處理呢?這就需要使用到動態載入佈局 Layo

Android動態改變控制元件的大小的一種方法

    在Android中有時候我們需要動態改變控制元件的大小。有幾種辦法可以實現  一是在onMeasure中修改尺寸,二是在onLayout中修改位置和尺寸。這個是可以進行位置修改的,onMeasure不行。 還有一種是用LayoutParams來進行修改。前兩種方法都

android 動態改變控制元件位置和大小

動態改變控制元件位置的方法: setPadding()的方法更改佈局位置。 如我要把Imageview下移200px:             ImageView.setPadding( ImageView.getPaddingLeft(),  ImageView.get

Android 程式碼當中動態改變某個控制元件位置

不多說,直接上程式碼: private ImageView imageView; //小圓圈 private RelativeLayout mRlImg; mRlImg = (RelativeLayout) view.findViewById(R.id.rl_img);

Android開發FrameLayout動態新增控制元件位置問題

       首先FrameLayout的子控制元件預設都是從左上角顯示的,還有最後新增的在最前面顯示。         一般是對FrameLayout.LayoutParams params進行操作

android動態設定控制元件的大小和位置

本次做的是機頂盒上視訊播放器,當視訊播放控制元件的大小先在xml檔案設定完成。 當點選視訊控制元件時,使視訊為全屏播放,此時 RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams

動態佈局Android抽屜之基礎

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android 關於佈局中Button控制元件正常順序出現的遮蓋其他控制元件問題

在一個相對佈局中設定著底部組合控制元件,比如:正常app的四個底部導航欄,分別用權重去等比例顯示,但是若在其中的一份比例中的相對佈局裡放置了Button和其他的自定義控制元件(包含非自定義控制元件),那麼就會出現Button覆蓋佈局中的其他控制元件的問題,不過遇到的也許不多吧

Android-動態佈局載入

動態佈局核心. 編譯性佈局.佈局要求是已經編譯好的,也就是下圖所示.如何編譯.先打包成apk.然後進行解壓,就能獲得編譯後的資原始檔.  通過xmlPullParser進行解析,主要是LayoutInflater中的第二個方法以及第四個方法.通過xmlPullParser解析

Android佈局動態新增view的兩種方法

一、說明 新增檢視檔案的時候有兩種方式:1、通過在xml檔案定義layout;2、java程式碼編寫 二、前言說明 1.構造xml檔案 2.LayoutInflater 提到addview,首先要了解一下LayoutInflater類。這個類最主要的功

使用Android databinding進行動態佈局

Google 最近公佈了Android mvvm架構,可以使用databinding做些賦值和渲染介面的操作。 瞭解到Jsp中使用EL表示式,可以做些簡單的賦值和表示式運算。 然後我寫一個簡單的庫,可以使用Android的Databinding進行動態佈局,

Android使用addView動態新增元件

 在專案開發中,我們經常需要進行動態新增元件,其中可新增的部分有兩項:佈局和元件  其中:             新增的佈局主要有RelativeLayout型(相對佈局)的和LinearLayout(線性佈局)             新增的元件主要有文字顯示框,編輯框

Android 常用佈局及基本UI控制元件

一、Android學習API指南:【瞭解】 1. 應用的組成部分   App Components 1.1. 應用的基本原理    App Fundamentals 1.2.&n

android動態佈局

android動態佈局 不知道各位有沒有碰到過這樣的問題:在一個佈局中新增多個子佈局,每個子布 局有兩種樣式,比如正面一個樣式,點選後,替換到背面又是另一種樣式。且需 要使得這些子佈局始終只有一個是保持背面的狀態,點選其他子佈局時它才會回到正面樣式。 最開始,我選擇了用xml佈局檔案先擬