【问题标题】:Android Splash Screen安卓启动画面
【发布时间】:2013-03-05 07:51:59
【问题描述】:

这是我的包资源管理器中的内容,所以让我们从顶部开始 并努力解决我认为它所在的问题..

MainActivity.java -

 package com.drg.idoser;

 import android.os.Bundle;
 import android.app.Activity;
 import android.view.Menu;

 public class MainActivity extends Activity {

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

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

现在 SplashActivity.java

package com.drg.idoser;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;

public class SplashActivity extends Activity {

 private static String TAG = SplashActivity.class.getName();
 private static long SLEEP_TIME = 5;    // Sleep for some time

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  this.requestWindowFeature(Window.FEATURE_NO_TITLE);    // Removes title bar
  this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,     WindowManager.LayoutParams.FLAG_FULLSCREEN);    // Removes notification bar

  setContentView(R.layout.splash);

  // Start timer and launch main activity
  IntentLauncher launcher = new IntentLauncher();
  launcher.start();
}

 private class IntentLauncher extends Thread {
  @Override
  /**
   * Sleep for some time and than start new activity.
   */
  public void run() {
     try {
        // Sleeping
        Thread.sleep(SLEEP_TIME*1000);
     } catch (Exception e) {
        Log.e(TAG, e.getMessage());
     }

     // Start main activity
     Intent intent = new Intent(SplashActivity.this, MainActivity.class);
     SplashActivity.this.startActivity(intent);
     SplashActivity.this.finish();
  }
}
}

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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />

</RelativeLayout>

splash.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="@drawable/splash_bg"
android:layout_height="match_parent"
android:orientation="vertical" >


</LinearLayout>

AndroidManafest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.drg.idoser"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.drg.idoser.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

</manifest>

现在我认为我的问题在于 AndroidManafest.xml 当我从我的应用程序启动我的应用程序时,我认为我没有在 AndroidManafest.xml电话它跳转到 activity_main.xml 而不是 splash.xml 我是 android 应用程序的新手,所以我似乎找不到我的问题,但我需要我的启动屏幕显示 5 秒如果有人拥有 TeamViwer 并愿意帮助我发布我的会话信息,如果它会更快的话。

【问题讨论】:

标签: java android xml android-layout splash-screen


【解决方案1】:

将您的&lt;application&gt; 标记更改为以下内容。您没有声明 SplashActivity,并将 MainActivity 设置为启动器 Activity。

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.drg.idoser.SplashActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.drg.idoser.MainActivity"
        android:label="@string/app_name" />
</application>

【讨论】:

  • 我试了一下说请等25分钟我不知道为什么
  • 非常适合我。谢谢
【解决方案2】:

实现启动屏幕的最佳方法是创建一个新的活动,每次启动应用程序时都会显示。

public class SplashScreen extends Activity {

private Handler mHandler;

private Runnable myRunnable;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Just create simple XML layout with i.e a single ImageView or a custom layout
    setContentView(R.layout.splash_screen_layout);
    mHandler = new Handler();
    myRunnable = new Runnable() {
        @Override
        public void run() {
            Intent intent = new Intent(SplashScreen.this, MainActivity.class);
            startActivity(intent);
            finish();
        }
    };

}

@Override
public void onBackPressed() {
// Remove callback on back press
    if (mHandler != null && myRunnable != null) {
        mHandler.removeCallbacks(myRunnable);
    }
    super.onBackPressed();
}

@Override
protected void onPause() {
// Remove callback on pause
    if (mHandler != null && myRunnable != null) {
        mHandler.removeCallbacks(myRunnable);
    }
    super.onPause();
}

@Override
protected void onResume() {
// Attach and start callback with delay on resume
    if (mHandler != null && myRunnable != null) {
        mHandler.postDelayed(myRunnable, ConstantValues.SPLASH_TIME_OUT);
    }
    super.onResume();
}
}

【讨论】:

    【解决方案3】:

    您可以像这样轻松访问启动画面。比如

    public class MainActivity extends Activity {
        private ImageView splashImageView;
        private boolean splashloading = false;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            splashImageView = new ImageView(this);
            splashImageView.setScaleType(ScaleType.FIT_XY);
            splashImageView.setImageResource(R.drawable.ic_launcher);
            setContentView(splashImageView);
            splashloading = true;
            Handler h = new Handler();
            h.postDelayed(new Runnable() {
                public void run() {
                    splashloading = false;
                    // set your layout file in below
                    setContentView(R.layout.activity_main);
                }
            }, 3000);
    
        }
    }
    

    它将 100% 有效。

    【讨论】:

      【解决方案4】:

      这是一个简单的!

      ~Lunox

      MainActivity.java

      import androidx.appcompat.app.AppCompatActivity;
      import android.os.Bundle;
      
      public class MainActivity extends AppCompatActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
          }
      }
      

      splashscreen.java

      import android.app.Activity;
      import android.content.Intent;
      import android.os.Bundle;
      import android.os.Handler;
      
      public class splashscreen extends Activity {
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.splashscreen);
      
              //Splash Screen duration
              int secondsDelayed = 1;
              new Handler().postDelayed(new Runnable() {
                  public void run() {
                      startActivity(new Intent(splashscreen.this, MainActivity.class));
                      finish();
                  }
              }, secondsDelayed * 3000);
          }
      }
      

      activity_main.xml

      <?xml version="1.0" encoding="utf-8"?>
      <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          tools:context=".MainActivity">
      
          <TextView
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello World!"
              app:layout_constraintBottom_toBottomOf="parent"
              app:layout_constraintLeft_toLeftOf="parent"
              app:layout_constraintRight_toRightOf="parent"
              app:layout_constraintTop_toTopOf="parent" />
      
      </androidx.constraintlayout.widget.ConstraintLayout>
      

      splashscreen.xml

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical" android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="@drawable/splashlogo"
      
          />
      

      splashlogo.png

      splashlogo.png

      GitHub

      SplashScreen

      【讨论】:

      • 完成了兄弟!感谢您的反馈!
      【解决方案5】:
      @Override
      
         protected void onCreate(Bundle savedInstanceState) {
      
                super.onCreate(savedInstanceState);
      
                setContentView(R.layout.activity_main);
      
                Thread th = new Thread(new Runnable() {            /*create a new thread */
      
                                    @Override
      
                                    public void run() { /*
      
                                                                        * The purpose of this thread is to
      
                                                                        * navigate from one class to another
      
                                                                        * after some time
      
                                                                        */
      
                                           try {
      
                                                  Thread.sleep(5000);
      
                                           } catch (InterruptedException e) {
      
                                                  /*
      
                                                   * We are creating this new thread because we don’t
      
                                                   * want our main thread to stop working for that
      
                                                   * time as our android stop working and some time
      
                                                   * application will crashes
      
                                                   */
      
                                                  e.printStackTrace();
      
                                           }
      
                                           finally {
      
                                                  Intent i = new Intent(MainActivity.this,
      
                                                                Splash_Class.class);
      
                                                  startActivity(i);
      
                                                  finish();
      
                                           }
      
                                    }
      
                             });
      
                th.start(); // start the thread
      
         }
      

      http://www.codehubb.com/android_splash_screen

      【讨论】:

      • 请修复你的标签!
      • 一些解释会很好。只是代码转储是没有用的。
      • 欢迎来到 Stack Overflow!请引用链接中最相关的部分,以防目标站点无法访问或永久离线。见How do I write a good answer
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      相关资源
      最近更新 更多