Проблема с Android Table Layout с двумя рядами и выравниванием по правому краю - PullRequest
1 голос
/ 06 февраля 2012

У меня проблема с макетом 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 всегда выравнивает метку (он не охватывает столбцы) и никогда ничего не выравнивает во втором ряду. Это Android 2.1. Кто-нибудь знает?

Ответы [ 3 ]

2 голосов
/ 06 февраля 2012

ОК. Мой ответ следующий:

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

Также есть несколько других poitners:

  • Не используйте PX, используйте dp, это для пикселей, независимых от плотности (см. В чем разница между "px", "dp", "dip" и "sp" на Android? )
  • Не используйте встроенные цвета для конечного продукта, поместите их в res/ values ​​/ colors, однако я уверен, что вы знаете это
  • Переименуйте Id, которые я добавил, вместе с удалением атрибутов "android: text" и "android: src", как они были вставлены, чтобы просто показать вам.
1 голос
/ 07 февраля 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;
0 голосов
/ 18 октября 2012

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

...