Изменение цвета фона отдельных элементов меню навигации

Я хочу установить цвет фона всех элементов заголовка в меню Android в ящике навигации. Мой макет выглядит так:

  // Here i want to set the background    // Here no background             

Результат должен выглядеть следующим образом:

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

Я узнал, что могу установить цвет текста, используя что-то вроде:

 MenuItem menuItem = navigationView.getMenu().findItem(R.id.menu_item); SpannableString s = new SpannableString(menuItem.getTitle()); s.setSpan(new TextAppearanceSpan(this, R.style.TextAppearance), 0, s.length(), 0); if (menuItem.getItemId()==R.id.nav_targets){ menuItem.setTitle(s); } 

Но как я могу установить цвет фона заполнения?

Изменение цвета фона отдельных элементов меню

AFAIK Используя меню, это невозможно, вам нужно создать собственную navigationView

Когда вы используете BackgroundColorSpan для установки фона в свой пункт меню, он только устанавливает фон в заголовок элемента меню не весь вид

ВЫХОД ИСПОЛЬЗОВАНИЯ BackgroundColorSpan

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

Попробуйте этот способ, используя RecyclerView

activity_main.xml

           

Основная деятельность

 public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { RecyclerView navRecyclerView; LinearLayoutManager layoutManager; ArrayList arrayList = new ArrayList<>(); NavigationAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.addDrawerListener(toggle); toggle.syncState(); NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); navRecyclerView = findViewById(R.id.navRecyclerView); navRecyclerView.setHasFixedSize(true); layoutManager = new LinearLayoutManager(this); navRecyclerView.setLayoutManager(layoutManager); initArray(); adapter = new NavigationAdapter(this, arrayList); navRecyclerView.setAdapter(adapter); } private void initArray() { NavigationDataModel model = new NavigationDataModel(); model.setColor(ContextCompat.getColor(this, R.color.colorPrimary)); model.setIcon(R.drawable.ic_menu_gallery); model.setTitle("Item 1"); arrayList.add(model); NavigationDataModel model2 = new NavigationDataModel(); model2.setColor(ContextCompat.getColor(this, R.color.colorRed)); model2.setIcon(R.drawable.ic_menu_camera); model2.setTitle("Item 2"); arrayList.add(model2); NavigationDataModel model3 = new NavigationDataModel(); model3.setColor(ContextCompat.getColor(this, R.color.colorGreen)); model3.setIcon(R.drawable.ic_menu_send); model3.setTitle("Item 3"); arrayList.add(model3); NavigationDataModel model4 = new NavigationDataModel(); model4.setColor(ContextCompat.getColor(this, R.color.colorPink)); model4.setIcon(R.drawable.ic_menu_share); model4.setTitle("Item 4"); arrayList.add(model4); } @Override public void onBackPressed() { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { super.onBackPressed(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; } } 

NavigationAdapter

 public class NavigationAdapter extends RecyclerView.Adapter { Context context; ArrayList arrayList = new ArrayList<>(); public NavigationAdapter(Context context, ArrayList arrayList) { this.context = context; this.arrayList = arrayList; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.custom_layout, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { holder.navIcon.setImageResource(arrayList.get(position).getIcon()); holder.rootView.setBackgroundColor(arrayList.get(position).getColor()); holder.navTitle.setText(arrayList.get(position).getTitle()); } @Override public int getItemCount() { return arrayList.size(); } public class ViewHolder extends RecyclerView.ViewHolder { ImageView navIcon; TextView navTitle; LinearLayout rootView; public ViewHolder(View itemView) { super(itemView); rootView = itemView.findViewById(R.id.rootView); navIcon = itemView.findViewById(R.id.navIcon); navTitle = itemView.findViewById(R.id.navTitle); } } } 

NavigationDataModel

 public class NavigationDataModel { private int icon, color; private String title; public int getIcon() { return icon; } public void setIcon(int icon) { this.icon = icon; } public int getColor() { return color; } public void setColor(int color) { this.color = color; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } } 

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

Фоновый цвет текста можно изменить с помощью BackgroundColorScan .

  NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); MenuItem menuItem = navigationView.getMenu().findItem(R.id.your_menu_item_id); Spannable spannable = new SpannableString(menuItem.getTitle()); spannable.setSpan(new BackgroundColorSpan(0xFF00CCCC), 0, menuItem.getTitle().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); menuItem.setTitle(spannable); 

Просто используйте RecyclerView внутри DrawerLayout вместо NavigationView .

 navigationView.ItemBackground = new ColorDrawable(Android.Graphics.Color.Green); 

Это может помочь.

  • Почему в Java существуют classы-оболочки?
  • Имя classа Java, содержащее знак доллара, не может быть скомпилировано, если присутствует внутренний class
  • Преобразовать значения секунд в часовые минуты?
  • почему MenuItemCompat.getActionProvider возвращает значение null?
  • Android - Как сделать скриншот программным
  • Как читать входной stream http
  • Установить альфа / непрозрачность макета
  • Не удалось импортировать новый проект Gradle: не удалось найти версию Build Tools * .0.0
  • Как запретить Gson выражать целые числа как float
  • Сохранять широковещательный приемник после закрытия приложения
  • Ошибка: выполнение выполнено для задачи: app: dexDebug. com.android.ide.common.process.ProcessException
  • Interesting Posts

    Подсчитайте количество наблюдений / строк на группу и добавьте результат в кадр данных

    Конфигурация Vim медленная в терминале и iTerm2, но не в MacVim

    Как перечислить зашифрованные файлы в Windows 7?

    iPad SplitViewController с меню в портретном режиме, например, с настройками

    Excel Условное форматирование Несколько баров данных и значки данных в одной ячейке

    Использование ‘use utf8;’ дает мне «Широкий характер в печати»,

    Paypal REST API Adaptive / Multiple Payments (изменить получателя)

    Почему мы не можем использовать двойной указатель для представления двухмерных массивов?

    Как недавнее обнаружение столкновения SHA-1 влияет на Git?

    Захват вывода из exec

    Java – JPA – Генераторы – @SequenceGenerator

    Не удается создать раздел или найти существующий при установке окон 8.1

    Как создать матрицу корреляции в R?

    Есть ли файл журнала для соединений RDP?

    Есть ли команда в Windows, например ps -aux в UNIX?

    Давайте будем гением компьютера.