답변:
이 스레드 는 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);
}
이 명확한 설명에 감사드립니다. 그러나 연결된 질문을 통해 답변에 조금 더 추가하고 싶습니다 (이 질문은 내 질문의 지하실이므로 새 게시물을 작성하고 싶지 않습니다).
다른 모든 활동이 자식 인 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>
배경색을 변경하는 또 다른 방법이 있지만 이는 해킹이며 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));
}
}
이 코드는 Android에서 프로그래밍 방식으로 제목 표시 줄의 배경을 변경하는 데 도움이됩니다. 색상을 원하는 색상으로 변경하십시오.
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1c2833")));
}
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);
}
}
위의 코드 에서 제목 표시 줄 대신 제목을 사용해 볼 수 있습니다. 이것은 애플리케이션의 모든 활동에 영향을 미칩니다.
platforms/android-2.1/data/res/layout/screen.xml
SDK를 살펴보십시오 . 거기에 제목을 정의하는 것 같습니다. 이와 같은 레이아웃을 자주 검토하고 style="?android:attr/windowTitleStyle"
스타일을 빌려
자신의 TextView에서 사용하고 재정의 할 수 있습니다.
다음을 수행하여 직접 조정할 제목을 선택할 수도 있습니다.
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/
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.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