如何在 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"
好的,所以我正在尝试复制 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"