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

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

В двух словах следующее следующее:

  • Я скрываю заголовок в AndroidManifest.xml
  • Укажите относительный макет для настраиваемого заголовка (workorder_list_titlebar.xml)

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

    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? Также, как только мне удастся получить эту работу, как я могу подключить слушателей к кнопке изображения, чтобы она что-то сделала?

Спасибо заранее.

Ответ 1

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

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

из моего theme.xml

Ответ 2

Создайте собственный стиль в папке "values". Убедитесь, что код указан ниже.

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

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

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

Ответ 3

Вместо изменения вашего 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

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

    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);
    }

Ответ 5

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

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

Ответ 6

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

Итак, мой код выглядел так.

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

Ответ 7

Попробуйте заменить следующие строки:

setContentView(R.layout.workorder_list);
this.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.workorder_list_titlebar);

Ответ 8

Я столкнулся с этой проблемой, и похоже, что это проблема с тем, какая тема применяется к активности в файле 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. Я не уверен, есть ли способ обойти это.

Ответ 9

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

Ответ 10

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

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

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

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

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

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

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

Ответ 11

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

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>