2015-08-18 4 views
0

я пытался изменить цвет моей панели действий в Android приложение, используя следующую строку кода:Изменение цвета панели действий Программа может вызвать исключение nullPointerException?

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.background_actionbar))); 

Однако, это дает предупреждение, что гласит:

Метод вызова «getSupportActionBar() .setBackgroundDrawable (новый ColorDrawable (GetResources(). GetColor (R.color.backgr ... может привести к 'java.lang.NullPointerException'

Любые идеи, как обойти это?

Примечание: я меняю цвет программно, потому что изменение его с помощью темы/стиля XML не сработало.

используя минимум SDK 16.

тестирования на Android 4.4.4 устройство.

+0

Я хотел бы использовать 'ToolBar' – Emil

ответ

0

Да, если вы используете темы с NoActionBar, тогда вы получите NullPointerException.

Попробуйте это:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // The Action Bar is a window feature. The feature must be requested 
    // before setting a content view. Normally this is set automatically 
    // by your Activity's theme in your manifest. The provided system 
    // theme Theme.WithActionBar enables this for you. Use it as you would 
    // use Theme.NoTitleBar. You can add an Action Bar to your own themes 
    // by adding the element <item name="android:windowActionBar">true</item> 
    // to your style definition. 
    getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 

    setContentView(R.layout.main); 

    // experiment with the ActionBar 
    ActionBar actionBar = getActionBar(); 
    actionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.background_actionbar))); 
     //actionBar.hide(); 
} 

или

Вы можете использовать Toolbar

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:id="@+id/toolbar" 
android:layout_height="wrap_content" 
android:layout_width="match_parent" 
android:fitsSystemWindows="true" 
android:minHeight="?attr/actionBarSize" 
android:background="@color/light_blue"> 
</android.support.v7.widget.Toolbar> 

Включите его в макете активность в:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:id="@+id/toolbar_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <include layout="@layout/toolbar" /> 
    </LinearLayout> 
</RelativeLayout> 

Используйте этот код для деятельности:

public class YourActivity extends AppCompatActivity { 
    private Toolbar toolbar; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_layout); 

     // Set a Toolbar to replace the ActionBar. 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     //toolbar.setTitle("Setting"); 
    } 

    public void setSupportActionBar(@Nullable Toolbar toolbar) { 
     getDelegate().setSupportActionBar(toolbar); 
    } 
}