9

탐색 모음이있는 작업 표시 줄이 API 수준 9로 이전 버전과 호환되어 작업 표시 줄의 배경을 변경하려고합니다.ActionBar의 사용자 지정 (그라디언트) 배경

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<!-- the theme applied to the application or activity --> 
<style name="CustomActionBarTheme" 
     parent="@style/Theme.AppCompat.Light.DarkActionBar"> 
    <item name="android:actionBarStyle">@style/MyActionBar</item> 

    <!-- Support library compatibility --> 
    <item name="actionBarStyle">@style/MyActionBar</item> 
</style> 

<!-- ActionBar styles --> 
<style name="MyActionBar" 
     parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse"> 
    <item name="android:background">@drawable/actionbar_background</item> 

    <!-- Support library compatibility --> 
    <item name="background">@drawable/actionbar_background</item> 
</style> 
</resources> 

을 그리고 여기에 문제가 온다 :

나는 Android Developers의 코드를 복사.

이미지 드로어 블 또는 색상을 배경으로 넣으면 잘 동작합니다. 나는 그것이 수평 방식으로 반복 할 것이 아니라도이 사실, 매우 흥미로운 오류, 오류가 발생합니다

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="line"> 
<gradient 
     android:startColor="@color/ac_bg_start" 
     android:endColor="@color/ac_bg_end" 
     android:type="linear"/> 
<size 
     android:width="1dp" 
     android:height="48dp"/> 
</shape> 

:처럼 내 actionbar_background 보이는 있도록 그러나 나는, 그라데이션 형태로 배경을 정의합니다. 테스트 장치와 심지어 에뮬레이터가 응용 프로그램을 실행하려고하면 다시 시작됩니다. 다시 시작하기 전에 DeadObjectException을 잡을 수있었습니다.

배경 드로어 블은 어떻게 보이게해야합니까?

답변

16

현재 동일한 작업을하고 있습니다.

여기 내 바의 그라디언트를 정의하는 action_bar_bg.xml 파일입니다. 내부 구배가 있다면

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <gradient 
     android:angle="90" 
     android:centerColor="@color/turquoise_action_bar" 
     android:endColor="@color/dark_turquoise" 
     android:startColor="@color/dark_turquoise" /> 
</shape> 

DeadObjectException는

android:shape="line" 사용될 수 없다. 나는 그것을 시험했다. 내 삼성 Galaxy Note 10.1 N8000이 다시 시작되었고 DeadObjectException이있었습니다.

linear 유형의 그래디언트 패턴은 기본값 인입니다. 따라서 명시 적으로 선언 할 필요는 없습니다.

여기 내 styles.xml값이입니다.

<resources> 

    <!-- Base application theme. --> 
    <style name="AppThemeBase" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <item name="android:actionBarStyle">@style/PeopleCanAct</item> 
     <!-- Support library compatibility --> 
     <item name="actionBarStyle">@style/MyActionBar</item> 
    </style> 

    <style name="AppTheme" parent="AppThemeBase"> 
     <!-- All the customizations that are NOT specific to a particular API level can go here --> 
    </style> 

    <!-- ActionBar styles --> 
    <style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse"> 
     <item name="android:background">@drawable/action_bar_bg</item> 
     <!-- Support library compatibility --> 
     <item name="background">@drawable/action_bar_bg</item> 
    </style> 

</resources> 

Gradient Drawable

+1

<항목 이름 = "안드로이드 : actionBarStyle"> @ 스타일/PeopleCanAct을 변경해야합니다 <항목 이름 = "안드로이드 : actionBarStyle">이 작동 –

+0

그대로 사용하면 컴파일 오류가 발생합니다/MyActionBar @ 스타일, DeadObjectException 부분을 이해할 수는 없지만, 언제 장치가 그 예외를 잡을까요? – Bruce

16

styles.xml을 수정하지 않고 또 다른 방법 : 여기

이 GradientDrawable 우리의 예입니다 res/drawable/ab_gradient.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" 
    android:useLevel="false" > 

    <gradient 
     android:angle="90" 
     android:startColor="#000000" 
     android:endColor="#FFFFFF" 
     android:type="linear" /> 

</shape> 

에서 당신은 당신의 활동의 onCreate()에서 작업 표시 줄로 설정할 수 있습니다

ActionBar actionBar = getActionBar();  
actionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.action_bar_gradient_shape)); 

당신은 지원 V7 라이브러리 (귀하의 경우)를 사용하는 경우 :

// make sure to import android.support.v7.app.ActionBar 
ActionBar actionBar = getSupportActionBar();   
actionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.action_bar_gradient_shape)); 

을 아니면 ActionBarSherlock의를 사용하는 경우 :

// make sure to import com.actionbarsherlock.app.ActionBar 
ActionBar actionBar = getSherlock().getActionBar();  
actionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.action_bar_gradient_shape)); 
+0

이것은 분명히 작동하지만 분명히 내 코드가 잘못되었다는 것을 설명하기 때문에 다른 대답을 받아 들였습니다. –

+0

@ Max77 .getDrawable은 이제 제공되지 않습니다. deprecated 메소드를 대체 할 새로운 코드는 무엇입니까? – iOSAndroidWindowsMobileAppsDev

+1

@JqueryNinja이 좋은 대답을 확인하십시오 : http://stackoverflow.com/questions/29041027/android-getresources-getdrawable-deprecated-api-22 – Max77

0

은 또한 안드로이드 개발자로부터의 샘플 코드를 사용하여 그라데이션 XML을 사용하여 너처럼.

<shape 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="line"> 

나는 당신과 나의 사이에이 파일의 서로 다른이 android:shape="line"/ android:shape="rectangle"입니다 발견했다.

그래서 직사각형을 선으로 변경하려고합니다. 내 응용 프로그램도 동일한 예외가 발생하고 OS가 다시 시작됩니다. 어쩌면 그 모양이 핵심입니다.

+0

이것은 실제로 질문에 대답하지 않습니다. 다른 질문이있는 경우 [질문하기] (http://stackoverflow.com/questions/ask)를 클릭하여 질문 할 수 있습니다. 당신은 [현상금을 추가] (http://stackoverflow.com/help/privileges/set-bounties)하면 충분한 [평판] (http://stackoverflow.com/help/)이 일단이 질문에 더 많은 관심을 끌 수 있습니다. 평판). – maszter