Обработка изменений ориентации Android

У меня есть таблица, содержащая количество изображений в строке. Количество изображений в строке определяется на лету в зависимости от ширины изображения и ширины экрана. Когда я использую телефон в обычном режиме, изображения на экране телефона разнесены. При изменении ориентации телефона все изображения появляются в одной строке. Должен ли я явно обрабатывать изменения ориентации для этого случая?

// get the number of images per column based on the screen
// resolution
Display display = getWindowManager().getDefaultDisplay();
int screenWidth = display.getWidth();

Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.emo_im_happy);

numberOfImagesPerRow = screenWidth / (drawable.getIntrinsicWidth() + 10);

int numberOfRows = (int) Math.ceil(numberOfEmotions
                    / numberOfImagesPerRow);

person ssk    schedule 24.11.2011    source источник


Ответы (3)


Это зависит от того, когда этот код запускается, но обычно вам не нужно делать ничего особенного.

Когда Android обнаружит изменение ориентации, система заново создаст вашу активность, и у нее будет возможность пройти через onCreate, перекомпоновать и перерендерить все в соответствии с новой конфигурацией.

Использование Android android:configChanges следует использовать с осторожностью, и это не будет первым вариантом, о котором вы думаете, поскольку система будет лучше выбирать подходящие ресурсы для вас после изменения конфигурации (и вам придется обрабатывать этот путь кода для других форм). изменения конфигурации в любом случае).

См.: http://developer.android.com/guide/topics/resources/runtime-changes.html

person Ben Komalo    schedule 24.11.2011

да. Один из способов — поместить android:configChanges="orientation|keyboardHidden" на <activity> в файле AndroidManifest.xml, а затем переопределить onConfigurationChanged для обнаружения изменения ориентации.

person Randy Sugianto 'Yuku'    schedule 24.11.2011

Если вы хотите сохранить количество изображений, отображаемых в одной строке, вы можете использовать GridView. Таким образом, вы можете контролировать количество столбцов в строке.

<GridView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:isScrollContainer="true" 
        android:numColumns="3"
        android:verticalSpacing="10dp" 
        android:horizontalSpacing="10dp"
        />
person Drejc    schedule 24.11.2011