使用主题的风景和肖像的启动屏幕图像

时间:2017-03-27 09:36:17

标签: android android-layout splash-screen android-theme

我有两个全屏启动图像,一个用于横向,另一个用于纵向模式。我想在应用启动时根据设备的方向将这些图像实现为启动。

例如,如果应用程序从横向模式开始,则横向图像应显示为背景图像,如果应用程序从纵向模式开始,则纵向图像应显示为背景图像 我引用了以下Example

这是我设置主题的方式:

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@drawable/splash_screen_1</item>
        <item name="windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>

我为 AndroidManifest.xml

设置此主题用于启动活动
    <activity
            android:name=".activities.SplashActivity"
            android:allowBackup="true"
            android:label="@string/app_name"
            android:theme="@style/SplashTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

两个显示陆地和港口图像我在splash_screen_1.jpgdrawable-land-hdpi个文件夹中放置了两个具有相同名称drawable-port-hdpi图像的图像

活动:

public class SplashActivity extends AppCompactActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        startApp();
    }

    private void startApp() {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                    HomeActivity.startHomeActivity(SplashActivity.this);
                finish();
            }
        }, 2000);
    }
}

现在的问题是,当应用程序从纵向模式启动时,它可以完美地工作,但是当我们从横向模式开始时,它的启动应用程序使用纵向图像延伸几毫秒,而不是将景观图像设置为小故障

我尝试了以下解决方案 Link 1 Link 2

但是这个解决方案不合适,因为它在开始时显示空白屏幕几秒钟来加载图像,并且从布局加载图像需要更多时间

任何替代或适当的解决方案都会有所帮助

2 个答案:

答案 0 :(得分:-1)

这不是你问题的答案但是......

Spash屏幕要等到活动就绪,不要让用户等待更多

那么尝试使用不同的方式制作Splash屏幕呢,它内置了

而不是白色或黑色屏幕

转到你的清单

像这样改变你的app风格

<activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/splashScreenTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

其中splashScreenTheme是

<style name="splashScreenTheme" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/splash_screen</item>
    </style>

当然你可以改变父母  并制作新的drawable“Splashscreen” 这是我的

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
    <!-- The background color, preferably the same as your normal theme -->
    <item android:drawable="@android:color/holo_blue_light"/>
    <!-- Your product logo - 144dp color version of your app icon -->
    <item>
        <bitmap
            android:src="@drawable/splash_logo"
            android:gravity="center"/>
    </item>
</layer-list>

现在您的应用样式已更改 您可以在主Activity Oncreate中重置它

@Override
    protected void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.AppTheme222);
}

答案 1 :(得分:-2)

如果您必须使用主题方法,请将新的 values-land /文件夹中的单独的 styles.xml 文件创建到 res 文件夹中。 .. values-land folder