Попробуйте использовать Window.FEATURE_CUSTOM_TITLE, но получили исключение: вы не можете комбинировать пользовательские заголовки с другими функциями заголовков. - PullRequest
14 голосов
/ 22 апреля 2010

Я пытаюсь использовать пользовательский заголовок, чтобы добавить кнопку изображения в строку заголовка. Я получил много помощи от этого поста: android: добавить кнопку в заголовок приложения? , но не смог заставить его работать для моего ListActivity.

В двух словах, вот что у меня есть:

  1. Я прячу заголовок в AndroidManifest.xml
  2. Указание относительного макета для пользовательского заголовка (workorder_list_titlebar.xml)

  3. Мой класс активности выглядит следующим образом:

    public class WorkOrderListActivity extends ListActivity {
     String[] orders={"WO-12022009", "WO-12302009","WO-02122010", "02152010"};
     @Override
     public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);   
       requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
       this.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.workorder_list_titlebar);
       setContentView(R.layout.workorder_list);
       setListAdapter(new ArrayAdapter(this,R.layout.workorder_list, R.id.label,orders));    
            }
    }

Когда я запустил приложение, я получил AndroidRuntimeException: вы не можете комбинировать пользовательские заголовки с другими функциями заголовков.

Основываясь на трассировке стека, исключение было выдано com.android.internal.policy.impl.PhoneWindow.requestFeature (PhoneWindow.java:183), которое было вызвано вызовом setlistAdapter.

У кого-нибудь есть такая же проблема с ListActivity? Также, как только мне удастся получить эту работу, как мне прикрепить слушателей к кнопке с изображением, чтобы она что-то сделала?

Заранее спасибо.

Ответы [ 11 ]

19 голосов
/ 15 мая 2010

У меня была та же проблема, и я исправляю ее, удаляя

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

из моего theme.xml

10 голосов
/ 13 ноября 2011

Заставьте вас создать собственный стиль в папке «values». Убедитесь, что вы ввели код, как показано ниже.

<style name="CustomTheme" parent="android:Theme"> 

Не изменять родительский параметр.

Это сработало для меня.

5 голосов
/ 26 декабря 2011

Вместо изменения вашего theme.xml вы также можете:

создать новый файл стиля XML my_theme.xml в папке значений, например:

<style name="MyWindowTitleBackground">
    <item name="android:background">#444444</item>
</style>

<style name="MyTheme" parent="android:Theme">
    <item name="android:windowTitleBackgroundStyle">@style/MyWindowTitleBackground</item>
</style>

Вы можете определить другие настройки так, как вам нравится в этой теме.

Затем просто используйте эту тему в своем манифесте в атрибутах действия

 android:theme="@style/MyTheme" 

Наконец установите свой пользовательский заголовоккак всегда в вашей деятельности. java:

final Window window = getWindow();
boolean useTitleFeature = false;
// If the window has a container, then we are not free
// to request window features.
if (window.getContainer() == null) {
    useTitleFeature = window
        .requestFeature(Window.FEATURE_CUSTOM_TITLE);
}
setContentView(R.layout.screen_main);

if (useTitleFeature) {
    window.setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
        R.layout.custom_title);
    // Set up the custom title

    main_title = (TextView) findViewById(R.id.title_left_text);
    main_title.setText(R.string.app_name);
    main_title = (TextView) findViewById(R.id.title_right_text);
    main_title.setText(R.string.Main_titleInfo);

}

Не забудьте определить файл custom_title.xml в папке макета.Например ...

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_vertical" >

    <TextView
        android:id="@+id/title_left_text"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:ellipsize="end"
        android:singleLine="true" />

    <TextView
        android:id="@+id/title_right_text"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_centerInParent="true"
        android:ellipsize="end"
        android:singleLine="true"
        android:textColor="#fff" />

</RelativeLayout>
4 голосов
/ 15 августа 2011

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

    final Window window = getWindow();

    boolean useTitleFeature = false;
    // If the window has a container, then we are not free
    // to request window features.
    if(window.getContainer() == null) {
        useTitleFeature = window.requestFeature(Window.FEATURE_CUSTOM_TITLE);
    }

    setContentView(layoutId);

    if (useTitleFeature) {
        window.setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title);
    }
3 голосов
/ 29 ноября 2012

Я сделал точно так же, как Санни Дасари, но с одним небольшим изменением я поставил @ before и android в атрибут parent.

Итак, мой код выглядел следующим образом.

<style name="CustomTheme" parent="@android:Theme">
3 голосов
/ 08 октября 2010

Может быть, вы найдете эту проблему, когда используете ее на вкладке, поскольку там уже есть заголовок, и вы не можете снова добавить пользовательский заголовок.

Вы должны добавить этот пользовательский заголовок в упражнение, которое вы получаете на вкладке

0 голосов
/ 20 мая 2015

Чтобы избежать сбоев, вы можете просто добавить

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

к тегу <Activity> в вашем AndroidManifest.xml:

<activity
    android:name="test.TestActivity"
    android:label="@string/app_name"
    android:theme="@style/android:Theme">

Это потому, что стили, определенные по умолчаниюконфликт темы с FEATURE_CUSTOM_TITLE (например, атрибут android:windowNoTitle).Используя другую тему, вы можете избежать таких проблем.

Однако вам может потребоваться определить собственную тему для изменения других атрибутов, таких как android: windowTitleSize, цвет фона, цвет текста и шрифт и т. Д. Вв этом случае вы можете извлечь свою тему из существующей темы (например, Theme.Light) и изменить ее атрибуты:

<resources>
    <style name="CustomWindowTitleBackground">
        <item name="android:background">#323331</item>
    </style>

    <style name="CustomTheme" parent="@style/android:Theme.Light">
        <item name="android:windowNoTitle">false</item>
        <item name="android:windowTitleSize">60dip</item>
        <item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>
    </style>
</resources>
0 голосов
/ 20 февраля 2015

Как новичок большинство ответов не помогло мне в моем случае. Так вот мой ответ.

Перейдите в папку res / values ​​в вашем проекте android и проверьте наличие файла strings.xml (в вашем случае этот файл может отличаться, например от themes.xml)

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

что-то вроде ниже

<resources>
    <style name="SomeNameHere">
        <item name="android:windowNoTitle">true</item>
    </style>
</resources>

если у вас уже есть тег стиля, просто добавьте приведенный ниже код к тегу стиля

    <item name="android:windowNoTitle">true</item>
0 голосов
/ 02 декабря 2012

Так как я пытался скомпилировать свою программу в Android 4.0, я столкнулся с той же проблемой. Ни одно из этих решений не помогло. Итак, я скопировал содержимое стилей из файла values> styles.xml и вставил его в файл values-v11 styles.xml и values-v14 styles.xml. Бинго, трюк сработал.

0 голосов
/ 08 июня 2012

Я также столкнулся с этой проблемой, и похоже, что это проблема с тем, какая тема применяется к действию в файле AndroidManifest.xml.Если я использую тему вроде:

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

, тогда выдается ошибка

android.util.AndroidRuntimeException: You cannot combine custom titles with other title features

Однако, если я использую другую тему, например:

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

он не выдаст ошибку и впоследствии не завершится сбоем.Однако я пытаюсь использовать тему вроде Theme.Holo.Я не уверен, есть ли способ обойти это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...