2011-08-23 121 views
3

我正在開發320 * 480的應用程序。如何使應用程序在480 * 854屏幕上運行?當我試圖在480 * 854屏幕上運行時,應用程序的原始設計看起來很小。我想爲Android中的每個屏幕創建單獨的佈局嗎?如果是這樣,請提供示例提示繼續。多屏分辨率

回答

2

的,你可以讓你的佈局動態參考可用寬度和高度的設備

Display mDisplay= activity.getWindowManager().getDefaultDisplay(); 
int width= mDisplay.getWidth(); 
int Height= mDisplay.getHeight(); 

設置您的佈局perecentage方面參考利用規模

+0

你也可以看看這裏:http://developer.android.com/guide/practices/screens_support.html –

+0

爲此,你已經爲每種屏幕類型創建單獨的drawables –

+0

是的,我嘗試過類似的東西。但我不確定這種方法是否正確。既然我們必須爲所有可用的屏幕創建單獨的佈局?這裏是我的代碼: DisplayMetrics displaymetrics = new DisplayMetrics(); \t \t getWindowManager()。getDefaultDisplay()。getMetrics(displaymetrics); \t \t ht = displaymetrics.heightPixels; \t \t wt = displaymetrics.widthPixels; \t \t如果(ht == 240 && wt == 320){ \t \t \t setContentView(R.layout.timetable_ldpi);其他如果(ht == 240 && wt == 400){ \t \t} \t \t} – gowri

0

在Android中,你不要的不是靠絕對分辨率,而是專注於屏幕密度。 是的,你可能需要創建不同的佈局來支持各種密度和屏幕尺寸。一般來說,Android支持四種密度(低,中,高,特高)

我建議您閱讀Supporting Multiple Screens。我認爲這會幫助你實現你需要做的事情。它有多個部分,分別介紹設計替代佈局和繪圖以及與支持多屏幕分辨率相關的其他有用信息。

+0

謝謝你的答案。 – gowri

0

喜歡迎堆棧溢出...
從1.6版開始,Android支持可分爲以下三類多種屏幕分辨率和像素密度:

  • 小:設備的屏幕尺寸比T-Mobile的小G1或三星I7500,如HTC Tattoo
  • 正常:屏幕尺寸與G1或I7500大致相同的設備。
  • 大型:設備的屏幕尺寸大於G1或I7500更大

開發人員可以控制是否以及如何應用通過使用在導入工具似乎設備各組(諸如平板式裝置)。 Android框架API和SDK。有關實施的詳細信息,請參閱Android開發人員指南文章支持多屏幕。您可以參考以下鏈接MultiResolution

或者可以使用

Display displayparm= activity.getWindowManager().getDefaultDisplay(); 
int width= displayparm.getWidth(); 
int Height= displayparm.getHeight(); 
8

我已經實現了我自己的處理多種屏幕分辨率的方式。

你當然可以通過在百分比

問題發生方面只與Views/Layouts具有某種恆定的寬度高度可以說280dp在運行時設置LayoutParams避免這個問題。解決方案很簡單,如果我們以編程方式百分比方面樹立我們Views/Layouts佈局PARAMS只有用不斷寬度高度在必要時,其他地方嘗試使用match_parent來填補空白或使用weights和定義每View相對於其他Views這將有助於你的佈局好看幾乎在每一個屏幕分辨率

這裏是一個示例XML

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <LinearLayout 
      android:id="@+id/mLayout" 
      android:layout_width="280px" 
      android:layout_height="300px" /> 

    </RelativeLayout> 

說明:我已經使用PX爲固定大小的佈局的寬度/高度因爲在LayoutParams layoutParams = new LayoutParams(int width, int height);widthheight取值作爲像素

這裏是設置寬度的示例代碼身高按百分比計

final ViewTreeObserver mLayoutObserver = mLayout.getViewTreeObserver(); 

    mLayoutObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() 
    { 

     @Override 
     public void onGlobalLayout() 
     { 
      DisplayMetrics metrics = getResources().getDisplayMetrics(); 

      int deviceWidth = metrics.widthPixels; 

      int deviceHeight = metrics.heightPixels; 

      float widthInPercentage = ((float) 280/320) * 100; 

      float heightInPercentage = ((float) 300/480) * 100; 

      int mLayoutWidth = (int) ((widthInPercentage * deviceWidth)/100); 

      int mLayoutHeight = (int) ((heightInPercentage * deviceHeight)/100); 

      LayoutParams layoutParams = new LayoutParams(mLayoutWidth, mLayoutHeight); 

      mLayout.setLayoutParams(layoutParams); 
     } 
    }); 

現在可能是一些人想知道發生了什麼事在這裏

float widthInPercentage = ((float) 280/320) * 100

讓我解釋一下是我LinearLayout和的寬度是我的設備屏幕的寬度(關於這一點我很開發),我目前知道我有一個設備分辨率320×480上測試,我在做什麼是計算我的佈局是多少百分比方面覆蓋,然後

int mLayoutWidth = (int) ((widthInPercentage * deviceWidth)/100)

在這裏,我根據屏幕分辨率,並通過這種方式你Views/Layouts看起來完全一樣在每個屏幕分辨率計算新的寬度爲我的佈局。

結論:如果您需要在佈局文件(即XML),然後PX設置一些固定寬/高Views/Layouts始終設置值編程設置LayoutParams

一種谷歌Android工程師的建議,我想你們應該認真思考改變dp/dip單位,以percentage

+0

難道你沒有很多可能的錯誤,因爲這不會在所有的Android設備上運行,例如在3-4 API上運行的API –

+0

@AkshatAgarwal是的,上面的解決方案已經針對** Api 8 **進行了測試。 –

1

先生巴巴爾

我想你應該按照下面的公式,而不是計算像

float widthInPercentage = ((float) 280/320) * 100; 
float heightInPercentage = ((float) 300/480) * 100; 
int mLayoutWidth = (int) ((widthInPercentage * deviceWidth)/100); 
int mLayoutHeight = (int) ((heightInPercentage * deviceHeight)/100); 

,如果你採取了這個原則,我建議這樣的:

int baseWidth=320; 
int baseHeight=480; 

int mLayoutWidth = (int) ((280* deviceWidth)/baseWidth); 
int mLayoutHeight = (int) ((300* deviceHeight)/baseHeight); 

而且這是要爲工作視圖而不是文本大小;