android修改标题




如何使用现有的自定义主题隐藏XML中活动的标题栏 (20)

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

使用NoTitleBar主题作为我的样式的父项,将移除标题栏以进行多项活动。

我可以在什么地方设置无标题样式的项目吗?


Ahem,您可以将主题应用于XML单个活动,如无标题。 换句话说,将它从应用程序标签中取出,打开标签声明并将其放入所需的活动标签中。


为你使用的主题添加这两个:

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

你可以修改你的AndroidManifest.xml

<activity android:name=".MainActivity"
          android:label="@string/app_name"
          android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">

或者如果您不需要全屏活动,请使用android:theme="@android:style/Theme.Black.NoTitleBar"

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


你可以在你的java文件中使用这段代码

在设置或加载视图之前添加此行

requestWindowFeature(Window.FEATURE_NO_TITLE); 
setContentView(R.layout.activity_main);

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

在AppTheme(styles.xml)中


只需使用getActionBar().hide(); 在你的主要活动onCreate()方法中。


在你的onCreate方法中,使用下面的代码片段:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

在您的AndroidManifest.xml活动中添加主题@style / Theme.AppCompat.Light.NoActionBar,像这样

<activity
        android:name=".activities.MainActivity"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar">
    </activity>

如果您从DarkActionBar替换定义,您只需在Style.xml中更改AppTheme样式

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

NoActionBar

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

在AndroidManifast.xml中定义的AppTheme


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

<activity 
    android:name=".MainActivity" 
    android:label="My App"
    android:theme="@android:style/Theme.Black.NoTitleBar"
    android:screenOrientation="portrait">

上面的例子显然会覆盖你现有的应用程序主题,如果你有现有的主题,然后添加<item name="android:windowNoTitle">true</item>


将此样式添加到您的style.xml文件中

 <style name="AppTheme.NoActionBar">
     <item name="windowActionBar">false</item>
     <item name="windowNoTitle">true</item>
 </style>

之后,将此样式名称引入您的androidManifest.xml中,在其中您不想看到标题栏的特定活动中,如下所示。

<activity android:name=".youractivityname"
     android:theme="@style/AppTheme.NoActionBar">
</activity>

就我而言,如果您使用的是android studio 2.1,并且您的编译SDK版本是6.0,那么只需转到您的manifest.xml文件,然后更改以下代码:

代码如下:

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.NoActionBar">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

这里是剪辑拍摄(请参阅高亮代码):


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

我也不喜欢android:theme="@android:style/Theme.NoTitleBar"因为我失去了新设备用户习惯的3.0+全息变化。 所以我遇到了这个解决方案。

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

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Theme.Default" parent="@android:style/Theme"></style>
    <style name="Theme.NoTitle" parent="@android:style/Theme.NoTitleBar"></style>
    <style name="Theme.FullScreen" parent="@android:style/Theme.NoTitleBar.Fullscreen"></style>
</resources>

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

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Theme.Default" parent="@android:style/Theme.Holo"></style>
    <style name="Theme.NoTitle" parent="@android:style/Theme.Holo.NoActionBar"></style>
    <style name="Theme.FullScreen" parent="@android:style/Theme.Holo.NoActionBar.Fullscreen"></style>
</resources>

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

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Theme.Default" parent="@android:style/Theme.Holo.Light"></style>
    <style name="Theme.NoTitle" parent="@android:style/Theme.Holo.Light.NoActionBar"></style>
    <style name="Theme.FullScreen" parent="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen"></style>
</resources>

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

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

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

现在,您的用户将获得与您的设备版本相关的主题与您所需的屏幕布局。

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


我发现了两个可能发生此错误的原因。

一。 Window标志已经设置在super.onCreate(savedInstanceState); 在这种情况下,您可能需要使用以下命令顺序:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);      

super.onCreate(savedInstanceState);

二。 TitleBar内有Back / Up按钮,这意味着当前活动是另一个活动的分层子组件,在这种情况下,您可能需要从onCreate方法中注释掉或删除此行代码。

getActionBar().setDisplayHomeAsUpEnabled(true);

我现在做了以下。

我声明了一种风格,继承我的一般风格,然后禁用titleBar。

<style name="generalnotitle" parent="general">
    <item name="android:windowNoTitle">true</item>
</style>

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

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

<activity
    android:theme="@style/generalnotitle">

或者,如果您想在任何时候隐藏/显示标题栏:

private void toggleFullscreen(boolean fullscreen)
{
    WindowManager.LayoutParams attrs = getWindow().getAttributes();
    if (fullscreen)
    {
        attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
    }
    else
    {
        attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
    }
    getWindow().setAttributes(attrs);
}

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

如果你仍然使用操作栏活动似乎这是工作:

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

看起来也是这样:

styles.xml:

   <style name="AppBaseTheme" parent="Theme.AppCompat.Light" >
          <item name="android:windowNoTitle">true</item>   <!-- //this -->     
   </style>

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

只是改变

public class MainActivity extends ActionBarActivity {

活动或片段活动

public class MainActivity extends Activity  {

不过,我可以使用材质设计使其显得足够好,而不是删除操作栏: https://gist.github.com/shimondoodkin/86e56b3351b704a05e53 ://gist.github.com/shimondoodkin/86e56b3351b704a05e53

  1. 设置应用程序的图标
  2. 设置动作条的颜色以匹配设计。
  3. 将图标设置为设置菜单
  4. 添加更多图标(顶部的按钮)

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


添加明显的文件,

  android:theme="@android:style/Theme.Translucent.NoTitleBar"

在你的java文件中添加以下行,

  this.requestWindowFeature(Window.FEATURE_NO_TITLE);

这解决了我的问题

在清单中我的活动:

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".SplashScreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

在“AppTheme”名下的风格:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme"
        parent="Theme.AppCompat.Light.NoActionBar">
        **<item name="windowActionBar">false</item>
        <item name="android:windowNoTitle">true</item>**
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

隐藏标题和操作栏我做到了这一点:

在Manifest的活动标签中:

android:theme="@style/AppTheme.NoActionBar"

在setContentView之前的Activity.java中:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

//删除标题栏

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

//删除通知栏

this.getWindow()。setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

注意 :您需要在setContentView之前保留这些行





titlebar