如何在 Android 上制作全屏 Activity

How to make a FullScreen Activity on Android

好的,所以我正在尝试复制 Roman Nurik 开源的 Muzei Live Wallpaper 应用程序的外观和感觉。

(在此处查看他的 GitHub 存储库 - https://github.com/romannurik/muzei/

当应用程序启动时,有一个微妙的 svg 路径跟踪动画以及在后台运行的 Ken Burns 效果。

您可以注意到 activity 渗入状态栏和导航栏。

我已经能够实现背景动画,但无法弄清楚如何制作 activity 全屏,如下面的第二个 GIF 所示

我需要帮助才能使这个 activity 全屏/渗入状态栏和导航栏。

这是我能够实现的目标

这是我想要实现的

这是我的代码

MainActivity.Java

package devexchanges.info.kenburnview;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.Toast;

import com.flaviofaria.kenburnsview.KenBurnsView;
import com.flaviofaria.kenburnsview.RandomTransitionGenerator;
import com.flaviofaria.kenburnsview.Transition;


public class MainActivity extends AppCompatActivity {

    private KenBurnsView kenBurnsView;
    private boolean isPlay = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        kenBurnsView = (KenBurnsView) findViewById(R.id.image);


        AccelerateDecelerateInterpolator ACCELERATE_DECELERATE = new AccelerateDecelerateInterpolator();
        RandomTransitionGenerator generator = new RandomTransitionGenerator(11000, ACCELERATE_DECELERATE);
        kenBurnsView.setTransitionGenerator(generator); //set new transition on kenburns view

        kenBurnsView.setTransitionListener(onTransittionListener());

    }

    private KenBurnsView.TransitionListener onTransittionListener() {
        return new KenBurnsView.TransitionListener() {

            @Override
            public void onTransitionStart(Transition transition) {
                //Toast.makeText(MainActivity.this, "start", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onTransitionEnd(Transition transition) {
                //Toast.makeText(MainActivity.this, "end", Toast.LENGTH_SHORT).show();
            }
        };
    }
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.flaviofaria.kenburnsview.KenBurnsView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/saigon"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button android:background="@drawable/circle_button"
        android:layout_height="@dimen/intro_activate_button_size"
        android:layout_width="@dimen/intro_activate_button_size"
        android:text="ACTIVATE"
        android:textAllCaps="true"
        android:fontFamily="sans-serif-condensed"
        android:textStyle="bold"
        android:textSize="18dp"
        android:textColor="#333"
        android:id="@+id/activate_muzei_button"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="103dp"
        android:elevation="2dp" />

要制作 activity 全屏,请将其放入您的清单中:

<activity android:name=".ActivityName"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>

来源: Fullscreen Activity in Android?

只需将此添加到您的 onCreate() 方法中:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);

只需将此代码添加到您的 activity onCreate()

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

事实证明,这个问题有一个简单的解决方案。我只需要让状态栏和导航栏透明。

Post API 21 我们可以这样编程 -

getWindow().setStatusBarColor(Color.TRANSPARENT);

为了让它在较低的 android 版本上工作,我只需要在 /res/values-v21/styles.xml

中通过 xml 添加透明度
<item name="android:statusBarColor">@android:color/transparent</item>

这是最终效果

只需将此添加到您的 style.xml:

<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>

如果您使用的是 AppCompat activity

,请使用 @style/Theme.AppCompat.Light.NoActionBar
 <activity android:name=".view.activity.SplashActivity"
                  android:theme="@style/Theme.AppCompat.Light.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

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

您可以通过编程方式完成:

public class ActivityName extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // remove title
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);
    }
}

阅读此内容:Fullscreen Activity in Android?

Kotlin:以编程方式为 API 21:将其放入 onCreate()

@TargetApi(21)
 window.statusBarColor = Color.TRANSPARENT

2021 年,所有代码要么被弃用,要么不起作用。例如:

View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    // Set the content to appear under the system bars so that the
                    // content doesn't resize when the system bars hide and show.
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    // Hide the nav bar and status bar
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN);

每一行都已弃用。一些其他一些需要 API 级 R。所以使用样式。

搜索了一些时间 google 我找到了

<style name="FullScreenTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/design_default_color_primary</item>
    <item name="colorPrimaryDark">@color/design_default_color_primary_dark</item>
    <item name="colorAccent">@color/teal_200</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowBackground">@color/white</item>
</style>

现在在 Manifest 文件中使用此样式

 <activity
        android:name=".FullScreenActivigy"
        android:theme="@style/FullScreenTheme"/>

我在我的生产应用程序中使用这个代码块,它从 API 21 到 30 开始。工作正常。甚至用户也可以与他们的短信或通知进行交互。当他们回到我的应用程序时,它又变成了全屏。

如果您使用的是 themes.xml 中的最新版本 android,请将其更改为

parent="Theme.MaterialComponents.DayNight.DarkActionBar"

parent="Theme.MaterialComponents.DayNight.NoActionBar"