제목 배경색 설정


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.