Изменить цвет панели инструментов в Appcompat 21

Я тестирую новые функции Appcompat 21 Material Design. Поэтому я создал панель инструментов следующим образом:

 

и включил его в мой основной файл макета.

Затем я установил его как supportActionBar следующим образом:

 Toolbar toolBar = (Toolbar)findViewById(R.id.activity_my_toolbar); setSupportActionBar(toolBar); 

Он работает, но почему-то я не могу понять, как настроить панель инструментов. Он серый, а текст на нем черный. Как изменить цвет фона и текста?

Я выполнил следующие инструкции:

http://android-developers.blogspot.de/2014/10/appcompat-v21-material-design-for-pre.html

Что я наблюдал за изменением цвета?

   false false  

EDIT :

Я смог изменить цвет фона, добавив эти строки кода в тему:

 @color/actionbar @color/actionbar_dark 

Но они не будут влиять на цвет текста. Что мне не хватает? Вместо черного текста и черной кнопки меню я предпочитаю белый текст и белые кнопки меню:

введите описание изображения здесь

снова это все в ссылке, которую вы предоставили

для изменения текста на белый все, что вам нужно сделать, это изменить тему.

используйте эту тему

  

Вы можете использовать app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" как предложено в других ответах, но вы также можете использовать такое решение:

  

И вы можете полностью контролировать свои элементы ui с помощью этих стилей:

    

Эй, если вы хотите применить тему материала только для android 5.0, то вы можете добавить эту тему в нее

  

Здесь ниже строка ответственно за цвет текста в Actionbar of Material design.

 @android:color/white 

Это то, что известно как DarkActionBar, что означает, что вы должны использовать следующую тему для получения желаемого стиля:

  

Динамически настраивать динамический элемент панели инструментов можно, создав собственный class панели инструментов:

 package view; import android.app.Activity; import android.content.Context; import android.graphics.ColorFilter; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.support.v7.internal.view.menu.ActionMenuItemView; import android.support.v7.widget.ActionMenuView; import android.support.v7.widget.Toolbar; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.AutoCompleteTextView; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; public class CustomToolbar extends Toolbar{ public CustomToolbar(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); // TODO Auto-generated constructor stub } public CustomToolbar(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public CustomToolbar(Context context) { super(context); // TODO Auto-generated constructor stub ctxt = context; } int itemColor; Context ctxt; @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { Log.d("LL", "onLayout"); super.onLayout(changed, l, t, r, b); colorizeToolbar(this, itemColor, (Activity) ctxt); } public void setItemColor(int color){ itemColor = color; colorizeToolbar(this, itemColor, (Activity) ctxt); } /** * Use this method to colorize toolbar icons to the desired target color * @param toolbarView toolbar view being colored * @param toolbarIconsColor the target color of toolbar icons * @param activity reference to activity needed to register observers */ public static void colorizeToolbar(Toolbar toolbarView, int toolbarIconsColor, Activity activity) { final PorterDuffColorFilter colorFilter = new PorterDuffColorFilter(toolbarIconsColor, PorterDuff.Mode.SRC_IN); for(int i = 0; i < toolbarView.getChildCount(); i++) { final View v = toolbarView.getChildAt(i); doColorizing(v, colorFilter, toolbarIconsColor); } //Step 3: Changing the color of title and subtitle. toolbarView.setTitleTextColor(toolbarIconsColor); toolbarView.setSubtitleTextColor(toolbarIconsColor); } public static void doColorizing(View v, final ColorFilter colorFilter, int toolbarIconsColor){ if(v instanceof ImageButton) { ((ImageButton)v).getDrawable().setAlpha(255); ((ImageButton)v).getDrawable().setColorFilter(colorFilter); } if(v instanceof ImageView) { ((ImageView)v).getDrawable().setAlpha(255); ((ImageView)v).getDrawable().setColorFilter(colorFilter); } if(v instanceof AutoCompleteTextView) { ((AutoCompleteTextView)v).setTextColor(toolbarIconsColor); } if(v instanceof TextView) { ((TextView)v).setTextColor(toolbarIconsColor); } if(v instanceof EditText) { ((EditText)v).setTextColor(toolbarIconsColor); } if (v instanceof ViewGroup){ for (int lli =0; lli< ((ViewGroup)v).getChildCount(); lli ++){ doColorizing(((ViewGroup)v).getChildAt(lli), colorFilter, toolbarIconsColor); } } if(v instanceof ActionMenuView) { for(int j = 0; j < ((ActionMenuView)v).getChildCount(); j++) { //Step 2: Changing the color of any ActionMenuViews - icons that //are not back button, nor text, nor overflow menu icon. final View innerView = ((ActionMenuView)v).getChildAt(j); if(innerView instanceof ActionMenuItemView) { int drawablesCount = ((ActionMenuItemView)innerView).getCompoundDrawables().length; for(int k = 0; k < drawablesCount; k++) { if(((ActionMenuItemView)innerView).getCompoundDrawables()[k] != null) { final int finalK = k; //Important to set the color filter in seperate thread, //by adding it to the message queue //Won't work otherwise. //Works fine for my case but needs more testing ((ActionMenuItemView) innerView).getCompoundDrawables()[finalK].setColorFilter(colorFilter); // innerView.post(new Runnable() { // @Override // public void run() { // ((ActionMenuItemView) innerView).getCompoundDrawables()[finalK].setColorFilter(colorFilter); // } // }); } } } } } } } 

затем обратитесь к нему в файл макета. Теперь вы можете установить собственный цвет, используя

 toolbar.setItemColor(Color.Red); 

Источники:

Я нашел информацию, чтобы сделать это здесь: Как динамически изменить цвет значков панели инструментов Android

а затем я отредактировал его, улучшил его и разместил здесь: GitHub: AndroidDynamicToolbarItemColor

Вы можете изменить цвет текста на панели инструментов так:

 #FFFFFF #FFFFFF 

Достичь этого, используя toolbar как это:

  

Попробуйте это в ваших стилях.xml:

colorPrimary будет цветом панели инструментов.

   

Кстати, вы построили это в Eclipse?

Я решил этот вопрос после изучения …

для Api21 и больше использования

  @color/white 

для более низких версий

  @color/white 

Если вы хотите изменить цвет своей панели инструментов во всем своем приложении, используйте style.xml. В общем, я избегаю изменять компоненты ui в своем java-коде, если я не пытаюсь сделать что-то программно. Если это одноразовый набор, то вы должны сделать это в xml, чтобы сделать ваш код чище. Вот как выглядит ваш стиль.xml:

    

Убедитесь, что вы используете этот стиль в AndroidManifext.xml как таковой:

    

Мне нужны разные цвета панели инструментов для разных действий. Поэтому я снова использовал стили:

    

снова примените стили к каждой активности в вашем AndroidManifest.xml как таковой:

   

Для людей, которые используют AppCompatActivity с панелью инструментов в качестве белого фона. Используйте этот код.

Обновлено: декабрь 2017 г.

    
  • Прокладка панели инструментов Android API 21
  • Эта активность уже имеет панель действий, предоставляемую декором windows
  • Название центра панели инструментов Android и собственный шрифт
  • Добавить высоту / тень на панели инструментов для устройств с предварительным леоптипом
  • Как использовать SearchView в панели инструментов Android
  • На панели инструментов нет тени по умолчанию?
  • Управление навигационной панелью и обратной кнопкой панели инструментов из fragmentа в андроиде
  • Давайте будем гением компьютера.