액션 바 텍스트 색상


288

ActionBar의 텍스트 색상을 어떻게 변경할 수 있습니까? Holo Light 테마를 상속 받아 ActionBar의 배경을 변경할 수는 있지만 텍스트 색상을 변경하기 위해 조정할 속성이 무엇인지 알 수 없습니다.


좋아, android : textColorPrimary 속성으로 텍스트 색상을 변경할 수 있지만 ActionBar 버튼에서 오버플로가 발생하면 표시되는 드롭 다운 메뉴의 텍스트 색상도 변경됩니다. 그 드롭 다운 메뉴 / 목록의 색상을 변경하는 방법에 대한 아이디어가 있습니까?


방금 나를 위해 일한 해결책을 게시했습니다. 여기를 참조하십시오 stackoverflow.com/a/16175220/627827
spaceMonkey

답변:


447

더 나은 방법을 찾았습니다. 제목의 색상 만 변경할 수 있습니다. 자막을 조정할 수도 있습니다.

내 styles.xml은 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="MyTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/MyTheme.ActionBarStyle</item>
  </style>

  <style name="MyTheme.ActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
  </style>

  <style name="MyTheme.ActionBar.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textColor">@color/red</item>
  </style>
</resources>

32
이것이 올바른 방법입니다. 그러나 일관성을 유지하려면 Widget.Holo.Light.ActionBarfor 에서 상속해야합니다 MyTheme.ActionBarStyle.
Jake Wharton

7
빌드하지 않음-ADT는 v13 이상이 필요하다고 불평합니다. 따라서 대부분의 Android 핸드셋에서는 작동하지 않습니다 :()
Adam

8
@Adam 나는 같은 문제가 있었지만 다음 대답은 나를 위해 작동합니다-parent = "@ android : style / TextAppearance.Holo.Widget.ActionBar.Title"대신 parent = "@ android : style / TextAppearance"
bkurzius

8
Appcompat 라이브러리를 사용하는 경우 Holo를 AppCompat으로 바꾸십시오. 작동
sha

3
@LOG_TAG Widget.AppCompat.Light.ActionBar 사용
sha

97

ActionBar( Sherlock , CompatNative ) 의 모든 풍미와 잘 작동하는 방법을 찾았습니다 .

그냥 사용하는 HTML을 제목을 설정하고, 텍스트 색상을 지정할 수 있습니다. 예를 들어, ActionBar 텍스트 색상을 빨간색 으로 설정하려면 다음과 같이하십시오.

getActionBar()/* or getSupportActionBar() */.setTitle(Html.fromHtml("<font color=\"red\">" + getString(R.string.app_name) + "</font>"));

#FF0000단어 대신 빨간색 16 진수 코드 를 사용할 수도 있습니다 red. 이 문제가 발생하면 <font color = '#'> text </ font>에서 Android Html.fromHtml (String)이 작동하지 않음을 참조하십시오 .


또한 색상 리소스를 사용하려면이 코드를 사용하여 올바른 HEX 문자열을 가져오고 필요한 경우 알파를 제거하십시오 ( 글꼴 태그는 알파를 지원하지 않음).

int orange = getResources().getColor(R.color.orange);
String htmlColor = String.format(Locale.US, "#%06X", (0xFFFFFF & Color.argb(0, Color.red(orange), Color.green(orange), Color.blue(orange))));

메서드 Html.fromHtml ()에 문자열을 넣어야하고 메서드에 여러 매개 변수를 배치하기 때문에 오류가 발생합니다. ","를 "+"로 바꾸면 완벽하게 작동합니다 :-).
pinyin_samu

3
수십 년 동안 검색 한 후에 이것이 가장 쉬운 솔루션입니다! 잘 했어!
bmkay December

2
@MSI, 당신은 대체도 16 진수 값을 사용할 수 있습니다 red" + color + ".
Phil

1
@ MSI, 이 게시물이 제안하는 것을 시도해 볼 수 있습니까 (또한 내 질문을 업데이트했습니다)? 그냥 교체 #FF0000와 함께 "+color+".
Phil

1
고마워 Phil. 완벽하게 작동합니다! 나는 이런 식으로 시도했다 : getSupportActionBar (). setTitle (Html.fromHtml ( "<font color = '"+ color + "'>"+ "Home"+ "</ font>")); \ 대신 '를 사용해야합니다.
MSIslam

93

나는 당신과 같은 문제를 겪었습니다. Holo.Light 테마이지만 ActionBar 색상의 스타일을 지정하고 싶었으므로 텍스트 색상뿐만 아니라 제목과 메뉴도 변경해야했습니다. 결국 나는 git hub에 가서 올바른 스타일을 찾을 때까지 소스 코드를 보았습니다.

<?xml version="1.0" encoding="utf-8"?>
<!-- For honeycomb and up -->
<resources>

    <style name="myTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/myTheme.ActionBar</item>
        <item name="android:actionMenuTextColor">@color/actionBarText</item>
    </style>

    <style name="myTheme.ActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">@drawable/actionbarbground</item>
        <item name="android:titleTextStyle">@style/myTheme.ActionBar.Text</item>
    </style>

    <style name="myTheme.ActionBar.Text" parent="@android:style/TextAppearance">
        <item name="android:textColor">@color/actionBarText</item>
    </style>

</resources>

이제 당신이해야 할 일은 무엇이든 설정 @color/actionBarText하고 @drawable/actionbarbground원하는 것입니다!


이 XML을 어디에서 사용해야합니까? 값 또는 값 -v11 또는 값 v-14 ??
DroidLearner 2016 년

대답은 2012 년 2 월에 왔으며 당시 V14는 없었습니다. V11은 확실합니다.
Budius

3.0 이하에서는 시스템에 actionBar가 없습니다.
Budius

Action Bar Sherlock을 사용하고 있으며 해결책을 찾았습니다. 감사합니다 :)
DroidLearner 2016 년

3
작업 표시 줄 셜록의 경우 작업 표시 줄 특정 이름을 사용해야 하며이 생성기를 사용할 수 있습니다 : jgilfelt.github.com/android-actionbarstylegenerator 우리는 항상 내가 일하는 곳에서 사용합니다. 매우 좋습니다
Budius

67

ActionBar ID는 직접 사용할 수 없으므로 여기에서 약간의 해킹을 수행해야합니다.

int actionBarTitleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "android");
if (actionBarTitleId > 0) {
    TextView title = (TextView) findViewById(actionBarTitleId);
    if (title != null) {
        title.setTextColor(Color.RED);
    }
}

1
NullPointerException이 줄에actionBarTextView.setTextColor(Color.RED);
DroidLearner

3
API 레벨 <11, ActionBarSherlock을 실행 중이고에 대한 고가의 호출을 저장 하려는 경우 먼저 getIndentifier()살펴볼 수 있습니다 (TextView) findViewById(com.actionbarsherlock.R.id.abs__action_bar_title);(널이 아닌지 확인하십시오).
Andre

실제로 내 경우에는 ActionBar ID를 직접 사용할 수 없습니다 Toolbar toolbar = findViewById(R.id.toolbar);. XML 레이아웃 파일에서 com.google.android.material.appbar.AppBarLayout요소 로 둘러싸인 위치 와 같이 툴바에 쉽게 액세스 할 수 있습니다.toolbar.setTitleTextColor( getResources().getColor( R.color.colorViolet ) );
YoussefDir

32

그것은 오래된 주제이지만 미래의 독자들을 위해 ToolBar를 사용하면 모든 것이 매우 쉽습니다.

Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
toolbar.setTitle(R.string.app_name);
toolbar.setTitleTextColor(getResources().getColor(R.color.someColor));
setSupportActionBar(toolbar);


28

작업 표시 줄의 루트에 추가하십시오. 나는이 문제가 있었다.

<style name="ActionBar" parent="@style/Theme.AppCompat.Light">
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <item name="actionMenuTextColor">@color/stdDarkBlueText</item>
</style>

<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
    <item name="titleTextStyle">@style/ActionBarTitleText</item>
    <item name="subtitleTextStyle">@style/ActionBarSubTitleText</item>
</style>

<style name="ActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">@color/stdDarkBlueText</item>
    <item name="android:textSize">12sp</item>
</style>

<style name="ActionBarSubTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle">
    <item name="android:textColor">@color/stdDarkBlueText</item>
    <item name="android:textSize">12sp</item>
</style>

actionMenuTextColor- 작업 표시 줄 텍스트의 텍스트 색상을 변경합니다. actionMenuTextColor 는의 일부 일 때 작동하지 않았 Widget.Styled.ActionBar으므로 루트에 추가해야했습니다. 다른 2 개의 속성은 작업 표시 줄의 제목과 자막을 변경합니다.


"actionMenuTextColor"대신 "android : actionMenuTextColor"를 사용하십시오. :)
AnkitRox

20

SDK v21 +의 재질 테마에서 작업 표시 줄에 HTML 문자열을 설정해도 작동하지 않습니다

변경하려면 style.xml에서 기본 텍스트 색상을 설정해야합니다.

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="android:Theme.Material.Light">
        <!-- Customize your theme here. -->
        <item name="android:textColorPrimary">@color/actionbar-text-color</item>
    </style>
</resources>    

1
응용 프로그램의 모든 곳에서 기본 텍스트 색상이 변경됩니다!
Mohammed

16

가장 간단한 방법은 styles.xml에서이 작업을 수행하는 것입니다.

Google의 템플릿 styles.xml은 현재 다음을 생성합니다.

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

그림과 같이 닫는 태그 앞에 한 줄을 더 추가하면 텍스트 색상이 Dark ActionBar의 색상으로 변경됩니다.

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="actionBarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>

색상을 다른 것으로 사용자 정의하려면 colors.xml에 자신의 색상을 지정하거나 android : textColorPrimary 속성을 사용하여 Android에서 내장 색상을 사용할 수도 있습니다.

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="actionBarTheme">@style/AppTheme.AppBarOverlay</item>
</style>


<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:textColorPrimary">@android:color/darker_gray</item>
</style>

참고 : 이렇게하면 제목의 색상과 ActionBar에 표시되는 모든 메뉴 항목의 제목이 변경됩니다.


12

자막 스타일을 지정하려면 사용자 정의 스타일로 자막을 추가하십시오.

<item name="android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>

AppCompat라이브러리에 대해 동일한 결과를 얻으려는 사람들 은 이것이 내가 사용한 것입니다.

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomActivityTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
        <item name="android:actionBarStyle">@style/MyActionBar</item>
        <item name="actionBarStyle">@style/MyActionBar</item>
        <!-- other activity and action bar styles here -->
    </style>

    <!-- style for the action bar backgrounds -->
    <style name="MyActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:background">@drawable/actionbar_background</item>
        <item name="background">@drawable/actionbar_background</item>
        <item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
        <item name="android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
        <item name="titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
        <item name="subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
     </style>
    <style name="MyTheme.ActionBar.TitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
        <item name="android:textColor">@color/color_title</item>
      </style>
</resources>

밝은 테마, 어두운 작업 표시 줄 및 흰색 텍스트를 사용하려고합니다. 코드는 지금까지 내가 찾은 유일한 영향을 미치지 만 전체 작업 표시 줄을 흰색으로 바꿉니다. 어떤 일이 벌어 질지 아십니까? 예, 나는 이것이 1 년 반이라는 것을 알고 있습니다. :-)
nasch

이것은 내 문제를 해결하는 데 도움이되었습니다. appcompat 지원 라이브러리를 사용 <item name="android:titleTextStyle"> 하고 <item name="titleTextStyle"> 있었기 때문에 둘 다 추가해야했습니다 .
Rock Lee

제목 disapear
jairhumberto

8

API> = 21에서 자체 레이아웃을 만들지 않고도 멋지게 할 수있는 방법을 찾았습니다.

작업 표시 줄 내에서 텍스트 색상을 지정하고 드로어 블을 제어합니다.

누군가에게 도움이되기를 바랍니다.

<!--Material design primary colors-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
    <item name="android:navigationBarColor">@color/primary_dark</item>
    <item name="actionBarTheme">@style/AppBaseTheme.Toolbar</item>
</style>

<!--Action bar-->
<style name="AppBaseTheme.Toolbar" parent="Widget.AppCompat.ActionBar.Solid">
    <item name="android:textColorPrimary">@color/action_bar_text</item>
    <item name="colorControlNormal">@color/action_bar_text</item>
</style>

7

많은 답변이 더 이상 사용되지 않으므로 스레드를 업데이트하고 ActionBar (도구 모음) 및 ActionBar 팝업 메뉴에서 텍스트 색상 및 배경색을 변경하는 방법을 보여 드리겠습니다.

Action bar (Toolbar)로 작업 할 때 Android (2018 년 5 월 현재)의 최신 접근법은 NoActionBar와 함께 Theme를 사용하고 대신 Toolbar를 사용하는 것입니다.

그래서 여기에 필요한 것이 있습니다 :

  1. 활동 (AppCompatActivity를 확장)에서 툴바를 선언하십시오.

    Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(myToolbar);
  2. 활동의 레이아웃 xml에 툴바를 추가하십시오. 여기에서 우리는 우리의 정의 (덮어 테마), 메모를 설정합니다 android:theme="@style/ThemeOverlay.AppTheme.ActionBar"그리고 app:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu"그들이 트릭을 할 것입니다.

    <android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:theme="@style/ThemeOverlay.AppTheme.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu"
    app:layout_constraintTop_toTopOf="parent" />
  3. styles.xml에서이 두 스타일을 덮어 써서 사용자 정의 색상을 설정해야합니다.

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="actionBarTheme">@style/ThemeOverlay.AppTheme.ActionBar</item>
    <item name="actionBarPopupTheme">@style/ThemeOverlay.AppTheme.PopupMenu</item>
    </style>
    
    <style name="ThemeOverlay.AppTheme.ActionBar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:textColorPrimary">@color/action_bar_text_color</item>
    <item name="android:background">@color/action_bar_bg_color</item>
    </style>
    
    <style name="ThemeOverlay.AppTheme.PopupMenu" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:background">@color/popup_bg_color</item>
    <item name="android:textColorPrimary">@color/popup_text_color</item>
    </style>

그게 다야

ps 당신이 나에게 묻는다면 나는 말할 것입니다 : 예,이 전체 테마는 엉망입니다.


5

이것은 모든 답변을 확인한 후 사용한 솔루션입니다.

<!-- Base application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorAccent">@color/Button_color</item>
    <item name="android:editTextStyle">@style/EditTextStyle</item>
    <item name="android:typeface">monospace</item>
    <item name="android:windowActionBar">true</item>
    <item name="colorPrimary">@color/Title_Bar_Color</item>
    <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>

</style>

<style name="EditTextStyle" parent="Widget.AppCompat.EditText"/>

<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
    <item name="titleTextStyle">@style/ActionBarTitleText</item>
    <item name="android:background">@color/Title_Bar_Color</item>
    <item name="background">@color/Title_Bar_Color</item>
    <item name="subtitleTextStyle">@style/ActionBarSubTitleText</item>
</style>

<style name="ActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">@color/solid_white</item>
    <item name="android:textSize">12sp</item>
</style>

<style name="ActionBarSubTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle">
    <item name="android:textColor">@color/solid_white</item>
    <item name="android:textSize">12sp</item>
</style>

필요한 색상을 변경하십시오.


4

이 기능은 잘 작동합니다

private void setActionbarTextColor(ActionBar actBar, int color) {

    String title = actBar.getTitle().toString();
    Spannable spannablerTitle = new SpannableString(title);
    spannablerTitle.setSpan(new ForegroundColorSpan(color), 0, spannablerTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    actBar.setTitle(spannablerTitle);

}

그런 다음 사용하려면 작업 표시 줄과 새로운 색상을 공급하십시오.

ActionBar actionBar = getActionBar();    // Or getSupportActionBar() if using appCompat
int red = Color.RED
setActionbarTextColor(actionBar, red);

4

활동의 onCreate에 이것을 추가하십시오. 거의 모든 Android 버전에서 작동합니다.

 actionBar.setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));  

또는

getSupportActionBar().setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));

다음과 같은 문자열을 입력해야합니다. String coloredTitle = "<font color = '# FFFFFF'>"+ Your_Title + "</ font>"; Html.fromHtml (coloredTitle);
Tincho825

2

낮은 버전의 API에서 많은 방법을 시도해보십시오. 유용한 방법은 <item name="actionMenuTextColor">@color/your_color</item>안드로이드 네임 스페이스를 사용하지 마십시오.

추신:

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="actionMenuTextColor">@color/actionMenuTextColor</item>
</style>

1

이 스타일을 당신의 스타일에 넣으십시오.

<item name="android:textColorPrimary">@color/yourcolor</item>



0

여기에 안드로이드 API로 갈 때 권장되는 솔루션은 아니지만 내 응용 프로그램에서 여기에 불가능한 xml 조건에서 테마를 역동적으로 변경해야 하므로이 작업을 수행해야합니다. 그러나이 솔루션은 매우 훌륭하게 작동합니다.

해결책:--

 /**
 * 
 * @author Kailash Dabhi
 * @email kailash09dabhi@gmail.com
 *
 */ 
 public static void setActionbarTextColor(Activity activity, int color) {
    Field mActionViewField;
    try {
        mActionViewField = activity.getActionBar().getClass()
                .getDeclaredField("mActionView");
        mActionViewField.setAccessible(true);
        Object mActionViewObj = mActionViewField.get(activity
                .getActionBar());

        Field mTitleViewField = mActionViewObj.getClass().getDeclaredField(
                "mTitleView");
        mTitleViewField.setAccessible(true);
        Object mTitleViewObj = mTitleViewField.get(mActionViewObj);

        TextView mActionBarTitle = (TextView) mTitleViewObj;
        mActionBarTitle.setTextColor(color);
        // Log.i("field", mActionViewObj.getClass().getName());
    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    }

}

0

Android 5 (롤리팝)의 ​​경우 android : actionBarPopupTheme 를 사용 하여 오버플로 메뉴 의 textColor 를 설정해야 합니다.


0

가장 간단한 방법은
다음과 같습니다. 이 두 줄을 styles.xml 파일에 추가하십시오.

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="android:textColorSecondary">@color/white</item>
<item name="android:textColor">@color/white</item>
</style>

색상을 색상으로 바꾸십시오.


-1

파일 에서 직접 html <font>속성 을 사용하여 텍스트의 색상을 변경할 수 있습니다 xml. 예를 들어 strings.xml:

<resources>
    <string name = "app_name">
        <html><font color="#001aff">Multi</font></html>
        <html><font color="#ff0044">color</font></html>
        <html><font color="#e9c309">Text </font></html>
    </string>
</resources>

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.