2016-12-03 22 views
0

我已經花了大約2-3小時尋找解決方案。但無論我嘗試使用哪種stackoverflow答案,它都無法正常工作。中心TextView沒有重疊圖像(centerHorizo​​ntal和toRightOf)

我所需要的是一個簡單的佈局(一個CardView內),在左側的ImageView的和在佈局中的中心的文本(相對於其父)不會與圖像重疊。

當我設置android:layout_centerHorizontal="true"時,TextView居中,但如果我的文本太長,它會在左側覆蓋我的圖像。如果我設置android:layout_toRightOf="@+id/answer1_image"我的文本不會重疊,但不居中。將兩個參數結合在一起TextView不會居中。

這裏是我的問題的截圖和第2張卡我的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> 
... 

回答

0

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

要創建之間的距離ImageViewTextView在您的特定ImageView中添加marginRight

+0

謝謝,但這會在我的答案文本的左側添加修正邊距。我想要的行爲是文字始終居中。因此,如果我對「我的問題文本」有一個很長的回答,那麼文本將在圖片旁邊開始。 – G00fY

+0

您是否在搜索:android:textAlignment =「center」 –

+0

因此,給TextView的空間右邊的imageView與「marginRight」的東西,並將android:textAlignment =「center」添加到textView。所以如果你有更長的回答,文字會更接近imageView,但不會超過它。 –

0

我能想到的解決方案,你的情況是,除去toRightOf並給予left margintextViewright marginImageView爲ImageView的大小

<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> 
+0

我已經嘗試使用佈局邊距來代替「toRightOf」。 問題是,當我將我的TextView設置爲「wrap_content」和「centerHorizo​​ntal」時,它將忽略其邊距。 如果我將它設置爲「match_parent」,它將尊重邊距,但我只能將TextView中的文本居中(通過「gravity」或「textAlignment」)。但這種方式的文本有一個邊際抵消家長中心。 – G00fY

0

一個「解決方案」,我想出了是去除toRightOf併爲此在我的TextView中設置maxWidth。這樣的答案文本至少總是居中並且不能覆蓋圖像。但是如果文本較長,它也不會使用右側的空格。不是很滿意。仍然希望有人有更好的解決方案。 :)

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:

  • 變化TextViewlayout_widthmatch_parentlayout_heightwrap_content
  • 移除/刪除:android:layout_centerHorizontal="true" android:layout_centerInParent="true"

  • 添加android:layout_centerVertical="true"

0

看看這個簡單的步驟,可以幫助你解決這個問題。

  1. 添加父Framelayout該寬度應該是匹配父
  2. 添加您ImageView到您的父母Framelayout比分配layout_gravity到左
  3. 添加您TextView工具到您的同一母公司Framelayout比分配layout_gravity CENTER_HORIZONTAL。
0

你真的想使用relativelayout嗎?如果不是的話,你可以添加一個LinearLayout和權重來實現這一點。

<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>