2011-01-23 133 views
1

我对android相当陌生,并且在布局上遇到一些问题。下面是我想让布局看起来像的一个近似值。 (我希望列表首先在屏幕下方显示,以便用户可以向下滚动以查看它。)但是,我现在的代码使得左侧的所有视图只占用屏幕的四分之一而不是一半,如图所示,即使我已将所有宽度设置为fill_parent。Android中的布局问题

此外,此布局似乎弄乱了我的自定义视图上的坐标系统。通常情况下,这不是什么大问题,但在这种情况下,我正在使用该视图来绘制图片,并且图片最终出现在错误的地方。有谁知道如何解决这些问题? 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> 

回答

4

从你的XML的外观看起来你误会什么FILL_PARENT手段。它意味着“和我的父母一样大。”另外,为什么你使用两个嵌套的TableLayouts?为了把屏幕均匀两个你应该使用水平的LinearLayout,并给每个孩子(的TableLayout和您的自定义视图)0dip的宽度和1 layout_weight:

<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

我还没有遇到过,一个LinearLayout与权重不是比TableLayouts更好的选择。 – schwiz 2011-01-23 02:50:17

0

那是因为你已经输入的android:您的EditText中的layout_span =“2”。如果你更正常地删除这些行为。

然后,您可以通过将EditText的宽度设置为200dp来控制左侧,例如... 您还可以使用EditText的右侧边距来控制左侧列。

至于自定义视图画布中的坐标,它们从右上角的0,0开始。