10 ответов:
этой thread вы начнете с создания собственной строки заголовка в xml-файле и использования ее в своей деятельности
Edit
вот краткое изложение содержания ссылки выше-это просто чтобы установить цвет текста и фона строки заголовка - без изменения размера, без кнопок, просто самый простой образец
res / layout / mytitle.xml - это вид, который будет представляйте строку заголовка
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/myTitle" android:text="This is my new title" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="@color/titletextcolor" />res / значения / темы.xml - мы хотим сохранить тему android по умолчанию и просто нужно изменить цвет фона фона заголовка. Поэтому мы создаем тему, которая наследует тему по умолчанию, и устанавливаем стиль фона в наш собственный стиль.
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="customTheme" parent="android:Theme"> <item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item> </style> </resources>res / values / styles.xml - здесь мы устанавливаем тему, чтобы использовать цвет, который мы хотим для названия фон
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="WindowTitleBackground"> <item name="android:background">@color/titlebackgroundcolor</item> </style> </resources>res / значения / цвета.xml - установить цвет вы хотите
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="titlebackgroundcolor">#3232CD</color> <color name="titletextcolor">#FFFF00</color> </resources>на AndroidMANIFEST.xml, установите атрибут темы либо в приложении (для всего приложения), либо в тегах activity (только эта активность)
<activity android:name=".CustomTitleBar" android:theme="@style/customTheme" ...из действия (называемого CustomTitleBar):
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.main); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.mytitle); }
Спасибо за это четкое объяснение, однако я хотел бы добавить немного больше к вашему ответу, задав связанный вопрос (на самом деле не хочу делать новый пост, так как это подвал на мой вопрос).
Я объявляю свой заголовок в суперклассе, из которого все мои другие действия являются детьми, чтобы изменить цвет бара только один раз. Я хотел бы также добавить значок и изменить текст в строке. Я сделал некоторые испытания, и мне удалось изменить либо один, либо другие, но не оба одновременно (используя setFeatureDrawable и setTitle). Идеальным решением было бы, конечно, следовать объяснению в потоке, приведенном в ссылке, но поскольку я объявляю в суперклассе, у меня есть проблема из-за макета в setContentView и R. id.myCustomBar, потому что, если я хорошо помню, я могу вызвать setContentView только один раз...
EDIT Нашел мой ответ:
для тех, кто, как и я, любит работать с суперклассами, потому что это отлично подходит для получения меню, доступного везде в приложении, он работает одинаково здесь.
просто добавьте это в свой суперкласс:
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.customtitlebar); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitlebar); customTitleText = (TextView) findViewById(R.id.customtitlebar);(вы должны объявить textview как защищенную переменную класса)
и тогда сила этого заключается в том, что везде в вашем приложении (если, например, все ваши действия являются детьми этого класса), вам просто нужно позвонить
customTitleText.setText("Whatever you want in title");и ваш заголовок будет отредактирован.
XML, связанный в моем случае (Р. макета.customtitlebar):
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/background"> <ImageView android:layout_width="25px" android:layout_height="25px" android:src="@drawable/icontitlebar"></ImageView> <TextView android:id="@+id/customtitlebar" android:layout_width="wrap_content" android:layout_height="fill_parent" android:text="" android:textColor="@color/textcolor" android:textStyle="bold" android:background="@color/background" android:padding="3px" /> </LinearLayout>
есть еще один способ изменить цвет фона, однако это хак и может потерпеть неудачу на будущих версиях Android, если иерархия представления окна и его название изменяется. Тем не менее, код не будет сбой, просто пропустить установку нужного цвета, в таком случае.
в вашей деятельности, как onCreate, сделать:
View titleView = getWindow().findViewById(android.R.id.title); if (titleView != null) { ViewParent parent = titleView.getParent(); if (parent != null && (parent instanceof View)) { View parentView = (View)parent; parentView.setBackgroundColor(Color.rgb(0x88, 0x33, 0x33)); } }
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); View titleView = getWindow().findViewById(android.R.id.title); if (titleView != null) { ViewParent parent = titleView.getParent(); if (parent != null && (parent instanceof View)) { View parentView = (View)parent; parentView.setBackgroundColor(Color.RED); } }на код выше, вы можете попробовать вы можете использовать title вместо заголовок это повлияет на всю активность в вашем приложении
этот код помогает изменить фон строки заголовка программно в Android. Измените цвет на любой цвет, который вы хотите.
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1c2833"))); }
полагаю, нет. Вы можете создать Безымянное действие и создать свою собственную строку заголовка в макете действия.
Регистрация этой, строка 63 и ниже:
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1)устанавливает customview вместо представления заголовка по умолчанию.
взгляните в
platforms/android-2.1/data/res/layout/screen.xmlиз SDK. Кажется, это определяет название там. Вы можете часто просматривать макеты, как это и заимствоватьstyle="?android:attr/windowTitleStyle"стили, которые затем можно использовать и переопределять в собственных текстовых представлениях.вы можете даже выбрать название для прямой настройки, выполнив:
TextView title = (TextView)findViewById(android.R.id.title);
попробуйте с помощью следующего кода
View titleView = getWindow().findViewById(android.R.id.title); if (titleView != null) { ViewParent parent = titleView.getParent(); if (parent != null && (parent instanceof View)) { View parentView = (View)parent; parentView.setBackgroundColor(Color.RED); } }также используйте эту ссылку его очень полезно:http://nathanael.hevenet.com/android-dev-changing-the-title-bar-background/
существует более простая альтернатива для изменения цвета строки заголовка, используя библиотеку поддержки V7 appcompat, предоставленную Google.
см. эту ссылку о том, как настроить эту библиотеку поддержки:https://developer.android.com/tools/support-library/setup.html
после того, как вы это сделали, достаточно добавить следующие строки к вашим res/значениям/стилям.xml-файл:
<style name="AppTheme" parent="AppBaseTheme"> <item name="android:actionBarStyle">@style/ActionBar</item> </style> <!-- Actionbar Theme --> <style name="ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse"> <item name="android:background">@color/titlebackgroundcolor</item> </style>(предполагая, что "titlebackgroundcolor" определяется в вашем в res/значений/цвета.xml, например:
<color name="titlebackgroundcolor">#0000AA</color>)
Кажется, что все стало лучше / проще с Android 5.0 (уровень API 21).
Я думаю, что то, что вы ищете что-то вроде этого:
<style name="AppTheme" parent="AppBaseTheme"> <!-- Top-top notification/status bar color: --> <!--<item name="colorPrimaryDark">#000000</item>--> <!-- App bar color: --> <item name="colorPrimary">#0000FF</item> </style>посмотреть ЗДЕСЬ Для справки:
https://developer.android.com/training/material/theme.html#ColorPalette
Comments