TextView в TableLayout только по центру после изменения конфигурации - PullRequest
2 голосов
/ 03 мая 2011

В моем 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 Ответ

1 голос
/ 04 мая 2011

Поскольку я не смог воспроизвести вашу ошибку, я бы посоветовал вам попробовать другой макет (с тем же предполагаемым результирующим аспектом отображения), например:

<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), вы должны также установить для другого.

...