不通过设置 activity 在 return 上显示启动画面
Do not show splash screen on return from settings activity
我有一个应用程序将 SplashScreen
加载为全屏 Dialog
,在加载 MainActivity
时关闭。然而,这里的问题是每当我打开 SettingsActivity
并通过以下方式返回 MainActivity
时:
- 在 Android 后退按钮按下时,
SplashScreen
将不会显示。所以这里没问题!
- 按下
ActionBar
上的向上导航,再次显示 SplashScreen
。这就是问题所在,我不想再次显示 SplashScreen
。
这是我的 MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setPreferencesFromSettings();
if (splashScreenDisplayed) {showSplash(); splashScreenDisplayed = false; }
//...DO SOMETHING ELSE...//
}
public void showSplash() {
final Dialog dialog = new Dialog(MainActivity.this, android.R.style.Theme_Light_NoTitleBar);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.activity_splash_screen);
dialog.setCancelable(true);
dialog.show();
final Handler handler = new Handler();
final Runnable runnable = new Runnable() {
@Override
public void run() {
dialog.dismiss();
}
}; handler.postDelayed(runnable, 3500);
}
@Override
public void onRestart() {
super.onRestart();
splashScreenDisplayed = false;
setPreferencesFromSettings();
}
和 AndroidManifest.xml
:
<application
android:name=".AnalyticsApplication"
android:fullBackupContent="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".SettingsActivity"
android:label="Settings"
android:parentActivityName=".MainActivity"
android:theme="@style/AppTheme">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
</application>
我尝试了其他一些帖子,但它们对我不起作用。我知道我在某处遗漏了一行代码或其他东西,我花了几个小时一遍又一遍地查看代码,但我什么也没找到。
在此先感谢您的帮助!
我最终使用 SharedPrefernces
为 SplashNotDisplayed
存储了一个密钥,并在每次加载 MainActivity
时读取它。
我在 myapplication.java
中将密钥设置为 True
因为每个应用程序实例只加载一次,一旦显示启动画面,我将密钥设置为 False
和下一个加载 MainActivity
时,SplashNotDisplayed 键将为 false,不会再次显示。
在MyApplication.java
SharedPreferences prefs = getSharedPreferences("prefs", MODE_PRIVATE);
SharedPreferences.Editor shPrefEditor = prefs.edit();
shPrefEditor.putBoolean("splashNotDisplayed", true);
shPrefEditor.apply();
在 MainActivity.java
中我更改了此
的实现
if (splashScreenDisplayed) {showSplash(); splashScreenDisplayed = false; }
对此:
boolean splashNotDisplayed = prefs.getBoolean("splashNotDisplayed", true);
if (splashNotDisplayed) {
showSplash();
shPrefEditor.putBoolean("splashNotDisplayed", false);
shPrefEditor.apply();
}
我有一个应用程序将 SplashScreen
加载为全屏 Dialog
,在加载 MainActivity
时关闭。然而,这里的问题是每当我打开 SettingsActivity
并通过以下方式返回 MainActivity
时:
- 在 Android 后退按钮按下时,
SplashScreen
将不会显示。所以这里没问题! - 按下
ActionBar
上的向上导航,再次显示SplashScreen
。这就是问题所在,我不想再次显示SplashScreen
。
这是我的 MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setPreferencesFromSettings();
if (splashScreenDisplayed) {showSplash(); splashScreenDisplayed = false; }
//...DO SOMETHING ELSE...//
}
public void showSplash() {
final Dialog dialog = new Dialog(MainActivity.this, android.R.style.Theme_Light_NoTitleBar);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.activity_splash_screen);
dialog.setCancelable(true);
dialog.show();
final Handler handler = new Handler();
final Runnable runnable = new Runnable() {
@Override
public void run() {
dialog.dismiss();
}
}; handler.postDelayed(runnable, 3500);
}
@Override
public void onRestart() {
super.onRestart();
splashScreenDisplayed = false;
setPreferencesFromSettings();
}
和 AndroidManifest.xml
:
<application
android:name=".AnalyticsApplication"
android:fullBackupContent="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".SettingsActivity"
android:label="Settings"
android:parentActivityName=".MainActivity"
android:theme="@style/AppTheme">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
</application>
我尝试了其他一些帖子,但它们对我不起作用。我知道我在某处遗漏了一行代码或其他东西,我花了几个小时一遍又一遍地查看代码,但我什么也没找到。
在此先感谢您的帮助!
我最终使用 SharedPrefernces
为 SplashNotDisplayed
存储了一个密钥,并在每次加载 MainActivity
时读取它。
我在 myapplication.java
中将密钥设置为 True
因为每个应用程序实例只加载一次,一旦显示启动画面,我将密钥设置为 False
和下一个加载 MainActivity
时,SplashNotDisplayed 键将为 false,不会再次显示。
在MyApplication.java
SharedPreferences prefs = getSharedPreferences("prefs", MODE_PRIVATE);
SharedPreferences.Editor shPrefEditor = prefs.edit();
shPrefEditor.putBoolean("splashNotDisplayed", true);
shPrefEditor.apply();
在 MainActivity.java
中我更改了此
if (splashScreenDisplayed) {showSplash(); splashScreenDisplayed = false; }
对此:
boolean splashNotDisplayed = prefs.getBoolean("splashNotDisplayed", true);
if (splashNotDisplayed) {
showSplash();
shPrefEditor.putBoolean("splashNotDisplayed", false);
shPrefEditor.apply();
}