Dynamic Layout in Android

Similar documents
主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

多媒體應用 13 新增專案並完成版面配置 <ExMusic01> <activity_main.xml> ImageView ID imgplay ImageView ID imgstop ImageView ID imgfront TextView ID txtsong TextView ID t

Android Service

Android Fragment

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

RecyclerView and CardVew

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

建立Android新專案

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

Android + NFC

预览图 : (2) 在 SelectCity.java 中增加控件, 用于绑定 select_city 文件的 ListView, TextView,EditTest 等控件 代码和注释如下 :

實作SQLiteOpenHelper類別

幻灯片 1

0511-Android程式之GPS應用_專題週記4

人民邮电

Android 编程基础 Android 开发教程 & 笔记 1

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

建立Android新專案

PowerPoint 簡報

The Embedded computing platform

Database_001

建模与图形思考

ShareText

Android 开发教程

版权声明

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

Microsoft PowerPoint - 03 开发入门.ppt [兼容模式]

Chapter 10

Microsoft Word - 02.目錄.doc

Android + WebService

建模与图形思考

第一章 Android 简介与开发环境搭建

Android 开发教程

Microsoft Word - 第3章.doc

“关于北京重点高校在校生回乡就业意愿调查问卷”


_banneradview.setuserkeywords("swimming"); _banneradview.setusercategories("1,3,4"); _banneradview.setusergender(jdbanneradview.gender_male); _bannera

<4D F736F F D205BCAE9B0FCCDF85DC8FDC9FAC8FDCAC0CAAEC0EFCCD2BBA82E646F6378>

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

_banneradview.settest(true); _banneradview.setuserkeywords("swimming"); _banneradview.setusercategories("1,3,4"); _banneradview.setusergender(jdbanner

图 6-1 主界面 MainActivity 界面对应的布局文件 (activity_main.xml) 如下所示 : <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="

穨_1_.PDF

标题

目 录 一 重 要 提 示... 3 二 公 司 主 要 财 务 数 据 和 股 东 变 化... 3 三 重 要 事 项... 8 四 附 录 / 28

题目

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

Microsoft Word - 01.DOC

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

「西醫基層總額支付委員會《第28次委員會議紀錄

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

1.5招募说明书(草案)

小应用 Magic8

Microsoft PowerPoint - 07.Android 介面元件-TableLayout、Toast、AlertDialog

Microsoft Word - 第4章 3D相册.doc

Microsoft Word - weather12 刷新按钮动画+搜索框+bug处理.docx

Android Android Android SDK iv

基于ECO的UML模型驱动的数据库应用开发1.doc

Chapter 4

Microsoft Word - 第3章.doc

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之

单击以编辑母片 Content 标题样式 LinearLayout 排版模式 TableLayout 排版模式 RelativeLayout 排版模式 AbsoluteLayout 排版模式 FrameLayout 排版模式 GridLayout 排版模式 TabWidget 切換卡 Lab 5 2

Chapter 1: Introduction

Microsoft Word - Chap16.doc

Microsoft Word - 第3章.doc

03 开发入门.key

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

任务实施 (1) 创建项目 图 3-1 欢迎界面 首先创建一个工程, 将其命名为 BoXueGu, 指定包名为 com.boxuegu (2) 导入界面图片将欢迎界面所需要的背景图片 launch_bg.png 导入到 drawable 文件夹中, 项目的 icon 图标 app_icon.png

Lecture01_Android介绍

Android 基礎教學

Microsoft Word - AEL CH05.doc

Chapter 9: Objects and Classes

投影片 1

untitled

Lecture01_Android介绍

untitled

Microsoft Word - ch04三校.doc

《大话设计模式》第一章

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

EJB-Programming-4-cn.doc

Microsoft Word - Android App开发从入门到精通.doc

Microsoft PowerPoint - 05.Android 介面元件-RelativeLayout、Button、TextVeiw、EditText

EJB-Programming-3.PDF

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

書面

Microsoft Word - 第3章 Activity.doc

untitled

Microsoft Word - 第5章.doc

<ADB6ADB1C25EA8FAA6DB2D4D56432E706466>

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

PowerPoint 簡報

移动平台期末展示

内文-2.indd

使用MapReduce读取XML文件

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

Transcription:

Dynamic Layout in Android 建國科技大學資管系 饒瑞佶 2013/5 V1

Layout 多半都透過 res/layout/xml 格式設定來達成 Android 是 OOP, 所以可以動態產生 Layout 重點是 Layout 的階層關係 (Hierarchy) 需要處理對應事件 最後一樣用 setcontentview 加入 Layout

一 加入現有 Layout 中 以 Button 為例

XML 畫面設定 按鈕全部都加到這

Code 設定事件 取得容器 產生物件 加入容器

Code

結果

二 全部利用程式碼產生

先看結果 RelativeLayout 底圖 LinearLayout 在 TextView 上方 TextView 在選單上方 ImageView 在 LinearLayout 裡面 選單 + 靠最下

Layout Hierarchy RelativeLayout ImageView LinearLayout TextView Horizontal ScrollView RadioButton RadioButton RadioButton RadioGroup

Layout Hierarchy Relative Layout addview Linear Layout laymain laycontent 設定在 tv 上面 addview TextView tv 設定在 hrscrollview 上面 第二層 Horizontal ScrollView hrscrollview 設定在最下面 addview ImageView imgv RadioGroup Rdgrp 第三層 addview RadioButton RadioButton RadioButton RadioButton RadioButton RadioButton RadioButton rdbtn1 rdbtn2 rdbtn3 rdbtn4 rdbtn5 rdbtn6 rdbtn7 第四層

Code @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); RelativeLayout LayMain=new RelativeLayout(this); LayMain.setBackgroundResource(R.drawable.ic_launcher); LinearLayout laycontent=ceatelayout(linearlayout.vertical); laycontent.setgravity(gravity.center_horizontal); laycontent.setid(3); ImageView imgv=new ImageView(this); imgv.setbackgroundresource(r.drawable.ic_launcher); RelativeLayout.LayoutParams forimgv=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLay out.layoutparams.wrap_content); laycontent.addview(imgv, forimgv); TextView tv=new TextView(this); tv.settext(" 我是文字 "); tv.settextcolor(color.blue); tv.setid(4); HorizontalScrollView hrscrollview=new HorizontalScrollView(this); hrscrollview.setbackgroundcolor(color.rgb(139, 137, 137)) ; hrscrollview.setid(1);

Code // 建立一個群組按鈕 RadioGroup rdgrp= new RadioGroup(this); // 設定群組按鈕的格式 RadioGroup.LayoutParams forrdgrp = new RadioGroup.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); rdgrp.setorientation(radiogroup.horizontal); rdgrp.setlayoutparams(forrdgrp); // 第 1 個按鈕 RadioButton rdbtn1= new RadioButton(this); rdbtn1.setbuttondrawable(android.r.color.transparent); // 不要出現前面的圓點 rdbtn1.setgravity(gravity.center); rdbtn1.setwidth(110); rdbtn1.settextsize(18); Drawable drawabletop = getresources().getdrawable(r.drawable.ic_action_search); rdbtn1.setcompounddrawableswithintrinsicbounds(null, drawabletop, null, null); rdbtn1.settext(getresources().getstring(r.string.hello_world)); rdgrp.addview(rdbtn1); rdbtn1.setonclicklistener(new View.OnClickListener() { public void onclick(view v) { //TODO Auto-generated method stub 對應事件 );

Code // 第 2 個按鈕 RadioButton rdbtn2= new RadioButton(this); rdbtn2.setbuttondrawable(android.r.color.transparent); // 不要出現前面的圓點 rdbtn2.setgravity(gravity.center); rdbtn2.setwidth(110); rdbtn2.settextsize(18); Drawable drawablebtn2 = getresources().getdrawable(r.drawable.ic_action_search); rdbtn2.setcompounddrawableswithintrinsicbounds(null, drawablebtn2, null, null); rdbtn2.settext(getresources().getstring(r.string.hello_world)); rdgrp.addview(rdbtn2); rdbtn2.setonclicklistener(new View.OnClickListener() { public void onclick(view v) { //TODO Auto-generated method stub ); 這裡各位可以加入第三個 RadioButton!

// 將群組按鈕加入到水平選單 hrscrollview.addview(rdgrp); Code // 設定水平選單位於螢幕的最下方 RelativeLayout.LayoutParams forhrscrollview = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT,RelativeLayout.LayoutParams.WRAP_C ONTENT); forhrscrollview.addrule(relativelayout.align_parent_bottom); // 將水平選單加入主畫面 LayMain.addView(hrscrollview,forhrscrollview); // 設定 TextView 在水平選單上面 RelativeLayout.LayoutParams fortv = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT,RelativeLayout.LayoutParams.WRAP_C ONTENT); fortv.addrule(relativelayout.above,hrscrollview.getid()); // 將 TextView 加入主畫面 LayMain.addView(tv,fortv); // 設定 LinearLayout 在 TextView 上面 RelativeLayout.LayoutParams forlaycontent = new RelativeLayout.LayoutParams (RelativeLayout.LayoutParams.FILL_PARENT,RelativeLayout.LayoutParams.WRAP_CONTENT); forlaycontent.addrule(relativelayout.above,tv.getid()); // 將 LinearLayout 加入主畫面 LayMain.addView(layContent,forlayContent); setcontentview(laymain); private LinearLayout ceatelayout (int iorientation) { LinearLayout lay = new LinearLayout(this); lay.setlayoutparams(new LayoutParams( android.view.viewgroup.layoutparams.fill_parent, android.view.viewgroup.layoutparams.wrap_content)); lay.setorientation(iorientation); return lay;

三 利用 CLASS 進行設計

先看看原始動態設定 這裡是重點 LinearLayout laymain = new LinearLayout(this); // 建立 LinearLayout LinearLayout.LayoutParams forlaymain = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); laymain.setorientation(linearlayout.vertical); // 垂直排列 laymain.setlayoutparams(forlaymain); //LinearLayout 背景 laymain.setbackgroundresource(r.drawable.ic_launcher); // 建立 TextView 物件 TextView tv1 = new TextView(this); // 建立 TextView 物件 tv1.settextcolor(color.blue); // 文字顏色 tv1.settextsize(30); // 文字大小 tv1.settext(" 我是文字 "); tv1.setpadding(50, 30, 20, 0); // 文字距離左右多遠 laymain.addview(tv1); // 將 TextView 加入 laymain setcontentview(laymain); // 設定最後的 UI

result

改用 class 來進行動態版面設計 主要是 class 對接的設定, 使用的是 Context 將上面的動態版面設定搬到 class 內 另外設定一個 package 來管理

改用 class 來進行動態版面設計 package com.alllayout; Package name 回傳類型 對應的 class public class CrateLayout { // 建立 View public View setview(context context){ LinearLayout laymain = new LinearLayout(context); // 建立 LinearLayout LinearLayout.LayoutParams forlaymain = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); laymain.setorientation(linearlayout.vertical); // 垂直排列 laymain.setlayoutparams(forlaymain); //LinearLayout 背景 laymain.setbackgroundresource(r.drawable.ic_launcher); // 建立 TextView 物件 TextView tv1 = new TextView(context); // 建立 TextView 物件 tv1.settextcolor(color.blue); // 文字顏色 tv1.settextsize(30); // 文字大小 tv1.settext(" 我是文字 "); tv1.setpadding(50, 30, 20, 0); // 文字距離左右多遠 laymain.addview(tv1); // 將 TextView 加入 laymain return laymain; 回傳 View

使用 class public class Main extends Activity { @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); //setcontentview(r.layout.main); 取消預設 view CrateLayout cl=new CrateLayout(); setcontentview(cl.setview(main.this)); 重新設定 view 使用 class

結果當然一樣

設定事件 加入一個按鈕到 class CrateLayout public Button bt1; 需要放最外層 // 建立按鈕 bt1=new Button(context); bt1.settext(" 按鈕 1"); laymain.addview(bt1); // 將按鈕加入 laymain

設定事件 @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); //setcontentview(r.layout.main); CrateLayout cl=new CrateLayout(); setcontentview(cl.setlayout(main.this)); cl.bt1.setonclicklistener(new View.OnClickListener() { @Override public void onclick(view v) { Toast.makeText(Main.this, " 動態版面設定 ", Toast.LENGTH_LONG).show(); );

每個物件的產生建立一個方法 修改 class CrateLayout

// 建立 View public View setview(context context){ // 設定整個版面 Layout LinearLayout lly=setlayout(context,linearlayout.vertical,layoutparams.fill_parent, LayoutParams.FILL_PARENT,R.drawable.back); // 加入 TextView lly.addview(settextview(context," 我是文字 ",30)); // 加入 Button lly.addview(setbutton(context," 按鈕 1")); return lly; // 建立 Layout private LinearLayout setlayout(context context,int ori, int fillparent, int fillparent2, int iclauncher){ LinearLayout laymain = new LinearLayout(context); // 建立 LinearLayout LinearLayout.LayoutParams forlaymain = new LinearLayout.LayoutParams(fillParent, fillparent2); laymain.setorientation(ori); // 排列方向 laymain.setlayoutparams(forlaymain); //LinearLayout 背景 laymain.setbackgroundresource(iclauncher); return laymain;

參數化 // 建立 TextView private TextView settextview(context context,string txt,int fontsixe){ TextView tv1 = new TextView(context); // 建立 TextView 物件 tv1.settextcolor(color.blue); // 文字顏色 tv1.settextsize(fontsixe); // 文字大小 tv1.settext(txt); tv1.setpadding(50, 30, 20, 0); // 文字距離左右多遠 return tv1; // 建立按鈕 private Button setbutton(context context,string txt){ bt1=new Button(context); bt1.settext(txt); return bt1;

長按選單 public class MainActivity extends Activity { @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); LinearLayout windowlayout = (LinearLayout) findviewbyid(r.id.windowlayout); // 註冊長按選單 this.registerforcontextmenu(windowlayout); @Override public boolean oncontextitemselected(menuitem item) { // 當使用者點選項目時, 所需的動作 Toast.makeText(this, " 您選擇的是 "+item.gettitle(), Toast.LENGTH_SHORT).show(); return super.oncontextitemselected(item); @Override public void oncreatecontextmenu(contextmenu menu, View v,contextmenuinfo menuinfo) { // 設定選單內容 super.oncreatecontextmenu(menu, v, menuinfo); menu.add(0, 0, 0, " 大雄 "); menu.add(0, 1, 0, " 小叮噹 "); menu.add(0, 2, 0, " 技安 "); menu.add(0, 3, 0, " 小夫 ");

activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:id="@+id/windowlayout" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </LinearLayout>