我已经花了大约2-3个小时找到解决方案。但无论我尝试哪种stackoverflow答案,它都无法正常工作。
我需要的只是一个简单的布局(在CardView中),左边是ImageView,布局中心的文本(相对于其父级)不会重叠与图像。
当我设置android:layout_centerHorizontal="true"
时,TextView居中,但如果我的文字太长则会在左侧重叠我的图像。如果我设置android:layout_toRightOf="@+id/answer1_image"
我的文字不会重叠,但不会居中。将两个参数放在一起,TextView也不会居中。
以下是我的问题和前两张卡的XML代码的屏幕截图:
<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>
...
答案 0 :(得分:0)
我认为你搜索: https://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html
在特定ImageView
中创建TextView
和marginRight
添加ImageView
之间的距离。
答案 1 :(得分:0)
我在您的案例中可以考虑的解决方案是,移除toRightOf
并将left margin
提供给textView
或right 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)
只需看看有助于您解决此问题的简单步骤。
Framelayout
,宽度应与父级ImageView
添加到您的父Framelayout
中,而不是将layout_gravity指定给左侧TextView
窗口小部件添加到同一个父Framelayout
中,而不是分配layout_gravity center_horizontal。答案 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>