제목 배경색 설정


106

내 안드로이드 응용 프로그램에서 표준 / 기본 제목 표시 줄의 색상을 변경하고 싶습니다.

가지고있는 텍스트 색상을 변경하려면 setTitleColor(int color)바의 배경색을 변경하는 방법이 있습니까?


배경색을 제목 표시 줄로 변경하기 위해 사용자 지정 제목을 사용할 필요가 없다고 생각합니다. 이 게시물을 확인하십시오
— Deepthi Jabili

나는 오래된 받아 들여진 것 대신 Edwinfad의 대답을 볼 것입니다.
— zgc7009

답변:


186

이 스레드 는 xml 파일에 고유 한 제목 표시 줄을 작성하고이를 활동에 사용하는 방법을 시작합니다.

편집하다

이것은 - 다음은 위의 링크의 내용에 대한 간략한 요약입니다 단지 크기가 조정없이 버튼, 바로 simpliest 샘플 - 텍스트의 색상과 제목 표시 줄의 배경을 설정할 수는

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 / values ​​/ themes.xml- 기본 안드로이드 테마를 유지하고 제목 배경의 배경색 만 변경하면됩니다. 따라서 기본 테마를 상속하는 테마를 만들고 배경 스타일을 자체 스타일로 설정합니다.

<?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 / values ​​/ colors.xml- 여기에서 원하는 색상 설정

<?xml version="1.0" encoding="utf-8"?>
<resources>   
    <color name="titlebackgroundcolor">#3232CD</color>
    <color name="titletextcolor">#FFFF00</color>
</resources>

에서 의 AndroidManifest.xml (만이 활동) 태그 (전체 응용 프로그램) 응용 프로그램 또는 활동 중 하나 테마 속성을 설정

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

}

9
대부분의 경우 링크를 제공하는 것은 매우 저렴하며 stackoverflow에서는 대답을 좋아하지 않습니다. 이 페이지에 대한 링크에서 지식을 얻으십시오. 커뮤니티에서 점점 더 많은 지식을 얻을 수 있으며 링크가 다운 되더라도 다른 사람들을 방향으로 안내 할 수있는 몇 가지 검색어를 제공합니다.
— Janusz

7
@Janusz : 당신이 완전히 옳습니다-그래서 사람들이 위 링크의 스레드를 읽는 대신 시작할 수 있도록 가장 간단한 샘플로 게시물을 업데이트했습니다
— ccheneson

3
Android 스타일을 덮어 쓴 후 배경색 만 변경하려는 경우 코드에서 사용자 지정 제목을 추가 할 필요가 없습니다
— Janusz

1
Janusz가 말했듯이 새 뷰를 추가하지 않고 사용 된 스타일 만 재정의하려는 경우에는 사용자 정의 뷰가 필요하지 않습니다. 이 경우 FEATURE_CUSTOM_STYLE을 요청할 필요도 없습니다. 마지막으로 애플리케이션 수준에서 스타일을 정의하여 모든 활동에 한 번에 적용 할 수 있습니다. 그건 그렇고, 코드 감사합니다.
— Eric Kok

2
이것은 제목의 배경색을 변경하지 않고 텍스트 색상 만 변경됩니다. 제목 표시 줄 <color name = "titlebackgroundcolor"> # 3232CD </ color>의 색상을 변경하더라도. 내가 뭘 잘못하고 있니?
— Shaista Naaz 2011

18

이 명확한 설명에 감사드립니다. 그러나 연결된 질문을 통해 답변에 조금 더 추가하고 싶습니다 (이 질문은 내 질문의 지하실이므로 새 게시물을 작성하고 싶지 않습니다).

다른 모든 활동이 자식 인 Superclass에서 제목 표시 줄을 선언하고 있으므로 막대의 색상을 한 번만 변경해야합니다. 아이콘을 추가하고 바의 텍스트도 변경하고 싶습니다. 몇 가지 테스트를 수행하고 둘 중 하나를 변경했지만 동시에 둘 다 변경하지는 못했습니다 (setFeatureDrawable 및 setTitle 사용). 이상적인 솔루션은 물론 링크에 제공된 스레드의 설명을 따르는 것이지만 수퍼 클래스에서 선언함에 따라 setContentView 및 R.id.myCustomBar의 레이아웃으로 인해 문제가 있습니다. setContentView를 한 번만 호출 할 수 있다는 것을 기억하십시오.

수정 내 대답을 찾았습니다.

나처럼 앱의 모든 곳에서 메뉴를 사용할 수 있기 때문에 슈퍼 클래스로 작업하는 것을 좋아하는 사람들에게는 여기서도 동일하게 작동합니다.

수퍼 클래스에 다음을 추가하십시오.

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    setContentView(R.layout.customtitlebar);
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitlebar);
    customTitleText = (TextView) findViewById(R.id.customtitlebar);

(텍스트 뷰를 보호 된 클래스 변수로 선언해야합니다)

그리고 이것의 힘은 앱의 모든 곳에서 (예를 들어 모든 활동이이 클래스의 하위 인 경우) 호출해야한다는 것입니다.

customTitleText.setText("Whatever you want in title");

제목 표시 줄이 편집됩니다.

내 경우에 연결된 XML은 (R.layout.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>

왜 제가 투표를하지 않습니까? 내 코드에 무슨 문제가 있습니까? 그것은 ... 나를 위해 완벽하게 작동
— Sephy

1
초보자이기 때문에 위의 코드가 좋은 설명과 함께 멋진 코드라고 생각합니다. 당신을 위해 +1 !!!
— RK

@Sephy 제목 표시 줄에 대해 다른 클래스를 만들어야 만 사용할 수 있습니까?
— Vikas Gupta


11

배경색을 변경하는 또 다른 방법이 있지만 이는 해킹이며 Window의 View 계층 구조와 제목이 변경되면 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));
  }
}

아주 좋고 간단합니다. 그러나 나는 이것이 약간 지연되기 때문에 이것이 코드에서 그것을하고 있다는 것을 당신에게 묻고 싶습니다. 이러한 상황을 피하기 위해 모든 것을 xml에 작성하고 코드에는 아무것도 작성하지 않아야합니다. 저를 안내해 주시겠습니까?
— Shaista Naaz 2011

위에서 선택한 답변에 해결책이 있다고 생각합니다. 활동에 대한 사용자 정의 테마를 정의하고 android : windowTitleBackgroundStyle을 원하는 색상으로 설정해야합니다.
— mikeplate apr

7

이 코드는 Android에서 프로그래밍 방식으로 제목 표시 줄의 배경을 변경하는 데 도움이됩니다. 색상을 원하는 색상으로 변경하십시오.

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1c2833")));

}

이것은 API 11 (3.0 Honeycomb)에서 도입되었으며이 시점에서 유효한 옵션으로 간주하기에 충분히 구식입니다.
— zgc7009 2016

그러나 더 이상 사용되지 않는 정보를 얻지 않고 targetSdkVersion = "23"이있는 모든 최근 응용 프로그램에서 계속 사용하고 있습니다.
— Edwinfad

당연히 이것을 사용하는 것은 100 % 괜찮습니다. 아무것도 대체되지 않았지만 API 11 이전에 사용하는 것은 피해야합니다 (최소한의 사람들이 할 것입니다). 적어도 호환성 라이브러리 없이는 피해야합니다.
— zgc7009

유명한. @ zgc7009
— Edwinfad 2011

1
AppCompatActivity를 사용하는 경우 대신 getSupportActionBar ()를 사용하십시오.
— mondlos

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

위의 코드 에서 제목 표시 줄 대신 제목을 사용해 볼 수 있습니다. 이것은 애플리케이션의 모든 활동에 영향을 미칩니다.


2

나는 그렇지 않다고 생각한다. 제목없는 활동을 만들고 활동 레이아웃에 자신의 제목 표시 줄을 만들 수 있습니다.

이 , 라인 63 이하를 확인하십시오 .

getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1)

기본 제목보기 대신 customview를 설정합니다.


사용자 지정 / 자신의 제목 표시 줄은 어떻게 / 어디에서 만들 수 있습니까?
— Thizzer

2

platforms/android-2.1/data/res/layout/screen.xmlSDK를 살펴보십시오 . 거기에 제목을 정의하는 것 같습니다. 이와 같은 레이아웃을 자주 검토하고 style="?android:attr/windowTitleStyle" 스타일을 빌려 자신의 TextView에서 사용하고 재정의 할 수 있습니다.

다음을 수행하여 직접 조정할 제목을 선택할 수도 있습니다.

TextView title = (TextView)findViewById(android.R.id.title);

1
위의 좋은 대답이지만 사용자 지정 레이아웃을 만들지 않고도 제목 표시 줄에 색상을 지정할 수 있습니까?
— Eno

2

다음 코드로 시도하십시오

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/


Lollipop에서도 여전히 작동합니까? titleView는 나를 위해 null을 반환하는 것 같습니다.
— WORMSS

1

Google에서 제공하는 v7 appcompat 지원 라이브러리를 사용하여 제목 표시 줄의 색상을 변경하는 더 쉬운 대안이 있습니다.

이 지원 라이브러리를 설정하는 방법은 다음 링크를 참조하십시오. https://developer.android.com/tools/support-library/setup.html

이 작업을 마치면 res / values ​​/ styles.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 / values ​​/ colors.xml에 정의되어 있다고 가정합니다. 예 :

<color name="titlebackgroundcolor">#0000AA</color>

)


Android 5 만 타겟팅 하는 경우 더 간단한 대안이 있습니다. [ developer.android.com/training/material/…을 참조하세요 .
— stefan.m 2014 년

1

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


1

"res"-> "values"-> "colors.xml"에서 스타일 색상 값을 변경하여이 작업을 수행했습니다. 여기에 이미지 설명 입력

이것은 나에게 괜찮은 전체 프로젝트의 색상을 변경합니다.

여기에 이미지 설명 입력


0

당신은 그것을 사용할 수 있습니다.

  toolbar.setTitleTextColor(getResources().getColor(R.color.white));

0

setContentView 또는 onCreate에이 코드를 붙여 넣으십시오.

색상 코드가 있으면 이것을 사용하십시오.

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#408ed4")));

색상 라이브러리의 특정 코드를 원한다면 이것을 사용하십시오.

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