ハニカムアプリにスプラッシュスクリーンを実装する必要があります。スプラッシュを表示するためにアクティビティのonCreateでこのコードを使用します。
setContentView(R.layout.splash);
getActionBar().hide();
そしてこのコードはしばらくしてメインのUIを表示します:
setContentView(R.layout.main);
getActionBar().show();
しかし、onCreateが呼び出されてスプラッシュが表示される前に、アクションバーが表示されるまでに少し時間がかかります。
アクションバーを非表示にする方法
アクションバーを使わずにテーマをアクティビティに適用しようとしました。
<item name="Android:windowActionBar">false</item>
しかしその場合、getActionBar()は常にnullを返し、再度表示する方法が見つかりませんでした。
Android:windowActionBar="false"
を設定するとActionBarは本当に無効になりますが、getActionBar();
はnullを返します。これは解決されます:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getActionBar().hide();
setContentView(R.layout.splash); // be sure you call this AFTER requestFeature
これによりActionBarが作成され、表示される前にすぐに非表示になります。
しかし今、別の問題があります。テーマにwindowActionBar="false"
を入れた後、ActivityはActionBarの代わりに通常のWindow Titleを描画します。
いくつかの*.NoTitleBar
ストックテーマを使用してこれを回避しようとした場合、または<item name="Android:windowNoTitle">true</item>
を自分のテーマに配置しようとした場合は、うまくいきません。
その理由は、ActionBarはそれ自体を表示するためにウィンドウタイトルに依存するためです。つまり、アクションバーは変換されたウィンドウタイトルです。
だから私たちを助けることができるトリックは私たちの活動のテーマxmlにもう一つのことを追加することです:
<item name="Android:windowActionBar">false</item>
<item name="Android:windowTitleSize">0dp</item>
これによりウィンドウタイトルの高さがゼロになり、実質的に見えなくなります。
あなたのケースでは、スプラッシュスクリーンを表示し終えた後、あなたは単に呼ぶことができます
setContentView(R.layout.main);
getActionBar().show();
そして、あなたは終わりました。アクティビティは、ActionBarのちらつきやウィンドウタイトルの表示なしで開始されます。
ADDON:ActionBarを複数回表示したり非表示にしたりすると、最初の表示がアニメーション化されていない。それ以降は、表示と非表示がアニメーション化されます。最初の上映でもアニメーションを見たい場合は、これを使用できます。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_ACTION_BAR);
// delaying the hiding of the ActionBar
Handler h = new Handler();
h.post(new Runnable() {
@Override
public void run() {
getActionBar().hide();
}
});
次のようにしても同じことが実現できます。
protected void onPostResume() {
super.onPostResume();
getActionBar().hide();
しかし、これがアクティビティの最初の表示であるかどうかを確認するには、追加のロジックが必要になる場合があります。
その考えは、ActionBarの隠蔽を少し遅らせることです。ある方法で、ActionBarを表示させますが、すぐに非表示にします。したがって、最初のアニメーション化されていない上映を超えて、次の上映は2番目と見なされるため、アニメーション化されます。
ご想像のとおり、ActionBarが遅延操作によって隠される前に表示される可能性があります。これは実際にそうです。ほとんどの場合何も表示されませんが、時々、ActionBarが一瞬点滅するのを見ることができます。
いずれにせよこれはあまり良い解決策ではないので、私はどんな提案でも歓迎します。
v7対応のアクションバーユーザーのための追加、コードは次のようになります。
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getSupportActionBar().hide();
アクションバーを隠すためにあなたの.classファイルでこの単純なコードを使う
getSupportActionBar().hide();
ActionBarSherlockを使用している場合は、ActivityでTheme.Sherlock.NoActionBarテーマを使用します。
<activity
Android:name=".SplashScreenActivity"
Android:theme="@style/Theme.Sherlock.NoActionBar">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
2つのスタイルを作成してください。
<style name="AppThemeNoBar" parent="Theme.AppCompat.Light">
<item name="Android:windowNoTitle">true</item>
</style>
<style name="AppThemeBar" parent="Theme.AppCompat.Light">
<item name="Android:windowNoTitle">false</item>
</style>
アプリケーションのテーマとしてAppThemeNoBarを設定し、アクションバーを表示するアクティビティにAppThemeBarを設定します。
このリンクをチェックしてください Android:ビューロード中にアクションバーを非表示にします
こんにちは私は2テーマを使用して簡単な解決策があります
スプラッシュスクリーンのテーマ(マニフェストに追加):
<style name="SplashTheme" parent="@Android:style/Theme.Holo.NoActionBar"> <item name="Android:windowBackground">@color/red</item> </style>
通常のテーマ(setTheme(R.style.Theme)であなたのアクティビティに追加してください):
<style name="Theme" parent="@style/Theme.Holo"> <item name="Android:windowBackground">@color/blue</item> </style>
SDK 10をサポートするには
@Override
public void onCreate(Bundle savedInstanceState) {
setTheme(R.style.Theme);
super.onCreate(savedInstanceState);
...........
...........
}
私はまた、Android 2.2上でAction Barを隠そうとしていましたが、これらの解決策はどれもうまくいきませんでした。すべてがクラッシュで終わります。 DDMS LOGをチェックしました、それは 'Theme.AppCompat'を使用するように私に言っていました。最後に私はAndroid:theme="@Android:style/Theme.Holo.Light.NoActionBar"
Lineを変更することによって問題を解決しました
Android:theme="@style/Theme.AppCompat.NoActionBar"
にそれは働いた、しかしインタフェースは暗かった。
それから私はAndroid:theme="@style/Theme.AppCompat.Light.NoActionBar"
を試して、そして最後に私が欲しいものを手に入れました。
その後、 開発者サイトで 'AppCompat'について検索したところ、これが見つかりました。
だから私はAndroid 2.2のための解決策があると思います
<activity
Android:name=".MainActivity"
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>
そしていつものように私の悪い英語ですみません。
私にとって最良の結果は、ThemeNoTitleBarで、ランチャーとしてのコンテンツなしでアクティビティを作成することでした。それからこの活動は直接相手に電話をかけます。
もちろん、スプラッシュアクティビティにコンテンツを追加することもできますが、私の場合はアプリケーションを直接表示したいだけでした。
マニフェスト:
<activity
Android:name="com.package.SplashActivity"
Android:theme="@Android:style/Theme.Black.NoTitleBar" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
アクティビティ:
public class SplashActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//start StartActivity
Intent intent = new Intent(this, StartActivity.class);
startActivity(intent);
finish();
}
}
スプラッシュスクリーンを含む1つのActivity
を使用する場合、SherlockActionBar
を使用すればこれを実行できます
getSupportActionBar().hide();
スプラッシュスクリーンの後、あなたは再びそれを見せることができます...
getSupportActionBar().show();
AndroidのネイティブActionBar
と同じであるべきです。
ベストでシンプル
requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
2015年、AppCompatテーマを持つサポートv7ライブラリーを使用して、あなたのアクティビティにこのテーマを設定します。
<style name="AppTheme.AppStyled" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimaryDark">@color/md_Indigo_100</item>
<item name="colorPrimary">@color/md_Indigo_500</item>
<item name="colorAccent">@color/md_red_500</item>
<item name="Android:textColorPrimary">@color/md_white_1000</item>
<item name="Android:textColor">@color/md_purple_500</item>
<item name="Android:textStyle">bold</item>
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
</style>
@クレリックスソリューションは機能します。しかし、これはgooglesネイティブアプリのいくつかでも問題になっているようです:googles、Playストア、talk。スカイプのような他の大きなアプリも。
EDIT:api <4.0でアクションバーロックの問題が解決されない。
アプリケーションまたはアクティビティタグ内のマニフェストに以下を追加します。
Android:theme="@style/Theme.NoActionBar"
そして、あなたの主な活動の中で:
// Set theme
setTheme(R.style.YOUR_THEME);
getSupportActionBar().setTitle(R.string.title);
// Start regular onCreate()
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Splashscreen
では、manifest
でこの行を使用し、getActionBar()
は使用しないでください。
<item name="Android:windowActionBar">false</item>
そして、スプラッシュActivity
がメインのActivity
の使用で終了したとき、または以下が1回もありません。
<item name="Android:windowActionBar">true</item>
これを試して、それは私のために働く:
下は活動のタイトルバーを取り除きます
requestWindowFeature(Window.FEATURE_NO_TITLE);
以下では通知バーを削除してアクティビティを全画面表示にしています
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
(下記の例全体)注意してください。これらのメソッドは、アクティビティのコンテンツビューを設定する前に呼び出されました。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Sets Application to full screen by removing action bar
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
// without this check, we would create a new fragment at each orientation change!
if (null == savedInstanceState)
createFragment();
}
これは便利かもしれません
これをあなたのマニフェストに追加します
Android:theme="@Android:style/Theme.Light.NoTitleBar"
乾杯
すべての利用可能なオプションを読んだ後に私が見つける最良の方法は、ActionBarなしでメインテーマを設定してから、すべてのActivityの親にコードでMyThemeを設定することです。
マニフェスト:
<application
...
Android:theme="@Android:style/Theme.Holo.Light.NoActionBar"
...>
基本アクティビティ:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.GreenHoloTheme);
}
これにより、アプリケーション起動時にActionBarを回避することができます。
getActionBar()
の代わりにサポートライブラリを使用しているためにnullがある場合はgetSupportActionBar()
を呼び出す必要があります。
すでに掲載されている解決策には副作用があり、最初の.show()呼び出しではアクションバーがアニメートされませんでした。私はもう一つのいい解決策を得ました、それはそれを修正しました:
透明なドロアブルを作成します - そのようなもの:
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"> <solid Android:color="#00000000" /> </shape>
実際のアクションバーの背景を、アクションバーで設定した見えないカスタムビューに設定します。
getSupportActionBar().setCustomView(R.layout.actionbar_custom_layout); getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE);
OnCreateでアクションバーの透明な背景を設定します。
getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.background_transparent));
重要:onCreateですぐにアクションバーを非表示にしないでください。ただし、後で少し遅れてください。レイアウトの作成が完了したら
getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
getSupportActionBar().hide();
}
});
最初の.show()呼び出しの前にカスタムビューを表示に設定します。
_actionbarRoot.setVisibility(View.VISIBLE); getSupportActionBar().show();
スプラッシュスクリーンを別のアクティビティに配置して、メインアクティビティのstartActivityForResult
メソッドから onCreate
を使用して表示します。 docsによると、これはうまくいく。
特別な場合として、アクティビティの初期onCreate(Bundle savedInstanceState)/ onResume()の間にrequestCode> = 0でstartActivityForResult()を呼び出すと、開始されたアクティビティから結果が返されるまでウィンドウは表示されません。これは、他のアクティビティにリダイレクトするときに目に見えるちらつきを防ぐためです。
onCreate
への引数がnull
(設定変更による再起動ではなく、アクティビティの新たな起動を示す)の場合のみ、おそらくこれを行うべきです。
これをstyles.xmlに追加するだけです。
<item name="Android:windowNoTitle">true</item>
私はまだnullポインタでエラーがあり、最初にgetWindow()。requestFeature()そして次にsuper.onCreate()を呼んだときにそれが最後に助けになりました。
public void onCreate(Bundle savedInstanceState) {
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
super.onCreate(savedInstanceState);
getActionBar().show();
OnCreate関数のMainActivityにこれを追加するだけです。
val actionBar = supportActionBar?.apply { hide() }
これを行うための最善の方法は、最初のアクティビティを空白のアクティビティとして作成し、コンテンツを追加してしばらくしてから別のアクティビティを起動することです。このようにすれば、アクションバーなどを使わずに最初のアクティビティをスプラッシュスクリーンとして実行できます。私の最初の活動
package com.superoriginal.rootashadnasim.syllabus;
import Android.content.Intent;
import Android.os.Handler;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
public class first_screen extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first_screen);
final Handler h=new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent=new Intent(getApplicationContext(),DrawerChooseBranchMainActivity.class);
startActivity(intent);
}
},2000);
}
}
その後、あなたは最初のアクティビティとしてあなたのアクティビティのいずれかを置くことができますあなたがどの画面にもアクションバーをしたくない場合はちょうどあなたのスタイルにこれを追加
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
実際には、スプラッシュActivity
をNoActionBar
で設定し、メインのactivity
をアクションバーで簡単に設定できます。