中心TextView没有重叠图像(centerHorizo​​ntal和toRightOf)

时间:2016-12-03 16:54:49

标签: android android-layout

我已经花了大约2-3个小时找到解决方案。但无论我尝试哪种stackoverflow答案,它都无法正常工作。

我需要的只是一个简单的布局(在CardView中),左边是ImageView,布局中心的文本(相对于其父级)不会重叠与图像。

当我设置android:layout_centerHorizontal="true"时,TextView居中,但如果我的文字太长则会在左侧重叠我的图像。如果我设置android:layout_toRightOf="@+id/answer1_image"我的文字不会重叠,但不会居中。将两个参数放在一起,TextView也不会居中。

以下是我的问题和前两张卡的XML代码的屏幕截图:

Layout preview

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".QuestionsActivity">

    <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/answer1_card"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:foreground="?android:attr/selectableItemBackground"
        android:onClick="answer1_submitted"
        app:cardUseCompatPadding="true"
        card_view:cardCornerRadius="4dp">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="4dp">

            <ImageView
                android:id="@+id/answer1_image"
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:layout_alignParentLeft="true"
                android:scaleType="fitStart"
                app:srcCompat="@mipmap/ic_launcher"/>

            <TextView
                android:id="@+id/answer1_text"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_centerHorizontal="true"
                android:gravity="center"
                android:layout_toRightOf="@+id/answer1_image"
                android:layout_centerInParent="true"
                android:text="@string/answer1"
                android:textSize="20sp"/>
        </RelativeLayout>
    </android.support.v7.widget.CardView>

    <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/answer2_card"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:foreground="?android:attr/selectableItemBackground"
        android:onClick="answer2_submitted"
        app:cardUseCompatPadding="true"
        card_view:cardCornerRadius="4dp">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="4dp">

        <ImageView
            android:id="@+id/answer2_image"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:layout_alignParentLeft="true"
            android:scaleType="fitStart"
            app:srcCompat="@mipmap/ic_launcher"/>

        <TextView
            android:id="@+id/answer2_text"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_centerHorizontal="true"
            android:gravity="center"
            android:text="@string/answer2"
            android:textSize="20sp"/>
        </RelativeLayout>
    </android.support.v7.widget.CardView>
...

5 个答案:

答案 0 :(得分:0)

我认为你搜索: https://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html

在特定ImageView中创建TextViewmarginRight添加ImageView之间的距离。

答案 1 :(得分:0)

我在您的案例中可以考虑的解决方案是,移除toRightOf并将left margin提供给textViewright margin提交给ImageView,作为ImageView&#39;尺寸

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/answer1_card"
    android:layout_width="match_parent"
    android:layout_height="80dp"
    android:foreground="?android:attr/selectableItemBackground"
    android:onClick="answer1_submitted"
    app:cardUseCompatPadding="true"
    card_view:cardCornerRadius="4dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="4dp">

        <ImageView
            android:id="@+id/answer1_image"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:layout_alignParentLeft="true"
            android:scaleType="fitStart"
            app:srcCompat="@mipmap/ic_launcher"/>

        <TextView
            android:id="@+id/answer1_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:gravity="center"
            android:marginLeft="80dp"
            android:layout_centerInParent="true"
            android:text="@string/answer1"
            android:textSize="20sp"/>
    </RelativeLayout>
</android.support.v7.widget.CardView>

答案 2 :(得分:0)

检查一下:

只需在您的布局(无硬编码)中使用以下TextView代码:

            <TextView
                android:id="@+id/answer1_text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@+id/answer1_image"
                android:layout_toEndOf="@+id/answer1_image"
                android:layout_centerVertical="true"
                android:gravity="center"
                android:text="@string/answer1"
                android:textSize="20sp" />

工作正常!!

TextView中的更改:

  • TextView layout_width更改为match_parent,将layout_height更改为wrap_content
  • 删除/删除:android:layout_centerHorizontal="true" android:layout_centerInParent="true"

  • 添加android:layout_centerVertical="true"

答案 3 :(得分:0)

只需看看有助于您解决此问题的简单步骤。

  1. 添加父级Framelayout,宽度应与父级
  2. 匹配
  3. 将您的ImageView添加到您的父Framelayout中,而不是将layout_gravity指定给左侧
  4. 将您的TextView窗口小部件添加到同一个父Framelayout中,而不是分配layout_gravity center_horizo​​ntal。

答案 4 :(得分:0)

你真的想使用relativelayout吗?如果没有,您可以添加Linearlayout和weightsum来实现此目的。

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:weightsum="1"
        android:orientation="horizontal"
        android:padding="4dp">

    <ImageView
        android:id="@+id/answer2_image"
        android:layout_width="0dp"
        android:layout_weight="0.3"
        android:layout_height="80dp"
        android:layout_alignParentLeft="true"
        android:scaleType="fitStart"
        app:srcCompat="@mipmap/ic_launcher"/>

    <TextView
        android:id="@+id/answer2_text"
        android:layout_weight="0.9"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="@string/answer2"
        android:textSize="20sp"/>
    </LinearLayout>