如何使用现有的自定义主题在 XML 中隐藏 Activity 的标题栏

问:

我想隐藏我的一些活动的标题栏。问题是我对所有活动都应用了一种样式,因此我不能简单地将主题设置为 @android:style/Theme.NoTitleBar。

使用 NoTitleBar 主题作为我的样式的父主题会从我的所有活动中删除标题栏。

我可以在某处设置无标题样式的项目吗?

答1:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

在您的 onCreate() 方法中执行此操作。

//Remove title bar
this.requestWindowFeature(Window.FEATURE_NO_TITLE);

//Remove notification bar
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

//set content view AFTER ABOVE sequence (to avoid crash)
this.setContentView(R.layout.your_layout_name_here); 

this 指的是 Activity。

很好的答案。不过,您不必两者都做,删除通知栏可能是矫枉过正。

一定要把它放在调用 setContentView(R.id.x) 之前,否则会崩溃。原因对我来说并不是很明显。 08-13 12:47:33.561 E/AndroidRuntime(9125): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.myapp/com.myapp.SplashActivity}: android.util.AndroidRuntimeException: requestFeature() 必须被调用添加内容之前

您确实应该提到,在使用 requestWindowFeature() 时,如果您在添加任何内容后执行此行,则会发生强制关闭。顺便说一句,XML 方法更安全,它还将页面结构与您的代码分开,(这首先是 XML 的全部目的。)

这在使用 API 22 时不起作用。当应用程序启动时,我仍然会看到最初的标题栏。

如果您的活动扩展了 Activity 而不是 AppCompatActivity ,则它可以工作,即您的类应声明为公共类 myActi extends Activity {}

答2:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

您可以修改您的 AndroidManifest.xml:



如果您不需要全屏 Activity,请使用 android:theme=“@android:style/Theme.Black.NoTitleBar”。

注意:如果您之前使用过“默认”视图,您可能还应该将父类从 AppCompatActivity 更改为 Activity。

我不知道为什么。我只使用了默认项目并添加了一个活动。自动完成我不起作用,但主题在那里。

android:theme="@android:style/Theme.Black.NoTitleBar" 可能更有用,除非您正在制作游戏

或者 来点亮主题。

我不知道为什么,但这使我的应用程序崩溃。有什么帮助吗?

@Akeshwar:您可能不得不弄乱您的 styles.xml 文件。例如,将

答3:

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

我现在做了以下事情。

我声明了一个样式继承了我的一般样式的所有内容,然后禁用了 titleBar。


    <item name="android:windowNoTitle">true</item>


现在我可以为每个要隐藏标题栏的 Activity 设置此样式,覆盖应用程序范围的样式并继承所有其他样式信息,因此样式代码中没有重复。

要将样式应用于特定 Activity,请打开 AndroidManifest.xml 并将以下属性添加到 activity 标记;



我相信他创造了一种叫做“一般”的风格,他只是在扩展它。只需将其删除以供自己使用。

+1 来回答这个问题,而不是像这个问题的大多数其他答案一样,只指定最明显的方法来获得类似的结果。很遗憾,您必须回答自己的问题才能获得准确的答案...

这个答案是最好的。即使您可以使用 android 提供的任何其他没有标题栏的主题。非常感谢分享

我相信这是比编程 this.requestWindowFeature(Window.FEATURE_NO_TITLE); 更优雅的解决方案。因为在这种情况下,标题的一些“闪烁”仍然可见

OP问题的最佳答案:)但这仍然不能消除我活动的标题栏(API19)

答4:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

我不喜欢 this.requestWindowFeature(Window.FEATURE_NO_TITLE);,因为标题栏短暂出现,然后消失。

我也不喜欢 android:theme=“@android:style/Theme.NoTitleBar”,因为我失去了新设备用户已经习惯的所有 3.0+ Holo 更改。所以我遇到了这个解决方案。

在您的 res/values 文件夹中创建一个名为 styles.xml 的文件(如果它尚不存在)。在该文件中放置以下代码:


    
    
    


接下来使用另一个 styles.xml 文件创建一个 res/values-v11(这可能已经存在)。在该文件中放置以下代码:


    
    
    


如果您的目标是 4.0+,请使用另一个 styles.xml 文件创建一个 res/values-v14 文件夹(是的,它可能已经存在)。在该文件中放置以下代码:


    
    
    


最后,创建所有这些文件后,打开您的 AndroidManifiest.xml 文件,您可以添加代码:

android:theme="@style/Theme.NoTitle"

如果您希望将其应用于整个应用程序,则添加到您不想要标题的活动的活动标签或应用程序标签。

现在,您的用户将获得与他们的设备版本相关联的主题以及您想要的屏幕布局。

PS 将值更改为 android:theme=“@style/Theme.FullScreen” 将具有相同的效果,但也会删除通知栏。

他们..这对您所说的效果很好,但是在更改主题时图像会尖叫。那么该怎么办 ???

@arun - 使用这种方法我没有遇到任何图像问题。你的尖叫是什么意思?

最佳答案.. this.requestWindowFeature(Window.FEATURE_NO_TITLE);不适合,并且 true 确实丢失了原始主题..感谢@DevinStewart ..接受 +1 的解释 :)

啊,愚蠢的我!我使用的是 ActionBarActivity,如果你想删除 ACTIONBAR,这没有意义!更改为简单的 Activity 或 FragmentActivity 可以让这个不错的解决方案像魅力一样工作。

“不幸的是,YourApp 已停止。”

答5:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

如开发者 Android 页面所述,可以通过两种方式删除标题栏:

在 manifest.xml 文件中:

如果要为应用程序中的所有活动删除它,请在应用程序中添加以下内容: 或针对特定活动:

最好使用 android:theme="@android:style/Theme.DeviceDefault.NoActionBar.Fullscreen" 而不是 black.theme。让设备处理主题。但是谢谢,我用了你的方法

答6:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

正确的答案可能是不扩展 ActionbarActivity 而只是扩展 Activity

如果您仍然使用操作栏活动,这似乎是有效的:

@Override
protected void onCreate(Bundle savedInstanceState) {
    
              
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide(); //<< this
    setContentView(R.layout.activity_main);
}

似乎这也有效:

styles.xml:

   
          <item name="android:windowNoTitle">true</item>   <!-- //this -->     
   

我可以像 Scott Biggs 写的那样做。这种作品。除非那时没有主题。我的意思是设置菜单的背景是透明的:

只是改变

public class MainActivity extends ActionBarActivity {
    
    

到 Activity 或 FragmentActivity

public class MainActivity extends Activity  {
    
    

但是我可以使用材料设计使它看起来足够好而不删除操作栏:https://gist.github.com/shimondoodkin/86e56b3351b704a05e53

设置应用程序的图标设置操作栏的颜色以匹配设计。将图标设置为设置菜单添加更多图标(顶部按钮)

它是材料设计兼容性动作栏样式的示例。

将 ActionBarActivity 更改为 Activity 对我有用!

答7:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

什么对我有用:

1-在styles.xml中:

 
          <item name="android:windowNoTitle">true</item>   <!-- //this -->     
   

2- 在 MainActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    
              
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide(); //<< this
    setContentView(R.layout.activity_main);
}

在清单中继承样式:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

如上所述,有时它不适用于 xml。我不知道究竟为什么,我不完全确定,但 onCreate(){} 中的 getSupportActionBar().hide(); 会完成这项工作

非常感谢,这是明确和简单的答案

答8:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

如果您使用 this.requestWindowFeature(Window.FEATURE_NO_TITLE),则当 Activity 通过 onCreate 开始时,用户仍然可以在启动动画期间看到标题栏片刻。如果您使用如下所示的 @android:style/Theme.Black.NoTitleBar,则在启动动画期间将不会显示标题栏。



上面的示例显然会覆盖您现有的应用程序主题,如果您有现有的主题然后添加 true 到它。

我的 Activity 是带有 @android:style/Theme.Black.NoTitleBar 的单实例,但使用此代码将在第一次创建 Activity 时起作用,如您所知 SingleInstance Activity 然后再次未创建,因此它只使用 OnNewItent 方法但现在我的问题是当 Activity Show它只是显示状态栏 4 秒。我怎样才能摆脱这个。这是我的问题链接是 stackoverflow.com/questions/9308767/…

答9:

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

当我尝试使用所有那些高票数的答案时,我的应用程序总是崩溃。 (我认为这与“@android:style”有关?)

对我来说最好的解决方案是使用以下内容:

android:theme="@style/Theme.AppCompat.NoActionBar"

没有标题/标题栏了。只需将它放在 … 或 … 中,具体取决于您是(不)希望它在整个应用程序中还是仅在特定活动中。

如果应用程序“扩展 AppCompatActivity”,这是最好的方法(或唯一的方法?)!

答10:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

创建一个主题如下。

 

    <item name="android:windowNoTitle">true</item>


答11:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

添加

true

在 AppTheme (styles.xml) 内

原文链接:https://www.huntsbot.com/qa/4rE4/how-to-hide-the-title-bar-for-an-activity-in-xml-with-existing-custom-theme?lang=zh_CN&from=csdn

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

猜你喜欢

转载自blog.csdn.net/kalman2019/article/details/128732229