Android: как использовать изменение ориентации экрана для переключения между действиями - PullRequest
0 голосов
/ 12 ноября 2010

Я новичок в разработке Android. Я пытаюсь использовать изменение ориентации для переключения между двумя действиями. Моя идея состоит в том, чтобы использовать три действия: одно действие TabActivity и обычное действие. Вот некоторый псевдокод:

public class Main extends Activity{
// this is the entry point into my app
    @Override
    public void onCreate(...){
        if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
            // Start Activity1
    } else { //Start Activity2}
}

Для операций Activity1 и Activity2 их функции onPause () будут переопределены с намерением снова запустить Основное действие.

onPause(){
    Intent intent = new Intent(this.ActivityX, Main.class);
    startActivity(intent);
}

\ / \ / \ / \ / EDIT \ / \ / \ / \ /

Хорошо, я использую другой подход. Поскольку мне нужен TabActivity, потому что я хочу иметь возможность запускать различные действия в моих вкладках (я думаю, что в этом случае мне нужно использовать TabActivity).

Я отредактировал Manifest.xml и добавил android.configChanges = "ориентация" для TabActivity и второго занятия. Затем я переопределил функции onConfigurationChanged (). При таком подходе я могу переключаться с пейзажа (это «нормальная» активность ») на портрет (TabActivity). Обратный путь не работает, и я пока не знаю, почему. У меня точно такие же функции onConfigurationChanged (Copy & Pasted) и я изменил только основные части.

Переопределение onConfigurationChanged действий, запущенных на вкладках, также не оказывает никакого влияния.

Ответы [ 2 ]

2 голосов
/ 12 ноября 2010

Вам не нужно писать никакой код - Android уже обрабатывает это автоматически .Просто создайте две разные папки ресурсов макета:

/res/layout-land  // layout resources for landscape
/res/layout-port  // portrait layout

Поместите в эти папки xyz.xml файлы описания ресурсов с одинаковыми именами и различным содержанием.Один использует действия для портрета, другой - для ландшафта.

Обратите внимание, что вы можете использовать ту же технику (квалификаторы -port & -land) для рисованных объектов (растровые изображения) или любых других ресурсов (текст).*

Примечание: это не поддерживается в Android 1.5.Если вы хотите поддержать эту версию, вы должны дополнительно добавить папку /res/layout.

0 голосов
/ 07 июня 2011

Если вы по-прежнему хотите использовать преимущества TabActivity при использовании вкладок в портретном режиме, но при отсутствии вкладок в альбомном режиме, вы можете использовать следующий (некрасивый, но все еще работающий) обходной путь.Создайте / res / layout-land папку и поместите туда соответствующий файл макета (он должен иметь то же имя, что и файл в папке макета, который вы используете для портретной ориентации).Однако этот файл должен содержать блоки, необходимые для работы TabActivity.Это нормально, добавьте эти блоки и установите их видимость «ушел», как в следующем фрагменте:

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="5dp">
    <TabWidget
        android:id="@android:id/tabs"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:visibility="gone" />
    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="5dp"
        android:visibility="gone" />
    <!-- Feel free to add your REAL layout for the landscape -->
</LinearLayout>
</TabHost>

Конечно, убедитесь, что вы правильно обрабатываете управление контентом в своем классе активности, в зависимости оториентации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...