Android: Пользовательская панель заголовка

У меня есть пользовательская строка заголовка

 requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
 setContentView(R.layout.activities);
 getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title);

Который работает в принципе нормально. Проблема в том, что до тех пор, пока приведенный выше код не вызывается, отображается строка заголовка по умолчанию. Мне вообще не нужна строка заголовка, другими словами, до того, как появится моя, заголовок не появится.

Добавление этого в манифест:

<application android:theme="@android:style/Theme.NoTitleBar">

приводит к закрытию силы. Мой манифест выглядит так

<application android:icon="@drawable/icon" android:label="@string/app_name"
    android:theme="@style/My_Theme">

Где мне нужна my_Theme, так как она устанавливает цвет фона, установка цвета фона в моей теме клиента приводит к серой области вокруг моего цветного фона. Поэтому даже без принудительного закрытия я не уверен, поможет ли название без названия.

Любая идея?

Ответ 1

У меня была такая же проблема, как и вы.

Проблема заключается в том, что у вас есть в вашем стиле.

Попробуйте следующее:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="My_Theme">
        <item name="android:windowTitleSize">35dp</item>
        <item name="android:windowTitleBackgroundStyle">@android:color/black</item>
    </style>
</resources>

Ответ 2

Этот для меня единственный, который предотвращает название по умолчанию перед началом моего пользовательского заголовка:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <style name="CustomWindowTitleStyle">
        <item name="android:textColor">@android:color/transparent</item>
    </style>

    <style name="CustomTheme" parent="@android:style/Theme.Holo">
        <item name="android:windowActionBar">false</item>
        <item name="android:windowTitleBackgroundStyle">@android:color/transparent</item>
        <item name="android:windowTitleSize">50dp</item>
        <item name="android:windowTitleStyle">@style/CustomWindowTitleStyle</item>
    </style>

</resources>

Ответ 3

вы также должны проверить, поддерживается ли customTitle или нет.

Boolean customTitleSupported = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);



if (customTitleSupported) {
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.custom_title);

}

Ответ 4

Во-первых, почему вы используете настраиваемую строку заголовка, если в вашем приложении есть NoTitleBar? Это глупо!

Излишне говорить, что это ваша проблема, и вы должны удалить этот флаг.

В любом случае, лучший способ добавить пользовательскую строку заголовка - только в xml. Это позволяет избежать двойной загрузки заголовка вашего приложения; какие пользователи увидят.

../res/styles.xml

<resources>

   <style name="AppTheme parent="@style/android:Theme.Light">
      <item name="android:windowNoTitle">false</item>
      <item name="android:windowTitleSize">30dp</item
      <item name="android:windowTitleStyle">@layout/custom_title</item>
   </style>

</resources>

Тогда вам не нужен этот код о requestAnything.

Ответ 5

Ваше приложение выходит из строя, потому что в вашем коде вы вызываете панель заголовка из оконных функций, а в другой - отключите его через манифест. В основном вы не можете этого сделать, его логически неверно. Вам нужно изменить строку заголовка, чтобы не удалять его.