TableLayout中的TextView仅在配置更改后居中

时间:2011-05-02 22:53:27

标签: android android-layout centering

在我的main.xml中,我有一个包含2列和2行的表;一个用于纬度和经度经度及其相关价值。我希望它们在列中居中,从我的读数来看,最好的方法是使用layout_weight =“1”和gravity =“center”。这确实在大多数时间工作,但由于我在代码的其他地方进行了更改,现在gps_layout中的所有项都没有居中,除非配置已更改,在此我通过旋转手机改变方向的情况。

我知道旋转会导致应用程序经历其生命周期(除了称之为重生之外,还有一个简短的说法吗?)但我无法理解第一次运行后应用程序的不同之处,除了它保存状态......这似乎对定心没什么影响。谢谢!对不起,如果我没有正确地格式化这个问题,我已经拖了一段时间,但这是我的第一个问题。

<TableLayout
    android:id="@+id/gps_layout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:visibility="invisible"
    >
    <TableRow>
        <TextView
        android:layout_column="1"
        android:id="@+id/lat_text"
        android:text="latitude: "
        android:layout_weight="1"
        android:gravity="center"                
        />
        <TextView    
        android:id="@+id/lon_text"
        android:text="longitude: "
        android:layout_weight="1"
        android:gravity="center"
        />
    </TableRow>
    <TableRow>
    ...etc...
    </TableRow>
</TableLayout>

1 个答案:

答案 0 :(得分:1)

由于我无法重现您的错误,我建议您尝试不同的布局(使用相同的假定结果显示方面),例如:

<LinearLayout android:id="@+id/gps_layout" android:orientation="horizontal"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:layout_alignParentTop="true" android:layout_alignBottom="@id/acquire"
    android:visibility="invisible">
    <LinearLayout android:orientation="vertical" android:layout_weight="1"
        android:layout_height="wrap_content">
        <TextView android:id="@+id/lat_text"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:text="latitude: " 
            android:gravity="center" />
        <TextView android:id="@+id/lat_data"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:text="(lat goes here)" 
            android:gravity="center" />
    </LinearLayout>
    <LinearLayout android:orientation="vertical" android:layout_weight="1"
        android:layout_height="wrap_content">
        <TextView android:id="@+id/lon_text"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:text="longitude: " android:gravity="center" />
        <TextView android:id="@+id/lon_data"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:text="(lon goes here)" 
            android:gravity="center" />
    </LinearLayout>
</LinearLayout>

希望它能解决你的cy 7.0.1上的问题。

<强>更新
一些关于您的代码的建议:

MyLocationListener中,您不应每次都设置两个布局的可见性,这样会更有效:

@Override
public void onLocationChanged(Location loc)
{
    if (acquire_view.getVisibility() == View.VISIBLE)
    {
        acquire_view.setVisibility(View.INVISIBLE);
        gps_view.setVisibility(View.VISIBLE);
    }
}

另外,在onProviderEnabled方法中,以及设置一个布局(acquire_view / gps_view)的可见性的任何地方,您也应该为另一个布局设置。