Ответ 1
У меня была такая же проблема, и я исправил ее удаление
<item name="android:windowNoTitle">true</item>
из моего theme.xml
Я пытаюсь использовать пользовательское название, чтобы включить кнопку изображения в строку заголовка. Я получил большую помощь в этом сообщении: андроид: добавлена кнопка к названию приложения?, но не удалось заставить ее работать для моей ListActivity.
В двух словах следующее следующее:
Укажите относительный макет для настраиваемого заголовка (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? Также, как только мне удастся получить эту работу, как я могу подключить слушателей к кнопке изображения, чтобы она что-то сделала?
Спасибо заранее.
У меня была такая же проблема, и я исправил ее удаление
<item name="android:windowNoTitle">true</item>
из моего theme.xml
Создайте собственный стиль в папке "values". Убедитесь, что код указан ниже.
<style name="CustomTheme" parent="android:Theme">
Не изменяйте родительский параметр.
Это работало для меня.
Вместо изменения вашего 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>
Я думаю, что 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);
}
Может быть, вы обнаружите эту проблему, когда используете ее во вкладке, поскольку там уже есть заголовок, и вы не можете добавить пользовательский заголовок еще раз.
вы должны добавить этот пользовательский заголовок в действие, которое вы получаете в Tab
Я сделал точно так же, как Sunny Dasari, но с одним небольшим изменением я поставил @before и android в родительский атрибут.
Итак, мой код выглядел так.
<style name="CustomTheme" parent="@android:Theme">
Попробуйте заменить следующие строки:
setContentView(R.layout.workorder_list);
this.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.workorder_list_titlebar);
Я столкнулся с этой проблемой, и похоже, что это проблема с тем, какая тема применяется к активности в файле 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
. Я не уверен, есть ли способ обойти это.
Так как я пытался скомпилировать свою программу в android 4.0, у меня возникла такая же проблема. Ни одно из этих решений не помогло. Итак, я скопировал содержимое стиля из значений > styles.xml и вставил его в файл-styles-v11 styles.xml file и values-v14 styles.xml. Бинго, трюк работал.
Как новичок, большинство ответов не помогло мне в моем случае. Итак, вот мой ответ.
Перейдите в папку 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>
Чтобы избежать сбоев, вы можете просто добавить
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>