2013-03-15 77 views
6

我需要能夠使用填充的相對大小 - 根據設備的分辨率和dpi可以更大或更小。帶有邊距和填充的Android重量

例如,如果我的視圖寬100px,我希望有10px填充左側和10px填充右側。 但是,如果它運行在一個更高密度的屏幕上,並且它是250px,那麼我需要左右兩邊的填充都是25pixels。

硬編碼像素或dp似乎並不合理,如果我可以避開它,我也更喜歡避免代碼隱藏縮放邏輯。我也不想使用任何額外的加權空視圖來獲得相同的效果。不知道我怎麼可以用它來模擬填充。

有沒有辦法從XML做到這一點?還是必須根據背後代碼中的設備分辨率/ dpi來擴展它們?

+0

你必須要更具體。保證金,填充和重量都有非常不同的目標。重量將設置您的視圖的寬度和/或高度,但不是邊距。填充用於widget /視圖本身的*內部,所以這比weight屬性更進一步。 – 2013-03-15 13:44:34

+0

@StefandeBruijn點,修改了問題。 – George 2013-03-15 13:48:05

+1

你說DP(i)似乎不合理,爲什麼不呢?它們不是硬編碼像素。它們是每英寸點數。他們會做你想要的。 8dpi(谷歌建議的保證金)在高分辨率屏幕上的分辨率將高於在低分辨率屏幕上的分辨率。 – 2013-03-15 13:54:34

回答

0

這不是真正的「填充相對大小」,但我認爲使用Android dimension value defined in XML會做你想做的。很難從你的問題中猜測出你想避免「硬編碼像素」,而且「從xml執行此操作」;)

上面的鏈接給出了這個例子;

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <dimen name="textview_height">25dp</dimen> 
    <dimen name="textview_width">150dp</dimen> 
    <dimen name="ball_radius">30dp</dimen> 
    <dimen name="font_size">16sp</dimen> 
</resources> 

然後;

<TextView 
    android:layout_height="@dimen/textview_height" 
    android:layout_width="@dimen/textview_width" 
    android:textSize="@dimen/font_size"/> 

Android SDK本身使用這種方法;

例如, values/dimens.xml

<resources> 

    <!-- Default screen margins, per the Android Design guidelines. --> 
    <dimen name="activity_horizontal_margin">16dp</dimen> 
    <dimen name="activity_vertical_margin">16dp</dimen> 

</resources> 

values-sw600dp/dimens.xml

<resources> 

    <!-- 
    Customize dimensions originally defined in res/values/dimens.xml (such as 
    screen margins) for sw600dp devices (e.g. 7" tablets) here. 
    --> 

</resources> 

您可以針對values-FOO在API級別,屏幕尺寸,縱向VS景觀,上面的「多」的組合,當你providing resources通過使用「配置限定符」 。