2013-08-04 64 views
1

我的問題圍繞着一個特定示例所代表的一般問題展開。Android佈局不同API級別之間的區別

當我創建具有以下標記的按鈕:

<Button 
     android:id="@+id/btnLookup" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_height="match_parent" 
     android:layout_width="40dp" 
     android:layout_weight="1" 
     android:enabled="false" 
     android:text="@string/go_button" 
     android:textColor="@color/black" /> 

並部署該應用的API級10裝置中,當部署到按鈕的高度比相同按鈕的高度要低得多一個API Level 17設備 - 也就是說,較小的按鈕不會填充其水平對齊的內襯布局中的其他項目的高度,而較大的版本則可以。

這可能與fill_parent vs match_parent有關,我不確定。

我遇到的問題是如何定義使基本屬性像這樣在不同設備上相同的佈局。

如果答案是,你沒有 - 你使用多個佈局文件,那麼我的下一個問題是人們用什麼資源來處理這些東西?例如,是否有某個地方存在api級別之間的差異,以便有人可以諮詢它,我們是否可以通過反覆試驗來解決這些問題?

回答

0

從一臺設備到另一臺設備的佈局呈現差異不應與設備上運行的Android版本相關。但是,由於不同的屏幕密度和尺寸,差異可能是(並且主要是)。

此問題(在某種程度上)通過在標註視圖時使用dp(密度像素)而不是px(像素)來取消。對於不同的屏幕密度,您可以通過使用不同的dimens.xml來進一步減少怪異。這樣,您將在values-mdpi之內有一個dimens.xml,另一個在values-hdpi之內,另一個在values-xhdpi之內。

我更喜歡另一種方法。我喜歡使用屏幕尺寸來處理項目的位置。我在運行時獲得屏幕寬度和高度,並以編程方式將邊距和填充添加到佈局項目。

// Get screen dimensions 

// Add a ViewTreeObserver.OnGlobalLayoutListener() to the view 

    // Update height and width for items 

    // Position items using screenWidth and screenHeight 

這是一種可以防止渲染的傻瓜。不確定這種方法在某些情況下是否失敗。

編輯:

您可以通過'Providing Resources'看了就知道了關於Android使用,以決定給定設備/形勢最好的資源條件。

+0

我相信這是影響按鈕高度的api級別,因爲我可以通過使用相同的確切代碼(上面的標記來自)獲得兩個不同的按鈕高度,並將目標sdk從10更改爲17請注意,這是在模擬器上。 – Michael

+0

@Michael是的,你說得對。寬度和高度設置爲'wrap_content'的按鈕在運行API 10和API 17的兩個模擬器上看起來大小不同。但是,當我將寬度和高度設置爲「100dp」並將文本大小設置爲「20sp」時,我得到以下結果:[Link](http://pho.to/3E9xJ)。 _現在他們看起來一樣。這暗示了API版本之間的默認值不同。但是,我無法證實這一點。 – Vikram

+0

有關在哪裏可以找到這些默認值的想法? – Michael