2013-06-04 16 views
11

Chcę wiedzieć, jak osiągnąć ten efekt.Android - Wyłącz puste okno startowe aplikacji

Moja aplikacja (domyślnie wszystko), po kliknięciu ikony launchera, od razu wyświetla jakieś puste puste okno, w którym nic się nie dzieje, a następnie ładuje do niego układ.

Aplikacje "cięższe", takie jak YouTube, Dysk, Dropbox itp. Po uruchomieniu, wydają się czekać po uruchomieniu, nie pokazując tego obojętnego okna i wczytując go do gotowego układu.

Każdy pomysł, jak to zrobić lub gdzie powinienem zaglądać?

Dzięki

// EDIT: to nie ma nic wspólnego z czymś w rodzaju bazy danych załadunku, gdzie powinien wyświetlać Progressbar, imho to ma do czynienia z rzeczami przed występuje aktywność.

Odpowiedz

10
<style name="Theme.MyTheme" parent="android:style/Theme" > 
    .... 
    <item name="android:windowDisablePreview">true</item> 
    .... 
</style> 

jednak używać ostrożnie

0

Możesz wywołać metodę setContentView w dowolnym miejscu w swojej aktywności. Przed wywołaniem tej metody wyświetli się pusty ekran. Jeśli potrzebujesz ekranu powitalnego, możesz wywołać metodę setContentView w metodzie onCreate, aby wyświetlić widok ekranu powitalnego. Następnie, gdy będziesz gotowy do wyświetlenia "głównego" widoku, możesz go wyświetlić, korzystając z LayoutInflater. Sugeruję również użycie ProgressDialog, aby pokazać użytkownikowi, że informacje są ładowane.

+0

Problem polega na tym, że moja aplikacja ma dużo zasobów statycznych itp., Więc domyślam się, że są one ładowane przed rozpoczęciem działania, dlatego właśnie to puste okno. Następnie w działaniu mam program ładujący kursor i wyświetlam ProgressBar, który po prostu mruga, ponieważ baza danych nie jest tak duża. .. To, czego chcę uniknąć, to w ogóle to pierwsze okno dummy, bez ekranu powitalnego, tak jak robią to wspomniane aplikacje. – urSus

0

Załaduj zasoby przed ustawieniem widoku zawartości. Pojawi się puste okno, dopóki nie ustawisz widoku za pomocą metody setContentView.

EDYTOWANIE Aby uniknąć tego ekranu. Wprowadź zmiany w kodzie.

1) Nie wykonuj żadnych ciężkich prac w ramach metody Utwórz. Uruchom dla niego oddzielny wątek.

2) Ustaw widok zawartości zaraz po super.onCreate() linii

super.onCreate(savedInstanceState); 
    setContentView (R.layout.splash_screen); 

3) mają zastosowanie następujące tematu do swojej aplikacji.

Określ motyw w stylu

<resources> 
<style name="Theme.MyTheme" parent="android:style/Theme" > 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowBackground">@drawable/any_default_background</item> 

</style> 
</resources> 

W manifestu

 <application 
     .... 

     android:theme="@style/Theme.MyTheme" 
     .... 
     > 

to wszystko.

+0

Ten rodzaj nie ma dla mnie sensu. Powinienem załadować zasoby przed setContentView(), a okno dummy będzie wyświetlone, dopóki setContentView nie zostanie ustawione, prawda? Nie chcę tego fałszywego okna. – urSus

+0

To nie jest dobre zachowanie aplikacji, aby pozwolić użytkownikowi czekać na aplikację bez wyświetlania ekranu startowego. Powinieneś wyświetlić ekran powitalny, podczas gdy twoje zasoby są ładowane w tle. – Adnan

+0

To tylko sekunda lub dwie, ale to puste okno daje zły UX w moim opionion, więc chcę go pominąć. Aplikacje Google też to robią (Gmail wyświetla fałszywe okno, Dysk nie robi - sprawdź to)/Kiedy ładuję bazę danych, wyświetlam pasek postępu, ale w mojej opinii czekam na wszystkie zasoby statyczne itp., Nie aktywność. – urSus

0

Spowoduje to utworzenie niestandardowego okna podglądu dla swojej działalności.

Utwórz styl w styles.xml jak

<style name="MyTheme" parent="@android:style/Theme.Holo.NoActionBar"> 
    <item name="android:windowBackground">@color/myBackgroundColor</item> 
</style> 

W pliku manifestu użyć motywu utworzonego powyżej. Dla np

<activity android:name=".MyActivity" 
    android:label="@string/app_name" 
    android:theme="@style/MyTheme" 
    /> 

W swojej działalności zmienić tło okna z powrotem do wartości null w onCreate()

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().setBackgroundDrawable(null); 
    setContentView(R.layout.main); 
} 
22

Proponuję nie wyłączyć okno ładowania z użyciem manekina:

<style name="Theme.MyTheme" parent="android:style/Theme" > 
    .... 
    <item name="android:windowDisablePreview">true</item> 
    .... 
</style> 

ponieważ możesz napotkać kilka problemów. Na przykład, jeśli spróbujesz animować AlertDialog, wpisz animację nie działa (osobiste doświadczenie).

Właściwe rozwiązanie to ustawienie motywu aplikacji na ekranie głównym aktywności (ten sam styl ActionBar, ten sam kolor tła). W mojej aplikacji po eksperymentach z serami znalazłem odpowiednie rozwiązanie dla moich potrzeb. (mam główną działalność z pustym tle, bez ActionBar, tylko pełny ekran osobisty Układ)

1 - styles.xml: Dodaj nowy styl tak (usuń ActionBar i ustawić ten sam kolor tła mojego głównej działalności)

<style name="LoadingTheme" parent="@android:style/Theme.Light.NoTitleBar.Fullscreen"> 
    <item name="android:windowBackground">@color/white_smoke</item> 
</style> 

2 - AndroidManifest.xml: set mój temat aktywności głównego do "LoadingTheme"

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

iw końcu mieć pełne puste okno ładowania manekina bez ActionBara z miękkim ładowaniem MainActivity i animacjami roboczymi.

Mam nadzieję, że będę pomocny.

+1

To działa, nie ma potrzeby innych obejść! –

Powiązane problemy