gpt4 book ai didi

android - 如何在创建 Activity 之前隐藏操作栏,然后再次显示?

转载 作者:IT老高 更新时间:2023-10-28 12:51:50 27 4
gpt4 key购买 nike

我需要在我的蜂窝应用程序中实现启动画面。我在 Activity 的 onCreate 中使用此代码来显示启动画面:

setContentView(R.layout.splash);
getActionBar().hide();

这段代码会在一段时间后显示主 UI:

setContentView(R.layout.main);
getActionBar().show();

但是 onCreate 被调用并出现splash 之前,有一小段时间显示action bar。

如何使操作栏不可见?

我尝试将主题应用于没有操作栏的 Activity :

<item name="android:windowActionBar">false</item>

但在这种情况下 getActionBar() 总是返回 null,我找不到再次显示它的方法。

最佳答案

设置 android:windowActionBar="false"真正禁用 ActionBar 但是,正如您所说,getActionBar();返回空值。这是通过以下方式解决的:

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 绘制其正常的 Window Title 而不是 ActionBar。
如果我们试图通过使用一些 *.NoTitleBar 来避免这种情况股票主题或我们尝试把 <item name="android:windowNoTitle">true</item>在我们自己的主题中,它不起作用。
原因是ActionBar 依赖 Window Title 来显示自己——也就是说ActionBar 是一个转换后的Window Title。
因此,可以帮助我们的诀窍是在我们的 Activity 主题 xml 中再添加一件事:

<item name="android:windowActionBar">false</item>
<item name="android:windowTitleSize">0dp</item>

这将使窗口标题的高度为零,因此实际上是不可见的。

在你的情况下,在你完成显示启动画面后,你可以简单地调用

setContentView(R.layout.main);
getActionBar().show();

你就完成了。 Activity 开始时不会闪烁 ActionBar,也不会显示 Window Title。

插件:如果您多次显示和隐藏 ActionBar,您可能已经注意到 first 显示是 not 动画的。从那时起,显示和隐藏都是动画的。如果你也想在第一次放映时有动画,你可以使用这个:

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();

但它可能需要一些额外的逻辑来检查这是否是 Activity 的第一次显示。

这个想法是稍微延迟ActionBar的隐藏。在某种程度上,我们让 ActionBar 显示出来,然后立即隐藏它。因此,我们超越了第一次非动画放映,下一次放映将被视为第二次放映,因此它将被动画化。

正如您可能已经猜到的那样,ActionBar 可能在被延迟操作隐藏之前就已经被看到了。实际情况就是这样。大多数情况下什么都看不到,但偶尔,您会看到 ActionBar 闪烁一瞬间。

无论如何,这不是一个很好的解决方案,所以我欢迎任何建议。

添加 v7支持actionbar用户,代码为:

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

关于android - 如何在创建 Activity 之前隐藏操作栏,然后再次显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8500283/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com