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

标签 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>

最佳答案

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

<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),您还应该设置对于另一个也是如此。

关于android - TableLayout 中的 TextView 仅在配置更改后居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5863336/

相关文章:

java - 使 ViewPager 可通过外部布局/从外部滑动

android - Socket.IO 与服务耗尽电池戏剧性(Android)

顶部的 Android 按钮和屏幕底部的 ScrollView

html - 在另一个 div 中居中包含可变大小文本的 3 列 div

html - CSS网格中表单元素的垂直居中

java - 从自定义 BaseAdapter 调用 fragment 中的函数

c# - 如何在 Xamarin android c# 中设置 AlertDialog 框的宽度和高度?

android - 过渡 android fragment 向上滑动

android - 如何在android中的另一个imageview之上放置一个imageview

css - 如何使 Twitter-Bootstrap 3 导航栏链接居中?