【问题标题】:Custom titlebar - system titlebar being shown for a brief moment?自定义标题栏 - 系统标题栏显示片刻?
【发布时间】:2011-02-09 21:47:11
【问题描述】:

我有一个自定义布局,我想将其用作我的 android 应用程序的标题栏。找到的技术(链接在底部)有效,但系统标题栏在调用 onCreate() 之前显示。显然这看起来很不和谐,因为系统标题栏显示了一会儿,然后显示了我的自定义标题栏:

// styles.xml
<resources>
  <style name="MyTheme">
    <item name="android:windowTitleSize">40dip</item>
  </style>
</resources>

// One of my activities, MyTheme is applied to it in the manifest.
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    setContentView(R.layout.my_activity);
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.my_custom_header);
}

我总是可以隐藏系统标题栏并在每个布局中显示我自己的内联,但是,这不是很友好。

谢谢

http://www.londatiga.net/it/how-to-create-custom-window-title-in-android/

【问题讨论】:

  • 您是否试图在显示自定义栏之前不显示系统(空)栏?
  • 好吧,自定义栏是一个 layout.xml 文件 - 理想情况下,应用程序会立即显示该自定义 layout.xml 文件。现在系统栏显示一秒钟看起来很尴尬,然后被我的自定义 layout.xml 栏替换。

标签: android


【解决方案1】:

我认为这是一个框架限制。我在一些应用程序中遇到了同样的问题,最终的解决方案是让我告诉框架我根本不需要标题栏,然后在我的布局中创建自己的标题栏。 include 指令让我可以忍受,例如:

<include layout="@layout/title" />

当我在我的活动中使用 requestWindowFeature(Window.FEATURE_NO_TITLE) 时,我会遇到同样的问题,当活动首次加载时正在构建时,我会短暂地看到系统标题栏。

当我切换到使用主题来告诉框架我不想要标题时,问题就消失了,我现在在第一次加载时直接看到自己的标题。样式很简单:

<style name="FliqTheme" parent="@android:Theme.Black">
    <item name="android:windowNoTitle">true</item>
</style>

我知道这不适用于您的自定义标题问题,但就像 ptc 提到的那样,如果您将自定义标题移动到样式/主题定义中(通过覆盖主题中的系统标题样式来实现),我认为你会走在正确的轨道上。

【讨论】:

  • 是的,我发现了同样的问题,可惜我们必须自己做。我们失去了系统工具栏提供的阴影效果。
【解决方案2】:

我今天尝试自定义标题时也遇到了同样的问题。我通过在AndroidManifest.xml 中将android:theme 设置为android:style/Theme.NoTitleBar 来解决它,并将setTheme() 调用为我在活动的onCreate 回调函数中想要的实际主题。

【讨论】:

    【解决方案3】:

    尝试在 XML 中创建自定义主题样式,然后在 AndroidManifest.xml 文件中设置活动的主题属性。

    http://developer.android.com/guide/topics/ui/themes.html#ApplyATheme

    【讨论】:

    • 嗨,是的,我确实有一个自定义主题,但您可以在其中定义标题栏的背景。我的自定义标题栏是一个带有一些控件的布局(如 twitter 的)。所以我们一直卡在启动时显示一个时髦的系统标题栏,直到显示真正的标题栏。
    【解决方案4】:

    通过设置 android:theme 的方法对我不起作用,我通过在我的 Activity 子类的 onCreate() 中添加以下代码来实现:

      getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN);
    

    【讨论】:

      猜你喜欢
      • 2020-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      • 2019-01-05
      相关资源
      最近更新 更多