12

我有以下 XML:

<RelativeLayout android:id="@+id/cover_box"
    android:layout_width="wrap_content" android:layout_height="wrap_content">
    <ImageView android:id="@+id/cover"
        android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <ImageView android:id="@+id/download" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:src="@drawable/mark_download"
        android:layout_centerInParent="true" android:layout_marginTop="90px" />
</RelativeLayout>

但看起来 marginTop 被忽略了。

4

5 回答 5

28

如果您希望第二张图像位于屏幕中心下方 90dp,则可以将其替换为 FrameLayout,您可以在其中控制填充以将图像向下移动。

<FrameLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true"
    android:paddingTop="90dp">
    <ImageView android:id="@+id/download" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:src="@drawable/mark_download"/>
</FrameLayout>
于 2011-10-25T20:30:31.447 回答
9

当您在父级中使用中心时,视图将直接放在中心。仅当对象位于视图顶部的 90 像素内时,边距顶部才会发挥作用。因此将居中的视图向下推以在其顶部保留至少 90px 的空间。所以它没有被忽视,但它没有产生你认为应该有的效果。

于 2011-10-25T20:23:05.760 回答
3

我希望进度条显示在下面,android:layout_centerInParent="true"所以我添加了一个虚拟TextView对象并将其设置为 centerInParent 。然后我将进度条放在它下面。现在你可以通过两种方式增加它与中心的距离。首先通过增加 TextView 中的 marginTop 和第二增加 TextView 高度。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/widget"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/splash" >

    <FrameLayout
        android:id="@+id/splash_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <TextView
        android:id="@+id/txt1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />

    <com.s3.tdd.interfaces.CircularProgressBar
        android:id="@+id/circularprogressbar2"
        style="@style/Widget.ProgressBar.Holo.CircularProgressBar"
        android:layout_width="110dip"
        android:layout_height="110dip"
        android:layout_below="@+id/txt1"
        android:layout_centerHorizontal="true" />

</RelativeLayout>
于 2014-07-17T12:27:12.483 回答
1

您可以将您的 imageview 放在其他 ViewGroup 中(RelativeLayout 布局的 LinearLayout),留下 imageview 的边距,并android:centerInParent="true"为 ViewGroup 做:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:centerInParent="true">
           <ImageView android:id="@+id/download" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/mark_download" android:layout_marginTop="90px" />    
    </LinearLayout>    
</RelativeLayout>
于 2015-04-21T21:11:54.343 回答
0

您可以制作一个虚拟视图并将其居中于父级。现在使用 layout:alignComponent 将视图相对于虚拟视图对齐并给出 marginTop。现在在代码中根据视图的宽度移动它以使其居中。

于 2015-03-19T16:19:03.237 回答