2011-01-16 12 views
5

Als Teil einer größeren Benutzeroberfläche habe ich eine RelativeLayout mit drei Ansichten, die ich möchte, um die gleiche Breite zu haben. Die drei Ansichten sind "gestapelt" auf der jeweils anderen wie dieseWie man mehrere Ansichten die gleiche Breite bildet?

  1. ImageView
  2. TextView
  3. ImageView

ich verschiedene Dinge wie Einstellung der View s'versucht haben android:layout_width zu "wrap_content", setzen Sie android:layout_width auf "0px" und android:layout_weight auf "1", wie von this answer vorgeschlagen, und setzen Sie die View s in eine LinearLayout ohne Erfolg.

Wie kann ich diese drei Ansichten die gleiche Breite erhalten?

Relevante Teil des XML-Layout:

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="0px" 
    android:layout_weight="1"> 
     <ImageView 
      android:layout_above="@string/window_text" 
      android:layout_below="@string/eighteen_id" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:paddingTop="5dp" 
      android:layout_alignParentRight="true" 
      android:paddingBottom="5dp" 
      android:src="@drawable/line1" 
      android:id="@string/line_1_id"/> 
     <TextView 
      android:layout_above="@string/line_2_id" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" 
      android:gravity="right" 
      android:layout_centerVertical="true" 
      android:textColor="#000000" 
      android:id="@string/window_text"/> 
     <ImageView 
      android:layout_above="@string/top_row_id" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_alignParentRight="true" 
      android:paddingTop="5dp" 
      android:paddingBottom="10dp" 
      android:src="@drawable/line1" 
      android:id="@string/line_2_id"/> 
</RelativeLayout> 
+0

Sie zeigen eine RelativeLayout, kein Linearlayout? –

+0

Ich habe mehrere andere 'View's unter diesem' RelativeLayout', die relative Positionierung verwenden. –

Antwort

19

Dies ist sehr einfach, siehe unten. Die "Magie" ist einfach. Setzen Sie das übergeordnete Element auf wrap_content und die untergeordneten Ansichten auf das übergeordnete Element. Die kleineren untergeordneten Ansichten werden dann immer auf die Größe der größten untergeordneten Ansicht festgelegt.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <LinearLayout 
     android:id="@+id/bottom_row" 
     android:orientation="vertical" 
     android:layout_alignParentBottom="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

     <Button 
      android:id="@+id/view1" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="123" /> 

     <Button 
      android:id="@+id/view2" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="more text" /> 

     <Button 
      android:id="@+id/view3" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="even more text" /> 
    </LinearLayout> 
</RelativeLayout> 

alt text

1

Versuchen Sie android Einstellung: layout_width = „fill_parent“ für die beiden Bildansichten, so wie du es für die Textview hat? Wenn Sie möchten, dass die drei Ansichten die Breite der breitesten sind, können Sie alle drei in eine LinearLayout mit android: layout_width = "wrap_content" umbrechen.

+0

Ich habe beide Vorschläge ausprobiert, aber sie haben nicht funktioniert. Der Text überströmt die Bilder sowohl auf der rechten als auch auf der linken Seite. –

0

Sie können die Bildansichten so einstellen, dass sie die übergeordnete Breite füllen, indem Sie in der ImageView android: scaleType = "" einstellen, aber wenn der Text die Bildschirmbreite nicht ausfüllt und die Bildbreite genau der Textbreite entspricht, Sie müssen es programmatisch tun, indem Sie die Breite der Textansichten erhalten und dann die Breite des Bildausschnitts auf diese einstellen.

+0

Ich stieß auf das Gegenteil. Ich wollte, dass meine TextViews ihre Breite nicht über die Breite meines ImageView hinaus erweitern. Die TextViews waren, wenn sie auf wrap_content gesetzt waren, viel breiter als die ImageView. Also musste ich ihre Breite im Code einstellen. Ein Element layout_matchWidth wäre in RelativeLayout sinnvoll. – Mark

Verwandte Themen