Проблема макета в Android - PullRequest
       25

Проблема макета в Android

1 голос
/ 23 января 2011

Я довольно новичок в Android и у меня возникли некоторые проблемы с макетом. Ниже приведено приблизительное представление о том, как должен выглядеть макет. (Я бы хотел, чтобы список сначала находился ниже экрана, чтобы пользователь мог прокрутить его вниз, чтобы увидеть его.) Однако мой код в том виде, в каком он есть в настоящее время, заставляет все виды слева занимать четверть экрана вместо половины , как изображено, хотя у меня все ширины установлены для fill_parent.

Кроме того, этот макет, кажется, портит систему координат в моем пользовательском представлении. Обычно это не будет большой проблемой, но в этом случае я использую этот вид для рисования картинки, и картинка оказывается не в том месте. Кто-нибудь знает, как решить эти проблемы? alt text

Вот мой код:

<?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="fill_parent"
android:orientation="vertical">
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical">
<TableRow>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent" android:orientation="vertical"
android:layout_width="fill_parent">
<TableRow>
 <TextView android:text="Resultant Force" android:id="@+id/resForceTitle"
  android:textSize="25dip" android:layout_width="fill_parent"
  android:layout_height="fill_parent" android:padding="3dip"
  android:gravity="center" android:layout_span="2" />
</TableRow>
<TableRow>
 <TextView android:id="@+id/magText" android:text="Magnitude (N) ="
  android:textSize="15dip" android:layout_width="fill_parent"
  android:layout_height="fill_parent" android:padding="3dip"
  android:gravity="center_vertical" android:layout_span="2" />
</TableRow>
<TableRow>
 <EditText android:id="@+id/magnitude" android:inputType="numberDecimal"
  android:layout_width="fill_parent" android:padding="3dip"
  android:layout_height="fill_parent" android:layout_span="2" />
</TableRow>
<TableRow>
 <TextView android:id="@+id/dirText" android:text="Angle (deg) ="
  android:layout_width="fill_parent" android:layout_height="fill_parent"
  android:textSize="15dip" android:gravity="center_vertical"
  android:layout_span="2" />
</TableRow>
<TableRow>
 <EditText android:id="@+id/direction" android:inputType="numberDecimal"
  android:layout_height="fill_parent" android:padding="3dip"
  android:layout_width="fill_parent" android:layout_span="2" />
</TableRow>
<TableRow>
 <Button android:id="@+id/pushButton" android:text="Add Force"
  android:layout_height="fill_parent" android:padding="3dip"
  android:layout_width="fill_parent" />
 <Button android:id="@+id/clearButton" android:text="Clear"
  android:layout_height="fill_parent" android:padding="3dip"
  android:layout_width="fill_parent" />
</TableRow>
</TableLayout>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<android.physicsengine.AxisDrawing
 android:id="@+id/image" android:layout_width="fill_parent"
 android:layout_height="fill_parent" />
</FrameLayout>
</TableRow>
</TableLayout>
<ListView android:id="@android:id/list" android:layout_height="wrap_content"
android:padding="3dip" android:layout_width="fill_parent"
android:clickable="false" />
<TextView android:id="@android:id/empty" android:text="Add Forces to List Components"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:textSize="15dip" android:gravity="center_vertical" />
</LinearLayout>

Ответы [ 2 ]

4 голосов
/ 23 января 2011

Судя по вашему XML, похоже, вы неправильно понимаете, что означает fill_parent.Это значит «быть таким же большим, как мой родитель».Кроме того, почему вы используете два вложенных TableLayouts?Чтобы разделить экран равномерно на два, вы должны использовать горизонтальный LinearLayout и дать каждому дочернему элементу (TableLayout и ваш пользовательский вид) ширину 0dip и layout_weight 1:

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TableLayout
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_height="wrap_content">
            ...
    </TableLayout>
    <android.physicsengine.AxisDrawing
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_height="wrap_content" />
</LinearLayout>
0 голосов
/ 23 января 2011

Это потому, что вы ввели android: layout_span = "2" в ваших EditTexts. Если вы удалите их, все будет вести себя более нормально.

Тогда вы можете управлять левой стороной, установив ширину EditText, например, 200dp ... Вы также можете использовать правое поле EditText для управления левым столбцом.

Что касается координат в пользовательском холсте, они начинаются с 0,0 в верхнем правом углу.

...