Проблема с макетом таблицы Android с двумя строками и выравниванием по правому краю

У меня проблема с макетом Android. То, что я пытаюсь создать, похоже на это:

<table width="300px">
    <tr>
        <td span="2">test</td>
    </tr>
    <tr>
        <td align="right">image1</td>
        <td align="right">image2</td>
    </tr>
</table>

За исключением того, что я бы хотел, чтобы «image1» и 2 были вместе. В любом случае,

Вот макет, который я использую в Android:

<?xml version="1.0" encoding="UTF-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <TableRow android:layout_gravity="left" >

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_column="1"
            android:layout_gravity="left|center_vertical"
            android:layout_span="2"
            android:paddingRight="5dip"
            android:textColor="#ffffffff"
            android:textSize="13dip" />
    </TableRow>

    <TableRow android:layout_gravity="right" >

        <ImageView
            android:layout_width="50px"
            android:layout_height="120px"
            android:layout_column="1"
            android:layout_marginLeft="15dip" />

        <ImageView
            android:layout_width="263px"
            android:layout_height="150px"
            android:layout_column="2"
            android:layout_marginLeft="15dip" />
    </TableRow>

</TableLayout>

Я также попытался поставить android:layout_gravity:"right" на сами ImageViews, но ничего не сделал.

По какой-то причине этот макет Android всегда делает отступ метки (он не охватывает столбцы) и никогда не выравнивает что-либо по правому краю во второй строке. Я не знаю, что я делаю неправильно. Это Андроид 2.1. Кто-нибудь знает?


person automaton    schedule 06.02.2012    source источник


Ответы (3)


Хорошо, мой ответ таков:

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

          <TextView
                android:id="@+id/textid"
                android:text="SOME TEXT"
                android:layout_alignParentTop="true"
                android:layout_alignParentLeft="true"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="left"
                android:paddingRight="5dip"
                android:textColor="@color/white"
                android:textSize="13dip" />

            <ImageView
                android:src="@drawable/cloud1"
                android:id="@+id/imageview1"
                android:layout_alignParentRight="true"
                android:layout_below="@id/textid"
                android:layout_width="50dp"
                android:layout_height="120dp"
                android:layout_marginLeft="15dp" />

            <ImageView
                android:src="@drawable/grey_bar"
                android:layout_alignParentRight="true"
                android:layout_below="@id/imageview1"
                android:layout_width="263dp"
                android:layout_height="150dp"
                android:layout_marginLeft="15dp" />

</RelativeLayout>

Есть еще несколько пунктов:

  • Не используйте PX, используйте dp, это для независимых от плотности пикселей (см. В чем разница между px, dp, dip и sp на Android?)
  • Не используйте встроенные цвета для конечного продукта, поместите их в res/values/colors, однако я уверен, что вы это знаете.
  • Переименуйте идентификатор, который я добавил, удалив атрибуты «android: text» и «android: src», поскольку они были добавлены, чтобы просто показать вам.
person Graham Smith    schedule 06.02.2012
comment
я попробую это. что касается использования px, на самом деле возвращаемые изображения основаны на ширине пикселя устройства, поэтому я изменяю высоту/ширину на основе этого, поэтому я использую пиксели (изображения, созданные на сервере на основе доступных пикселей устройства). в остальном вы правы, но это все вынесено для краткости - person automaton; 07.02.2012
comment
так что я попробовал это, это фактически сгруппировало все друг над другом. Я нашел решение, хотя, по-другому. - person automaton; 07.02.2012

В итоге я решил это с помощью такого макета:

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

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingRight="5dip"
        android:textColor="#ffffffff"
        android:textSize="13dip" />

    <TableLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <TableRow android:gravity="right" >

            <ImageView
                android:layout_width="50px"
                android:layout_height="120px"
                android:layout_column="1" />

            <ImageView
                android:layout_width="263px"
                android:layout_height="150px"
                android:layout_column="2"
                android:paddingRight="20dip" />
        </TableRow>
    </TableLayout>

</LinearLayout>

Кроме того, еще одна проблема заключалась в том, что я устанавливаю ширину/высоту в пикселях в коде, в зависимости от того, что мне нужно, и когда вы это делаете, вы также стираете столбец... поэтому код должен был быть примерно таким:

        abc = new TableRow.LayoutParams(myImageWidth,
                mykpiImageHeight);
        abc.column = 2;
person automaton    schedule 07.02.2012

Подтверждена ошибка в ADT, и считается, что она исправлена ​​в ADT 21. См. исправлена ​​ошибка - в конце

person Frank    schedule 17.10.2012