Всплеск активности с поддержкой ориентации - PullRequest
1 голос
/ 29 января 2012

Я хочу, чтобы моя всплывающая активность поддерживала как вертикальную, так и горизонтальную ориентацию.

Код для всплывающей активности следующий:

public class Splash extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);

    Thread timer = new Thread(){
        public void run() {
            try{
                sleep(5000);    

            }catch(InterruptedException e){
                e.printStackTrace();
            }finally{
                Intent ARCActivityIntent = new Intent("com.ex.rc.LISTSCREEN");
                startActivity(ARCActivityIntent);// 
                finish();
            }
        }};

    timer.start();

    }

}

Код splash.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal|center_vertical"
    android:background="@drawable/splash_bg"
    >
</LinearLayout>

Но проблема в том, что действие LISTSCREEN создается повторно, сколько раз меняется ориентация.

Помогите мне.

Ответы [ 2 ]

6 голосов
/ 29 января 2012

У меня была похожая проблема. Я исправил это. Вот решение. Создайте только один макет для заставки, но создайте разные изображения для LANDSCAPE и PORTRAIT. Поскольку у вас есть только один макет, то есть портрет, действие не будет воссоздано. Но фоновое изображение будет меняться, обеспечивая эффект изменения ориентации.

Запишите следующий код в onCreate.

setContentView(R.layout.splash);

splashImage = (ImageView) findViewById(R.id.splash_img);

int orient = getWindowManager().getDefaultDisplay().getOrientation();
if (orient == 0) {
         splashImage.setBackgroundResource(R.drawable.splash_portrait);
} else {
         splashImage.setBackgroundResource(R.drawable.splash_landscape);
}

Переопределить onConfigurationChanged Метод

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

    int orient = getWindowManager().getDefaultDisplay().getOrientation();
    if (orient == 0) {
        splashImage.setBackgroundResource(R.drawable.splash_portrait);
    } else {
        splashImage.setBackgroundResource(R.drawable.splash_landscape);
    }
}

SplashActivity в манифесте должно выглядеть следующим образом

    <activity
        android:name="SplashActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
2 голосов
/ 27 марта 2014

Это сработало для меня ...

В манифесте: изменить ориентацию на android:screenOrientation="unspecified"

Удалить все ориентации из макетов-заставок, например android:orientation="vertical"

    <activity
        android:name="com.gr8ly.gr8lysymbolshortcutkeys.Splash"
        android:label="@string/app_name"
        android:screenOrientation="unspecified"
        android:theme="@android:style/Theme.Black.NoTitleBar" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
...