Проблема с вращением Android с onConfigurationChanged - PullRequest
3 голосов
/ 15 июля 2011

Я дал android:configChanges="orientation|keyboard" своей активности в манифесте, и когда я поворачиваю свое устройство, всегда вызывается onConfigurationChanged. С этим проблем нет.

Я хочу, чтобы при повороте устройства размер шрифта виджета изменялся.

<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="@dimen/my_font_size" />

Как и выше, атрибут textSize ссылается на значение в ресурсе и xml-файл, определяющий my_font_size, находится в папках values-land, values-port.

Ok. Я готов. Постройте его, запустите и поверните устройство, и никаких изменений нет. requestLayout () в onConfigurationChanged () не работает. Любой совет об этом?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 15 июля 2011

Не следует использовать атрибут configChanges, если он не является абсолютно необходимым (этот атрибут введен для включения некоторых чувствительных к производительности сценариев).Пожалуйста, внимательно прочитайте Обработка во время выполнения [Изменения] Изменения .

Этот метод [с использованием configChanges] следует рассматривать как последнее средство и не рекомендуется для большинства приложений.


Предупредив вас, вот объяснение, почему вы не видите изменений при вращении устройства.

  • Если вы не используете configChanges="orientation" в своей деятельностиВаша деятельность разрушается и воссоздается с ресурсами для новой ориентации.В этом случае ваш код в onCreate() автоматически выберет значения из правильных ресурсов (*-land или *-port).

  • Если вы используете configChanges="orientation", вы в основном говорите Androidне применять изменения автоматически, и что вы будете делать это самостоятельно в onConfigurationChanged().

Если вы действительно хотите сохранить configChanges, вот что вы можете сделать, чтобы решить проблемус размером шрифта:

@Override
public void onConfigurationChanged(Configuration newConfig)
{       
     super.onConfigurationChanged(newConfig);

     int fontSize = getResources().get(R.id.font_size);     
     mTextView.setTextSize(fontSize);
}

Но, опять же, вам действительно не следует использовать configChanges в большинстве случаев.

0 голосов
/ 15 июля 2011

На самом деле вы можете указать два разных файла макета для двух типов макета и настроить каждый из них на то, что вам нужно.

Некоторая документация: Ресурсы приложения

Если всеВы хотите сделать косметические изменения дизайна в зависимости от ориентации, что, вероятно, является предпочтительным методом

0 голосов
/ 15 июля 2011

Если вы укажете android:configChanges="orientation|keyboard" в своей активности, то Android не будет обрабатывать эти изменения для вас (это означает, что он не будет воссоздавать вашу активность, используя соответствующие файлы ресурсов). Вот почему вы не получаете изменения в размере шрифта. Если вы хотите, чтобы Android справился с этим, не добавляйте configChanges в свою активность в манифесте.

...