【问题标题】:Splash Screen will not display启动画面将不显示
【发布时间】:2013-02-06 05:10:39
【问题描述】:

我正在尝试使用此 java 和 xml 代码实现启动画面。我从我的主要活动中创建了一个单独的 java 类,并将 java 代码放入其中。我在布局文件中创建了一个 xml 布局,并将 xml 代码放入其中。但是,我的应用程序正常显示,没有启动画面。它从不显示,但应用程序没有任何错误。 Eclipse 也没有显示任何错误。这可能是什么原因?先感谢您。这是代码。

Java:

package com.carouseldemo.main;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;

public class Splash extends Activity {

    private final int SPLASH_DISPLAY_LENGHT = 1000;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.splash);

        /* 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,Menu.class);
                Splash.this.startActivity(mainIntent);
                Splash.this.finish();
            }
        }, SPLASH_DISPLAY_LENGHT);
    }
}

XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <ImageView android:id="@+id/splashscreen" android:layout_width="wrap_content"
                android:layout_height="fill_parent" android:src="@drawable/cat"
                android:layout_gravity="center"/>
        <TextView android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:text="Hello World, splash"/>
</LinearLayout>

清单:

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

    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" android:screenOrientation="portrait"/>
    <application android:icon="@drawable/buttonone" android:label="@string/app_name">

        <activity android:name=".MainActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest> 

【问题讨论】:

  • 闪屏显示时间是1秒,能不能保持4-5秒左右再检查一下。
  • 我将时间增加到 10 秒。它会显示大约一秒钟的黑屏并打开应用程序。
  • Manifest File 怎么样??您是否已将启动画面注册为 Launcher Activity..您能在此处发布您的 Manifest 文件吗?
  • 您的 java 代码没问题,不需要更改。这只是个小问题。
  • 我已经用清单文件更新了我的问题。

标签: java android eclipse screen splash-screen


【解决方案1】:

MainActivity 是清单文件中的启动器活动。所以,splash 没有显示出来。

将启动器活动 MainActivity 更改为 Splash 并为 MainActivity 编写另一个。

<application android:icon="@drawable/buttonone" android:label="@string/app_name">

        <activity android:name=".Splash" android:label="@string/app_name" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MainActivity" />
    </application>

【讨论】:

  • 我想知道如何在活动中同时将 MainActivity 作为 android 名称和 Splash。感谢您展示这一点。每个人都是对的,但这就是解决问题的方法。
【解决方案2】:

用这个替换处理程序部分:

Thread splashThread = new Thread() {
    public void run() {
                try {
                Thread.sleep(SPLASH_DISPLAY_LENGHT);
                } catch (Exception e) {
                } finally {
                Intent i = new Intent(Splash.this,Menu.class);
                startActivity(i);
                finish();
                }
            }
        };
    splashThread.start();

【讨论】:

  • 启动画面仍然没有出现。感谢您的回复,您还有其他想法吗?
  • Menu.class 到底是什么?
  • 我正在使用从我在这里找到的类似问题中找到的代码。在发布问题之前,我试图让它发挥作用。我只是一个初学者,这似乎是必要的。
  • 任何服务,你是什么意思?能具体一点吗?
  • 检查清单文件:-filter>
【解决方案3】:
private static final int STOPSPLASH = 0;
private static final long SPLASHTIME =3000;



public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
            setContentView(R.layout.splash);
            context = getApplicationContext();
            if(savedInstanceState == null){
                Message msg = new Message();
                msg.what = STOPSPLASH;
                spHandler.sendMessageDelayed(msg, SPLASHTIME);
            }
        }   


    private Handler spHandler = new Handler() {
        @Override
        public void handleMessage(Message msg)
        {
            switch (msg.what)
            {
            case STOPSPLASH:
                gotoHomeScreen();
                break;
            default:
                break;
            }
            super.handleMessage(msg);
        }
    };

    public void gotoHomeScreen(){

        Intent i = new Intent();
            i.setClass(Splash.this,Home.class);
            startActivity(i);
            finish();
            spHandler = null;

    }

试试这个。

在您的清单中

<activity android:name="Splash" android:configChanges="keyboardHidden" android:theme="@android:style/Theme.NoTitleBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

【讨论】:

    【解决方案4】:

    尝试如下:

     public class Splash extends Activity 
      {
       private final int SPLASH_DISPLAY_LENGHT = 1000;  
           @Override
             public void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                   setContentView(R.layout.splash);
                   new Thread(){
            public void run()
            {
                try
                {
                    sleep(SPLASH_DISPLAY_LENGHT);
                   Intent mainIntent = new Intent(Splash.this,Menu.class);
                             Splash.this.startActivity(mainIntent);
                            Splash.this.finish();
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            };          
        }.start();
    }
    

    已编辑:

      <activity android:name=".Splash" android:label="@string/app_name" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    

    【讨论】:

    • 您的代码没有出现错误,但是启动页面也没有出现。
    • 我可以看到您已在清单中将定义的MainActivity 设置为启动器。此外,您应该将Splash 活动定义为启动器。请更改它。并检查我的答案。
    【解决方案5】:

    使用CountDownTimer实现的另一种方式

    public class MyCounter extends CountDownTimer {
    
            public MyCounter(long millisInFuture, long countDownInterval) {
                super(millisInFuture, countDownInterval);
            }
    
            @Override
            public void onFinish() {
    
                startActivity(new Intent(SplashScreen.this,
                        TabSample.class));
                finish();
    
                MCObject.cancel();
    
    
    
            }
    
            @Override
            public void onTick(long millisUntilFinished) {
    
            }
    
        }
    

    OnCreate

         MyCounter MCObject;
        MCObject = new MyCounter(3000, 100);
        MCObject.start();
    

    【讨论】:

      【解决方案6】:

      使用此代码,它可能会对您有所帮助。

      public class SplashScreenActivity extends Activity {
      
          protected int _splashTime = 2000;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_splash_screen);
      
              Thread splashTread = new Thread() {
                  @Override
                  public void run() {
                      try {
                          sleep(_splashTime);
                      }
                  } catch (InterruptedException e) {
                      // do nothing
                  } finally {
                      startActivity(new Intent(SplashScreenActivity.this,
                              MainActivity.class));
                      SplashScreenActivity.this.finish();
                  }
              }
          };
          splashTread.start();
      }
      

      希望对你有所帮助。

      【讨论】:

        【解决方案7】:

        替换你的处理程序

        new Thread(new Runnable() {
            public void run() {
                try {
                    Thread.sleep(SPLASH_TIME);
                    startActivity(intent);
                    finish();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
        

        【讨论】:

        • 除非我应该用我自己的代码替换意图?
        猜你喜欢
        • 2018-12-07
        • 2014-01-22
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 2014-10-12
        • 2014-05-05
        • 2016-04-19
        相关资源
        最近更新 更多