Android权重与边距和填充

6
我需要能够使用相对大小进行填充 - 根据设备的分辨率和dpi大小而变大或变小。
例如,如果我的视图宽度为100px,我希望左右各有10px的填充。 但是,如果它在更高密度的屏幕上运行,比如250px,我需要左右填充分别为25像素。
硬编码像素或dp似乎不太合理,如果可以避免掉代码后端的缩放逻辑,那就更好了。我也不想使用任何额外的加权空视图来获得同样的效果。无论哪种方式,我都不确定该如何模拟填充。
能否从xml中实现这一点呢?还是必须根据设备分辨率/dpi从代码后面进行缩放呢?

你需要更加具体一些。Margin(外边距)、Padding(内边距)和Weight(权重)都有非常不同的目标。Weight会设置视图的宽度和/或高度,但不会影响margin。Padding是用于小部件/视图本身的“内部”,因此与weight属性相距更远。 - Stefan de Bruijn
1
你说DP(i)似乎不合理,为什么呢?它们不是硬编码像素。它们是每英寸点数。它们将完全按照您的要求执行。8dpi(Google建议的边距)在高分辨率屏幕上会比低分辨率屏幕上有更多的像素。 - Stefan de Bruijn
使用dpi意味着在不同的设备上以英寸为单位看起来大小完全相同。这很酷,但是由于我使用了layout_weight对齐内容,在某些情况下使用dpi(例如用于填充)将导致一些令人不悦的布局差异。 - George
那么也许你的问题应该是关于那些它不起作用的异常情况 :) - Stefan de Bruijn
到目前为止,我发现的最佳解决方案是加权空视图。 - hasan
显示剩余2条评论
1个回答

0

这并不是真正的“填充相对大小”,但我认为使用在Android 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>

当您通过使用“配置限定符名称”提供资源时,可以在API级别、屏幕尺寸、纵向与横向模式以及以上组合中针对values-FOO进行定位。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接