【问题标题】:splash screen application and hide action bar启动屏幕应用程序和隐藏操作栏
【发布时间】:2013-05-29 20:16:44
【问题描述】:

我试图弄清楚如何隐藏启动屏幕活动的操作栏。 我做了一些事情,在我的启动画面上隐藏了我的操作栏,但是有一个问题: 在我的启动画面出现之前,就像一个带有动作栏的活动,它短暂地出现......我不知道如何隐藏它!

我的启动画面只有在我们第一次触摸应用程序时才会出现,就像应用程序的介绍一样。

代码:

package com.example.basicmaponline;

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

public class Intro extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);


    getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
    getActionBar().hide();

    setContentView(R.layout.intro);

    Thread timer = new Thread(){
        public void run(){
            try{
                sleep(3000);
            }catch (InterruptedException e) {
                e.printStackTrace();
            }finally{
                Intent openMenu = new Intent("com.example.basicmaponline.MENU");
                startActivity(openMenu);
            }
        }
    };
    timer.start();
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    finish();
}

}

清单:

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

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_GPS"></uses-permission>

<application
    android:allowBackup="true"
    android:icon="@drawable/lojacidadao"
    android:label="@string/app_name"
     android:theme="@style/AppTheme">
    <activity
        android:name="com.example.basicmaponline.Intro"
        android:screenOrientation="portrait"
        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.example.basicmaponline.Menu"
        android:screenOrientation="portrait"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="com.example.basicmaponline.MENU" />

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

    <activity
        android:name="com.example.basicmaponline.Mapa"
        android:screenOrientation="portrait"
        android:label="@string/map_name">
        <intent-filter>
            <action android:name="com.example.basicmaponline.MAPA" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.example.basicmaponline.Lojas"
        android:screenOrientation="portrait"
        android:label="@string/lojas_name">
        <intent-filter>
            <action android:name="com.example.basicmaponline.LOJAS" />

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

    <activity
        android:name="com.example.basicmaponline.InfoLoja"
        android:screenOrientation="portrait"
        android:label="@string/loja_name">
        <intent-filter>
            <action android:name="com.example.basicmaponline.INFOLOJA" />

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

    <activity
        android:name="com.example.basicmaponline.Balcoes"
        android:screenOrientation="portrait"
        android:label="@string/balcoes_name" >
        <intent-filter>
            <action android:name="com.example.basicmaponline.BALCOES" />

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

    <activity
        android:name="com.example.basicmaponline.Entidade"
        android:screenOrientation="portrait"
        android:label="@string/balcao_name">
        <intent-filter>
            <action android:name="com.example.basicmaponline.ENTIDADE" />

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

     <activity
        android:name="com.example.basicmaponline.Servicos"
        android:screenOrientation="portrait"
        android:label="@string/servicos_name">
        <intent-filter>
            <action android:name="com.example.basicmaponline.SERVICOS" />

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

     <activity
        android:name="com.example.basicmaponline.InfoServico"
        android:screenOrientation="portrait"
        android:label="@string/servico_name">
        <intent-filter>
            <action android:name="com.example.basicmaponline.INFOSERVICO" />

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

     <activity
        android:name="com.example.basicmaponline.Pesquisar"
        android:screenOrientation="portrait"
        android:label="@string/pesquisa_name" >
        <intent-filter>
            <action android:name="com.example.basicmaponline.PESQUISAR" />

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

</application>
</manifest>

【问题讨论】:

  • @rciovati 我会支持这个意见。如果您首先在布局中将其设置为不存在,那么您将不会遇到将声音描述为闪烁的问题。
  • 我添加了我的清单 :)

标签: android user-interface android-actionbar show-hide splash-screen


【解决方案1】:

为什么不将第一个活动的主题添加到清单中以排除操作栏,甚至可能是通知栏?

类似:

<application
    android:allowBackup="true"
    android:icon="@drawable/lojacidadao"
    android:label="@string/app_name"
     android:theme="@style/AppTheme">
    <activity
        android:name="com.example.basicmaponline.Intro"
        android:screenOrientation="portrait"
        android:label="@string/app_name" 
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

如果您扩展普通的 Activity 类,这应该可以工作。

如果您的 Activity 改为扩展 AppCompatActivity,请使用此主题,例如:

  <style name="AppTheme.Splash" parent="@style/Theme.AppCompat.NoActionBar">
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
  </style>

意思:

 <activity ...            
    android:theme="@style/AppTheme.Splash" >
    ...

顺便说一句,你有操作栏的原因是因为你在应用程序标签中设置了默认主题,所以它不是你之前的活动,它实际上是你自己的启动活动。

【讨论】:

  • 成功了!谢谢 ! "android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 所以来自 Android 的 "android:Theme.Holo" 将为每个活动放置动作栏。好的!:)
  • 是的,如果您希望支持在旧的 android 版本(姜饼及以下)中添加操作栏,您可以使用 ActionBarSherlock 库,当然也可以使用它们的样式和类。
  • 我尝试了这种方法,但它用深色背景更改了我的主题,而我的主题是 android:theme="@style/Theme.AppCompat.Light.DarkActionBar" 怎么会这样会这样吗?
  • @Jiazzyuser 您还应该将主题设置为应用程序标签本身。
  • 但我在应用程序标签中的主题已经设置为浅色背景
【解决方案2】:

如果您的构建目标是 sdk 5.0 或更高版本(AppTheme 样式为 Theme.AppCompat.Light.DarkActionBar。)

<activity
    android:name=".Splash"
    android:label="@string/app_name"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>

【讨论】:

    【解决方案3】:

    你的问题是这些行

    getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
    getActionBar().hide();
    

    它们不是必需的,因为根本不应该调用 ActionBar,启动屏幕不使用一个,并且应该是一个完全独立的 Activity

    您需要两个Activities。一个用于具有自己布局的启动画面。第二个是主Activity,可以是登录屏幕或欢迎屏幕等。

    启动画面类应该是这样的

    public class SplashScreen extends Activity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    
        setContentView(R.layout.yourlayoutfile);
    
        Thread loading = new Thread() {
            public void run() {
                try {
                    sleep(5000);
                    Intent main = new Intent(SplashScreen.this, Main.class);
                    startActivity(main);
                }
    
                catch (Exception e) {
                    e.printStackTrace();
                }
    
                finally {
                    finish();
                }
            }
        };
    
        loading.start();
    }
    
    }
    

    XML 文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"    
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"    
    tools:context=".SplashScreen" >
    
    // if not using an image replace with whatever is to be shown on the splash screen
    <ImageView  
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/logo" />
    
    </LinearLayout>
    

    现在第二个Activity 具有ActionBar 等的布局。

    【讨论】:

    • 我做了你做的事情,它做同样的事情......我触摸了我的应用程序,一个活动短暂(半秒)出现了一个操作栏,在我的启动屏幕出现后:f
    • 这是发生在实际设备上还是AVD上?
    • 我正在使用我的三星 Galaxy s4
    • 啊,我刚刚注意到另一个答案。他似乎找到了你问题的根源。很高兴你得到了答案,干杯!
    【解决方案4】:

    小而甜,容易

    在 OnCreate 中执行

    View decorView = getWindow().getDecorView();
            int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN;
            decorView.setSystemUiVisibility(uiOptions);
    

    【讨论】:

    • 由于它是您的初始屏幕,即使有人触摸屏幕,您也可能希望隐藏操作栏。但是,通过这种方法,触摸屏幕上的任何位置都会导致该栏重新出现并保持可见。
    【解决方案5】:
    //add to AndroidManifest for SplashScreen
    <activity
             android:name="<YOUR_PACKAGENAME.ACTIVITY>"
             android:theme="@style/AppTheme.NoActionBar"
             .........../>
    //add this styles to  styles.xml
    
     <style name="AppTheme.NoActionBar">
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowDisablePreview">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@null</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
    
    //add this code to Activity
    public class SplashScreen extends AppCompatActivity {
    .
    .
        @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        .
        .
        .
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      相关资源
      最近更新 更多