Как получить TextView, чтобы не вытолкнуть ImageView с экрана - PullRequest
0 голосов
/ 23 декабря 2011

Я динамически генерирую макет, и для этого у меня есть файл menu_row_element.xml, который содержит повторяющуюся структуру строк.

Он состоит из LinearLayout (горизонтальный), который содержит изображение большего размера.текст над меньшим и ImageView с правой стрелкой (внутри другого LinearLayout, чтобы держать его выровненным по правому краю).

Когда текстовая часть мала, все выглядит хорошо.Однако, если текстовая часть длинная, стрелка вправо отодвигается от экрана.

Как сделать так, чтобы стрелка вправо всегда была выровнена по правому краю на экране и чтобы текстовые представления правильно переносили текст?

На этом изображении последняя строка в порядке, так как текст маленький, но строки 1 и 2 сдвигают стрелку вправо от экрана.

занятый кот http://img706.imageshack.us/img706/2927/device20111221203115.jpg

XML-файлэто:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:clickable="true"
        android:background="@drawable/main_menu_button"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:orientation="horizontal"
        android:gravity="left|center_vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <!-- Icon of each section -->
        <ImageView
            android:id="@+id/menu_icon"
            android:layout_width="wrap_content" 
            android:layout_height="fill_parent"
            android:padding="10px" />

        <!-- Text, in two parts -->
        <LinearLayout
            android:orientation="vertical"
            android:paddingLeft="10px"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent">

            <!-- Big font text -->
            <TextView
                android:id="@+id/menu_element_big_text"
                android:textSize="20dp"
                android:textColor="@color/black"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />

            <!-- Small font text -->
            <TextView
                android:id="@+id/menu_element_small_text"
                android:scrollHorizontally="false"
                android:textSize="15dp"
                android:textColor="@color/black"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>

        <!-- Layout just to be able to right align, sheesh! -->
        <LinearLayout
            android:gravity="right|center_vertical"
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:padding="0dp"
                android:src="@drawable/right" />
        </LinearLayout>

    </LinearLayout>

Спасибо!

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

Вы можете сохранить свой линейный макет.Просто задайте значение веса макета 1 для текстового блока.Вам не нужно помещать ваше изображение в другой макет таким образом.

Вы также хотите ограничить свои текстовые просмотры одной строкой.

1 голос
/ 23 декабря 2011

Используйте RelativeLayout.

Структура должна быть такой:

<LinearLayout> <!--This is the outer one and will contain everything else-->
       <RelativeLayout> <!-- width: fill, height: wrap, one of these for each row-->
           <ImageView 
              android:id="@+id/rightArrow"
              android:layout_alignParentRight="true"/> <!-- This is the arrow that points to the right wrap width and height-->
           <ImageView
              android:id="@+id/icon"
              android:layout_alignParentLeft="true"/><!--This is the icon on the left wrap width and height-->
           <TextView
              android:id="@+id/largeText"
              android:text="Large Text"
              android:layout_alignParentBottom="true"
              android:layout_toLeftOf="@+id/rightArrow"
              android:layout_toRightOf="@+id/icon"/> <!-- fill width and wrap height-->
           <TextView
              android:id="@+id/smallText"
              android:text="Small Text"
              android:layout_below="@+id/largeText"
              android:layout_toLeftOf="@+id/rightArrow"
              android:layout_toRightOf="@+id/icon"/> <!-- fill width and wrap height-->
        </RelativeLayout>
    </LinearLayout>

Или, если вы предпочитаете (и это, вероятно, лучше), сделайтеэто:

<LinearLayout> <!--This is the outer one and will contain everything else-->
   <RelativeLayout> <!-- width: fill, height: wrap, one of these for each row-->
       <ImageView 
          android:id="@+id/rightArrow"
          android:layout_alignParentRight="true"/> <!-- This is the arrow that points to the right wrap width and height-->
     <LinearLayout android android:layout_toLeftOf="@+id/rightArrow"
          ><!--orientation:horizontal, fill width, wrap height-->
       <ImageView
          android:id="@+id/icon"/><!--This is the icon on the left wrap width and height-->
       <TextView
          android:id="@+id/largeText"
          android:text="Large/> <!-- fill width and wrap height-->
       <TextView
          android:id="@+id/smallText"
          android:text="Small Text"/> <!-- fill width and wrap height-->
     </LinearLayout>
    </RelativeLayout>
</LinearLayout>
...