2011-09-15 52 views
4

是否有一種方法可以爲一個Android應用程序提供兩種不同的Java代碼?一個定位手機設備,另一個定位平板設備。用於手機和平板電腦目標的不同控制器

例如,像HomeActivity.java和HomeActivity-large.java

基本上我想提出一個Android應用程序有以下決議不同的佈局。

我知道我可以使用layout-large來爲大型設備設置特定的佈局。我不確定如何針對平板電腦以及針對手機對象的具體邏輯。

我想這樣做的原因是我想在屏幕上進行API調用,但我不想在手機上進行此操作。

作爲一種替代方法,我曾想過在使用布爾值(我不確定哪一個)測試應用程序運行在哪種設備上。但我擔心它會變得混亂。

另一件事可能是使我的應用程序的所有功能庫,然後使用庫的兩個不同的應用程序庫。該解決方案的問題是,一些代碼將被複制。

有什麼建議嗎?

+0

只要有2個應用程序,一個是平板電腦和一個手機作爲一個項目。如果編譯爲手機它有一個用戶界面,併爲平板電腦編譯有另一個。 –

+0

我正試着做你說的話。這聽起來很有趣。你如何做「如果編譯爲手機它有一個用戶界面,並編譯爲平板電腦有另一個」部分雖然? –

回答

3

選項1: 爲了有一個項目,編譯成你需要使用條件編譯的一個或多個應用程序。基本上,像這樣

//#ifdef Phone 
// do something here 
//#else Tablet 
// do something else 
//#endif 

Java (Eclipse) - Conditional compilation 對於如何在Eclipse條件編譯爲Android。

選項2: 你可以在運行時測試的屏幕尺寸,以確定哪些用戶界面顯示。請參閱:

http://developer.android.com/guide/practices/screens_support.html

xlarge screens are at least 960dp x 720dp 
large screens are at least 640dp x 480dp 
normal screens are at least 470dp x 320dp 
small screens are at least 426dp x 320dp 
+0

這看起來非常好,我將找到一種方法來實現選項1.我發現選項2非常簡單直接實現,也可以是有用的(使用getResources()。getConfiguration()。screenLayout) –

1

不同的解決方案,只是前兩個是我能想象:把你的平板電腦

1)佈局與特定的ID和設置GONE可見屬性的看法。填充佈局後,使用findViewById(...)檢查視圖是否存在。如果結果爲空,則表示您處於智能手機佈局中,否則您在平板電腦上。這種方法完全依賴於自動系統設備的分辨率檢測。
2)使用此代碼片段以像素爲單位獲取屏幕的寬度和高度,並自行決定執行的代碼。

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 
Log.d("log", "Screen is " + metrics.widthPixels + "x" + metrics.heightPixels); 
+0

感謝您的評論。這兩種解決方案聽起來都是可行的,但有點冒險。也許作爲最後的手段。我真的很喜歡乾淨的方式來實現這一點。 –

相關問題