2011年9月28日 星期三

Android UI 元件整理 (二)

.thisTable {border-style:dotted;border-color:#ccccff;border-width:3px;} Spinner 下拉式選單的用法與之前所提到的 Button 或是 CheckBox 等方式略有不同,下拉式選單可以利用 Adapter 將選項與物件綁在一起,而 Adapter 本身的角色則提供了一系列的操作,可以方便於選項的增刪選擇,此處所使用的是 ArrayAdapter ,與之綁定的資料為字串陣列,最後再將此 Adapter 設定給下拉式選單,即完成了 Spinner、Adapter與資料三者的綁定。此範例的功能為選擇每一個顏色後,即在上方的 TextView上顯示。 原始碼 package nchu.test; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; public class test extends Activity { private static final String[] m_colors ={"red","blue","white"}; private...

2011年8月17日 星期三

2011-08-17 UCampus 總整理

非常感謝陳老師讓我進來執行行動服務的專案,原本自己的打算是在三個月內可以看到整個系統執行的雛形,年底可以上線做完整的測試,不過似乎學校方面的變動速度大過於預期,經過許多考量,我還是決定離開這個位置,讓現任組長找尋更適合人選以支援原本的校務系統,所以本篇應該是我在此留下的最後一篇文章,內容主要是說明現在整個系統的概貌,以及當初的設計概念,以方便未來如果有人需要這部分的程式時,可以較為清楚的方式去尋找,甚至同意我的理念的話還可以繼續下去。 目前在我的電腦裡面存在著最主要的三個專案,以及其他零碎測試用的小專案,主要的三個專案分別是 UCampus, UCampusMap, mediaFlickr。 UCampus : 為最主要的專案,也就是整個校園應用的主體,原本規畫是包含著各個功能的連結,並提供建構需求的工具,目前包含著四個 Package 分別為 UCampus, UCampusFun, UCampusMap, UCampusNews。 UCampus :程式主要的進入點及各部分功能的連結。 UCampusFun : 目前僅包含提供連結至 AP Server 及要求資料的功能類別。 UCampusMap : 這個 Package目前和 UCampusMap 專案架構基本上一樣,不過已經把連結資料庫及 AP Server 的部分,改寫到 UCampusFun 這個 Package。 UCampusNews : 包含新聞發佈的相關類別。  UCampusMap : 地圖開發都是放在此處,可參考2011-07-27 UCampusMap 功能畫面 mediaFlickr : 對於社交活動中的 Flickr 放置在這個部分,基礎的開發方式可以參考搜尋Flickr上相關照片。 這些源碼都已經同步至本機上的 SVN Server。 而程式中所使用的圖片,都存放在本機上我的圖片裡面,並依照功能分類,地圖上有用...

2011年8月16日 星期二

Mobile Service 資料分類及資料庫存放位置

Mobile Service 是利用 Drupal 所開發出來的平台,Mobile Service 提供後台讓各單位人員可以註冊以及登入至系統發佈新聞等訊息,並且將這些訊息在前台顯示出來,除此之外也提供了校園單位簡介地理位置等資訊。 既然平台是利用 Drupal 所開發,所以要拉取資料庫的資料前,必須先來看一下各個資料存放於哪些資料表中。基本上與之前介紹的位置相似,可參考關於Drupal新增content時的資料表變動、Map 功能用到的 Drupal 資料 此兩篇介紹。 首先來看一下我對於 Mobile Service 所作的資料分類,目前的資料分類是依照新聞發佈、行事曆 以及部分地圖功能所做規劃。( 這裡為什麼說是部分的地圖功能,原因在於這部分只是存放發佈訊息及活動的位置,完整的地圖功能將包含了各類型單位、公車資訊等 )。 Type Field 功能說明 building (建築物) name 建物名稱 Floor 建物樓層 introduction 建物簡介 latitude 緯度 longitude 精度 units (單位或院所) atBuilding 所在建物 name 單位名稱 atFloor 所在樓層 introduction 單位簡介 number 單位室碼 phone 單位電話 fax 單位傳真 web 單位網址 type 單位類型(學術、行政) hasGroup 是否有組別 group (組別或系所) atBuilding ...

Map 功能用到的 Drupal 資料

Map 功能是最先開發的部分,所以資料庫的部分是沿用一開始明宗與漢卿他們所建立的生活資訊平台,目前此平台的資料表共有121個,但實際上在拉需求的資料時,會使用到的資料表並不多,而且位置有固定的模式,這個部分請參考 關於Drupal新增content時的資料表變動 node_revisions : nid : 應該是 node id ,值通常與 vid 相同,經過一段時間觀察,大部分所需擷取的資料都可以使用 nid 當成唯一鍵。(此部分為觀察結果後的判斷,並沒有細看 drupal 的原碼) uid :此部分為 Drupal 的使用者 id ,如果需要使用者資料與 uid 的關聯,可以參考 users 資料表,至於身份的部分可以參考 users_roles 以及 role 此兩個資料表;users_roles 負責 uid 與 rid 的對應,role 資料表可查詢到 rid 所對應到的使用者權限身份;而實際上每個使用者權限身份可以執行的動作則位於 permission 資料表。 title : 每個 PO 文的標題。因為整個系統的開發過程與一般先規畫資料庫再寫 AP 這樣的過程稍微不同。雖然在規畫時同樣需要定義出需求哪些資料,但是這邊所規畫出來的資料,未來會放在資料庫的哪個位置或是如何命名則是由 drupal 所決定;這裡所規畫出來的資料就是直接呈現於畫面上的資料。或許這樣解釋不是很清楚,這邊舉個例子,假設在平台上顯示了【系所 : 資訊工程學系】,那這個資訊工程學系的字串資料就是存在於 title 這個欄位,而資訊工程學系的詳細介紹就會存放在 body 欄位。 node : type : 此處標示著每個發佈的文章是屬於哪種類型,類型可以是建築物、單位、餐廳等,而這些類型必須在規劃資料時盡量的分類清楚,因為 drupal 上的這些類型並無法向規劃資料庫一樣直接給它們關聯,所以一不小心可能會照成大量的資料重覆存在於資料庫中,或是需要利用非常大量的...

2011年8月9日 星期二

debug - 自訂 ArrayAdapter 的 View

今天在編寫 news 部分的功能,因為需要在標題列後方加入一些圖片用來顯示是否有多媒體檔,這部分打算使用自己設計的 view,而負責存取資料的部分則是繼承原本的 ArrayAdapter ,製作一個新的 newsAdapter 類別,並且覆寫 getview() 這個方法。 在創建 inflater 物件後的初始一直有問題。getLayoutInflater()這個方法一直是未定義的,找到的解決方法為 : ((Activity)mContext).getLayoutInflater();...

2011年8月2日 星期二

不同 Package 間的 activity 切換

今天將 Map 功能移入 UCampus 主程式時一直無法正常執行,UCampus 是應用的入口和 Map 為不同的 Package,功能是當我進入應用時,UCampus 會顯示一些按鈕,接著按下 Map 功能的按鈕後將會起始 Map 功能。 不同 Package 間 activity 切換,與相同 Package 中的做法是大同小異的,但是要注意的是 ,在 AndroidManifest 裡 android name 必須填寫完整 package 名稱,同樣的 intent.setClass 也必須將呼叫的 class 完整名稱寫出。 UCampus.java intent.setClass(UCampus.this,nchu.UCampusMap.UCampusMap.class); AndroidManifest.xml <activity android:name="nchu.UCampusMap.UCampusMap"></activity&...

2011年7月28日 星期四

在 MapView 中新增一個 View

當點擊地標後,如果需要顯示一個按鈕,那就需要另外加入一個包含著按鈕的 View ,而在本篇則會記錄一下如何利用 Layout 產生一個客製化的 View ,並加入至 MapView 中顯示。Layout 部分 pop.xml 原始碼 :<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextView android:layout_height="wrap_content" android:text="TextView" android:layout_width="wrap_content" android:id="@+id/textView1"></TextView><Button android:text="Button" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button></LinearLayout>...

2011年7月27日 星期三

2011-07-27 UCampusMap 功能畫面

本篇僅是目前地圖功能的畫面與記錄,因為未來的資料庫會有變動,所以暫時將目前的狀況做一個簡單的記錄,以供之後做參考。目前程式撰寫的部分著重在未來擴充性及維護的設計面上,而非功能性或畫面美觀,所以在這個版本與前一個版本的功能上差異並不大。Map 基礎物件簡介目前 Map 的架構下,在新增不同類型的地標時比之前更為容易,除了原本負責向 DB 要資料的 queryDB 這個類別外,還有 MarkerOverlay 類別負責建立地標圖層和 MarkerPoint 類別負責存取地標資訊。queryDB 類別接收到 query 的位址或是包含需求欄位與判斷值的要求,向遠端的 AP 做查詢的要求,並取回 JSON 格式資料,此 JSON 資料將存在於 queryDB 物件中,經由操作 queryDB 物件可以取出查詢到的資料甚至於將 queryDB 中的 JSON 物件取出。MarkerOverlay 類別在建構 MarkerOverlay 物件時,可以依照不同類別的資料創建,代表著不同類別的資料分別放在不同的圖層中,方便未來的維護;而在點擊地標時可將地標移至畫面中央,並跳出一個可點擊的按鈕,經由點擊此按鈕得到更多相關的資訊;點擊按鈕後的相關資訊由另外的類別作維護,將建構地標的資訊以及地標本身所包含的資訊做分割,好處在於可以需要的時候再向 DB 作要求,一方面可以減少 query 時傳遞的資料量,另一方面也可以降低行動裝置內存在著許多不需要的資訊。MarkerPoint 類別繼承自 GeoPoint...

Google Map ItemizedOverlay 使用

這個部分會來簡介一下如何使用 ItemizedOverlay 來達到放至地標在地圖上,並且點選地標可以顯示相關訊息的功能。ItemizedOverlayItemizedOverlay 是繼承自 Overlay 的抽象物件,所以也必須要先實做,當實做 ItemizedOverlay 時,除了建構子外有兩個必須要覆寫的方法,一個是 creamItem() 另一個是 size() ,如果需要對地標做點擊的動作,那就需要再覆寫 onTap() 這個方法,首先來看一下完整的原始碼 (此處把 import 的部分刪除) :public class exMap extends MapActivity { /** Called when the activity is first created. */ GeoPoint mGeoPoint01,mGeoPoint02; ArrayList<OverlayItem> items = new ArrayList<OverlayItem>(); Context mContext; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MapView mMapView = (MapView)findViewById(R.id.mapview);...

2011年7月26日 星期二

Google Map Overlay 使用

當使用 Map 時需要在地圖上使用一些座標圖示或是繪圖等功能,這時候就需要在原本的地圖上加上圖層,利用圖層就可以達成並且可以針對不同的圖層給予不同的功能,方便於管理與設計。OverlayOverlay是一個抽象類別,所以必須在使用前,先建立一個繼承自此抽象類別的自訂圖層類別,並將需求的功能實做,這裡用一個簡單的例子來說明如何使用圖層,範例功能將利用圖示顯示 animateTo(GeoPoint) 所設定的座標。原始碼 :package com.nchu.exMap;import java.util.ArrayList;import java.util.List;import com.google.android.maps.GeoPoint;import com.google.android.maps.MapActivity;import com.google.android.maps.MapController;import com.google.android.maps.MapView;import com.google.android.maps.Overlay;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Point;import...

Android 上使用 Google Map API

當新建一個 Android 的專案時,可以選擇要使用的 API 版本,要注意的是一般的 Android API 版本並不包含 Google Map API,所以當需要使用到 Google Map API 時則需要選擇 Target name 為 Google APIs 的選項,並配合所需要的版本,使用前還必須申請一個 Android Map API Key。申請 Android Map API Key申請 Key 必須要有系統的證明書以及一個 Google 帳號,測試用的可以利用 Debug 的證書,不過未來如果需要發佈的話,則需要一份利用所要發佈的程式產生的 MD5 證書,並利用此證明書去申請 Key 之後才能發佈。詳細申請步驟可以參考 Google 說明頁面 : Obtaining a Maps API KeyDebug 證書的路徑在 Eclipse 中選擇 Windows > Preference > Android > Build,其中的 Default debug keystore 的值就是 debug.keystore 的路徑。得知此路徑後就可以利用 keytool 指令取得MD5值,指令為 keytool -list -keystore debug.keysotre 。接著利用剛剛取得的 MD5 碼,可以至 Google Map API key 申請頁面上申請 key,只要將取得的 MD5 碼填入並按下產生即可取得。Google Map API 簡介Google...

Pages 71234 »
Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Powered by Blogger