【问题标题】:RelativeLayout set view to the right of a centered viewRelativeLayout 将视图设置在居中视图的右侧
【发布时间】:2013-01-31 05:14:30
【问题描述】:

我尝试将视图设置在第一个视图的右侧,并在 RelativeLayout 内将它们底部对齐。

以下代码在我看来应该可以工作。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:background="#999999"
    android:padding="10dp" >

    <View
        android:id="@+id/v1"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_centerInParent="true"
        android:background="#FFFFFF" />

    <View
        android:id="@+id/v2"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignBottom="@id/v1"
        android:layout_toRightOf="@id/v1"
        android:background="#FF0000" />

</RelativeLayout>

但结果并不是我所期望的。

这里有什么问题?

为了清楚我的期望:两个立方体应该底部相互对齐,红色立方体应该在白色立方体的右侧(外侧)。

编辑:

我发现了问题。它不是这个布局,而是包含它的父列表(它是一个专有的 Horizo​​ntalListView)。它似乎以某种方式调整其子视图的大小,这导致了问题。

【问题讨论】:

    标签: android android-layout alignment android-relativelayout


    【解决方案1】:
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:layout_width="300dp"
                    android:layout_height="300dp"
                    android:background="#999999"
                    android:padding="10dp" >
    
        <View
                android:id="@+id/v1"
                android:layout_width="200dp"
                android:layout_height="200dp"
                android:layout_centerInParent="true"
                android:background="#FFFFFF" />
    
        <View
                android:id="@+id/v2"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:background="#FF0000" 
                android:layout_alignBottom="@+id/v1" 
                android:layout_alignBaseline="@+id/v1"
                android:layout_alignRight="@+id/v1"/>
    
    </RelativeLayout>
    

    我说的对吗? ;)

    【讨论】:

    • 奇怪,完全相同的布局对我不起作用。同样的问题。它一定是某种缩放问题,但实际上应该由android正确处理。我已经在 Galaxy Nexus 和 Nexus 10 上对其进行了测试,结果相同。
    • 问题实际上是父视图,所以问题不是真的有效。我只是将随机答案标记为已接受...
    【解决方案2】:

    它对我有用。我的猜测是,无论您要测试什么,sp 都会从默认 sp=dp 缩小。这将使您的 dp 填充将块推过,因为灰色和白色块之间的可用空间量是:

    (300-200)/2 - 10 = 40
    

    你的红色方块是 50。

    如果您想要更一致的结果,请使用 dp,因为 sp 将根据偏好进行缩放,并且通常用于文本缩放。

    【讨论】:

    • 您是否也删除了填充?
    • 问题实际上是父视图,所以问题不是真的有效。我只是将随机答案标记为已接受...抱歉造成混淆。
    【解决方案3】:

    不要使用 sp 作为单位。尝试改用 dp(设备像素)。这将考虑设备。在您的情况下,图像未正确缩放,因此出现此结果。您还可以在视图 v2 上设置重力。类似的东西:

    android:gravity="botton|right"
    

    或者您也可以尝试将基线设置为:

    android:layout_alignBaseline="@+id/v1"
    

    并将 alignRight 设置为:

    android:layout_alignRight="@+id/v1"
    

    【讨论】:

    • 对不起,我用 sp 出错了。我纠正了这个问题。但这并没有什么不同。在 RealtiveLayout 中使用重力对我来说似乎很尴尬,因为项目应该使用 Relativelayout 参数定位。
    • 设置 layout_alignBaseLine 和 layout_alignRight 有效吗?
    • 问题实际上是父视图,所以这个问题不是真的有效。我只是将随机答案标记为已接受...抱歉造成混淆。
    猜你喜欢
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    相关资源
    最近更新 更多