#java #android
Хочу сделать так, чтобы при запуске приложения появлялась заставка, и через несколько секунд заставка пропадала и появлялось главное меню. Вот как я все придумал реализовать: При запуске приложения запускаем AsyncTask, и в нем я ставлю таймер на пять секунд, после того как они истекли, переходит на главную Activity, и во время этих пяти секунд висит заставка. Как сделать так, чтобы пользователь не мог снова вернутся на заставку при нажатии кнопки BACK?
Ответы
Ответ 1
Реализация с корректной обработкой нажатия кнопки Назад : SplashActivity: public class SplashActivity extends Activity { private static int SPLASH_TIME_OUT = 2000; // 2 seconds private Handler mHandler; private Runnable mRunnable = new Runnable() { @Override public void run() { startMainActivity(); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); mHandler = new Handler(); } @Override protected void onResume() { super.onResume(); mHandler.postDelayed(mRunnable, SPLASH_TIME_OUT); } @Override public void onBackPressed() { super.onBackPressed(); removeCallbacks(); } @Override protected void onStop() { super.onStop(); removeCallbacks(); } private void removeCallbacks() { if (mHandler != null) { mHandler.removeCallbacks(mRunnable); } } private void startMainActivity() { startActivity(new Intent(this, MainActivity.class)); finish(); } } AndroidManifest.xml:Ответ 2
Чтобы не возвращаться на активити по нажатию на кнопку back, вариантов несколько: В манифесте у активити добавить флаг android:noHistory="true" Вызывать finish() у активити на которую вы больше не хотите возвращаться.Ответ 3
есть такая штука/концепция splash Activity - вот про неё: https://stackoverflow.com/a/5486970/5292979 определяем layoutи создаём Activity import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; public class Splash extends Activity { /** Duration of wait **/ private final int SPLASH_DISPLAY_LENGTH = 1000; /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.splashscreen); /* New Handler to start the Menu-Activity * and close this Splash-Screen after some seconds.*/ new Handler().postDelayed(new Runnable(){ @Override public void run() { /* Create an Intent that will start the Menu-Activity. */ Intent mainIntent = new Intent(Splash.this,YourActivity.class); Splash.this.startActivity(mainIntent); Splash.this.finish(); } }, SPLASH_DISPLAY_LENGTH); } @Override public void onBackPressed() { } } Ответ 4
Лучше для реализации заставки использовать fragmentОтвет 5
Также можно посмотреть здесь, как это делается в Android Studio пошагово: Ссылка Шаг 1: Создаем новый layout с названием splash.xmlШаг 2: Создаем Activity с названием SplashScreen public class SplashScreen extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.splash); Thread timerThread = new Thread(){ public void run(){ try{ sleep(3000); }catch(InterruptedException e){ e.printStackTrace(); }finally{ Intent intent = new Intent(SplashScreen.this,MainActivity.class); startActivity(intent); } } }; timerThread.start(); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); finish(); } } Шаг 3: Открываем AndroidManifest.xml и добавляем intent-filter P.S: Время жизни SplashScreen всегда можно настроить, изменив значение в методе sleep() на необходимое (в примере оно составляет 3 сек. == 3000 мс). Также можно изменить переход из SplashScreen не в MainActivity (как в примере), а в любую другую Activity, указав название необходимой Activity в блоке finally, new Intent(SplashScreen.this,SecondActivity.class).
Комментариев нет:
Отправить комментарий