Theme.AppCompat.Light.DarkActionBar와 같은 appcompat-v7 툴바의 스타일을 어떻게 지정합니까? 내 자신을 만들기에

Theme.AppCompat.Light.DarkActionBar새로운 지원 라이브러리 툴바로 모양을 재현하려고합니다 .

선택하면 Theme.AppCompat.Light툴바가 밝아지고 선택 Theme.AppCompat하면 어두워집니다. (기술적으로 .NoActionBar버전 을 사용해야 하지만 내가 말할 수있는 한 유일한 차이점은

<style name="Theme.AppCompat.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
</style>

이제는 Theme.AppCompat.Light.DarkActionBar없지만 순진하게 내 자신을 만들기에 충분하다고 생각했습니다.

<style name="Theme.AppCompat.Light.DarkActionBar.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
</style>

그러나 이것으로 내 도구 모음은 여전히 Light테마입니다. 지금까지 어두운 (기본) 테마와 밝은 테마를 혼합하는 다양한 조합을 시도하는 데 몇 시간을 보냈지 만 도구 모음을 제외한 모든 항목에 밝은 배경을 적용 할 수있는 조합을 찾을 수 없습니다.

AppCompat.Light.DarkActionBar가져 오기로 모양 을 얻는 방법이 있습니까?android.support.v7.widget.Toolbar 있습니까?



답변

Light.DarkActionBar클론에 대한 툴바의 스타일을 지정하는 권장 방법 Theme.AppCompat.Light.DarkActionbar은 부모 / 앱 테마 로 사용 하고 스타일에 다음 속성을 추가하여 기본 ActionBar를 숨기는 것입니다.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

그런 다음 다음을 툴바로 사용하세요.

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.AppBarLayout>

추가 수정의 경우, 확장 스타일을 만들 것입니다 ThemeOverlay.AppCompat.Dark.ActionBarThemeOverlay.AppCompat.Light내 사람을 교체 AppBarLayout->android:theme하고 Toolbar->app:popupTheme. 또한 ?attr/colorPrimary메인 스타일로 설정하면 다른 배경색을 얻을 수 있습니다.

이에 대한 좋은 예 Empty Activity는 Android Studio (1.4 이상) 의 현재 프로젝트 템플릿에서 찾을 수 있습니다.


답변

편집 : appcompat-v7 : 22.1.1로 업데이트하고 내 styles.xml AppCompatActivity대신 사용하면 ActionBarActivity다음과 같습니다.

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>

참고 : 이것은 내가 Toolbar 프레임 워크 제공 합니다 (XML 파일에 포함되지 않음).

이것은 나를 위해 일했습니다 :
styles.xml 파일 :

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>

업데이트 : Gabriele Mariotti의 블로그 에서 인용 .

새로운 툴바로 스타일과 테마를 적용 할 수 있습니다. 그들은 다르다! 스타일은 도구 모음보기에 로컬입니다 (예 : 배경색). 대신 app : theme는 제목 및 아이콘의 색상과 같이 툴바에 확장 된 모든 UI 요소에 전역 적으로 적용됩니다.


답변

Ok이 문제에 많은 시간을 가한 후 이것이 내가 원하는 모습을 얻을 수 있었던 방법입니다. 모든 것을 한곳에서 얻을 수 있도록 별도의 답변으로 만들고 있습니다.

요인의 조합입니다.

첫째, 테마만으로 도구 모음을 멋지게 재생하려고하지 마십시오. 불가능 해 보인다.

따라서 oRRs 답변 과 같이 툴바에 테마를 명시 적으로 적용하십시오.

layout / toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_alignParentTop="true"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:theme="@style/Dark.Overlay"
    app:popupTheme="@style/Dark.Overlay.LightPopup" />

그러나 이것은 마술 소스입니다. 실제로 배경색을 얻으 background려면 툴바 테마 의 속성 을 재정의해야 합니다.

values ​​/ styles.xml :

<!--
    I expected android:colorBackground to be what I was looking for but
    it seems you have to override android:background
-->
<style name="Dark.Overlay" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:background">?attr/colorPrimary</item>
</style>

<style name="Dark.Overlay.LightPopup" parent="ThemeOverlay.AppCompat.Light">
    <item name="android:background">@color/material_grey_200</item>
</style>

그런 다음 다른 레이아웃에 도구 모음 레이아웃을 포함하십시오.

<include android:id="@+id/mytoolbar" layout="@layout/toolbar" />

그리고 당신은 갈 수 있습니다.

이것이 다른 사람에게 도움이되기를 바랍니다. 그래서 당신은 이것에 저만큼 많은 시간을 할애 할 필요가 없습니다.

(누군가 테마 만 사용하여이 작업을 수행하는 방법을 알아낼 수 있다면, 즉 레이아웃 파일에 테마를 명시 적으로 적용 할 필요가없는 경우 대신 답을 기꺼이 지원할 것입니다)

편집하다:

따라서 더 완전한 답변을 게시하는 것은 반대 투표 자석 이었으므로 위의 불완전한 답변을 수락하지만 누군가가 실제로 필요할 경우를 대비하여 여기에이 답변을 남겨 둡니다. 그래도 기분이 좋으면 계속 반대 투표하십시오.


답변

내가 찾은 가장 깨끗한 방법은 ‘ ThemeOverlay.AppCompat.Dark.ActionBar ‘ 의 자식을 만드는 것입니다 . 이 예에서는 툴바의 배경색을 빨간색으로, 텍스트의 색상을 파란색으로 설정했습니다.

<style name="MyToolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:background">#FF0000</item>
    <item name="android:textColorPrimary">#0000FF</item>
</style>

그런 다음 도구 모음에 테마를 적용 할 수 있습니다.

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    app:theme="@style/MyToolbar"
    android:minHeight="?attr/actionBarSize"/>


답변

도구 모음 스타일을 사용자 정의하려면 먼저 참조 Widget.AppCompat.Toolbar을 상속 도구 모음 사용자 정의 스타일, 재정의 속성을 만든 다음 아래 그림과 같이 사용자 정의 응용 프로그램 테마에 추가 http://www.zoftino.com/android-toolbar-tutorial을 위한 더 많은 정보 도구 모음 및 스타일.

   <style name="MyAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="toolbarStyle">@style/MyToolBarStyle</item>
    </style>
    <style name="MyToolBarStyle" parent="Widget.AppCompat.Toolbar">
        <item name="android:background">#80deea</item>
        <item name="titleTextAppearance">@style/MyTitleTextAppearance</item>
        <item name="subtitleTextAppearance">@style/MySubTitleTextAppearance</item>
    </style>
    <style name="MyTitleTextAppearance" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
        <item name="android:textSize">35dp</item>
        <item name="android:textColor">#ff3d00</item>
    </style>
    <style name="MySubTitleTextAppearance" parent="TextAppearance.Widget.AppCompat.Toolbar.Subtitle">
        <item name="android:textSize">30dp</item>
        <item name="android:textColor">#1976d2</item>
    </style>


답변

아래에서 시도 할 수 없습니다.

<style name="MyToolbar" parent="Widget.AppCompat.Toolbar">
    <!-- your code here -->
</style>

세부 요소는 https://developer.android.com/reference/android/support/v7/appcompat/R.styleable.html#Toolbar 에서 찾을 수 있습니다.

여기에 몇 가지 더있다 : TextAppearance.Widget.AppCompat.Toolbar.Title, TextAppearance.Widget.AppCompat.Toolbar.Subtitle, Widget.AppCompat.Toolbar.Button.Navigation.

이것이 당신을 도울 수 있기를 바랍니다.


답변

Arnav Rao와 비슷하지만 부모가 다릅니다.

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

    <item name="toolbarStyle">@style/MyToolbar</item>
</style>

<style name="MyToolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:background">#ff0000</item>
</style>

이 접근 방식을 사용하면 도구 모음의 모양이 앱 스타일에 완전히 정의되므로 각 도구 모음에 스타일을 지정할 필요가 없습니다.