2013-10-10 63 views
0

我想在設置主要活動的最終佈局之前顯示「引導徽標」或圖像。
其實我這樣做:在主要活動的setContentView之前顯示幾秒鐘的圖像

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.authors); 
    mContext = this; 
    showAuthors(); 

其中showAuthors運行此:

private void showAuthors() 
{ 
    setContentView(R.layout.authors); 
    Thread logoTimer = new Thread() { 
     public void run() { 
      try { 
       sleep(3000); 

      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } finally { 

      } 
     } 
    }; 

    logoTimer.start(); 
    try { 
     logoTimer.join(); 
     setContentView(R.layout.activity_main); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

文件authors.xml(R.layout.authors)是一樣的activity_main的,但乾淨,只包含一對字符串與我的名字和電子郵件:

<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" 
android:background="@raw/call2" 
android:src="@raw/call2" 
android:scaleType = "centerCrop" 
tools:context=".MainActivity" > 

<TextView 
    android:id="@+id/authorsTV" 
    android:textColor="#FF6600" 
    android:textSize="16.5sp" 
    android:textStyle="bold" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_marginLeft="33dp" 
    android:text="@string/serviceStatus" /> 

</RelativeLayout> 

問題是:所有的作品,但屏幕全白作爲一個空的佈局。
我在哪裏做錯了?謝謝大家,如果考慮回覆我!

+0

http://stackoverflow.com/questions/16750059/why-my-splash-screen-dont-show-the-images – Raghunandan

+0

這與你的問題無關,但你在onCreate方法中設置作者的視圖,然後再次在showAuthors方法中。如果您決定修改顯示作者屏幕的方式,可能會在稍後創建一個難以發現的錯誤。 – Tenfour04

+0

是真的......謝謝! – Fujitina

回答

1

首先,你必須顯示一個閃屏的方式有兩種,

1.採用活性

public class SplashActivity extends Activity implements Runnable 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     ... 
     setContentView(R.layout.act_spalsh); 
     hideSplashActivity(); 
    } 
    private void hideSplashActivity() 
    { 
     new Handler().postDelayed(this, 3000); 
    } 
    @Override //from runnable 
    public void run() 
    { 
     startActivity(new Intent(this, MainActivity .class)); 
     finish(); 

    } 

2.採用對話框

public class MainActivity extends Activity implements Runnable 
{ 
    Dialog splashDialog; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     ... 
     splashDialog = new Dialog(this,android.R.style.Theme_Black_NoTitleBar_Fullscreen); 
     splashDialog.setContentView(R.layout.dlg_splash); 
     splashDialog.show(); 
     hideSplashDialog(); 
     setContentView(R.layout.act_main); 
    } 
    private void hideSplashDialog() 
    { 
     new Handler().postDelayed(this, 3000); 
    } 
    @Override //from runnable 
    public void run() 
    { 
     splashDialog.dismiss(); 
     splashDialog = null; 
    } 

我更喜歡使用對話框,除非你有一些麻煩與

1

你不應該打電話thread.join從主線程,因爲你可以得到一個ANR崩潰。

下面介紹如何通過對現有代碼進行最小限度的更改來完成此操作。 logoTimer.start()之後的一切,並把這個try塊內,睡眠後(3000):

runOnUiThread(new Runnable(){ 
    public void run(){ 
     setContentView(R.layout.activity_main); 
    } 
}); 

但是這將是清潔改寫像這樣的整體方法:

private void showAuthors() 
{ 
    setContentView(R.layout.authors); 
    new Handler().postDelayed(new Runnable(){ 
     public void run(){ 
      setContentView(R.layout.activity_main); 
     } 
    }, 3000); 
} 
相關問題