#java #android
В теме вопроса под вспомогательной иконкой я подразумевал маленькую в правом нижнем углу основной. Вот пример: маленькая иконка с цифрой показывает количество оповещений: Спросить я хочу, естественно, как добавить эту маленькую иконку с цифрой и ещё запрограммировать, чтобы в зависимости от числа оповещений выводилась нужная иконка, но если Вы предложите решение, в котором вместо маленькой иконки - отрисованная средствами Java цифра в круге, то это тоже подойдёт (возможно, так даже и лучше). Обновление Попробовал решение katso; код из активити приводит к краху приложения. E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference Я уже сталкивался с такой проблемой и на основе разъяснения Вызывается он при инициализации поля класса, инициализация полей класса происходит при создании экземпляра класса перед вызовом его конструктора. И всё это происходит задолго до вызова метода onCreate. объявил переменные до метода onCreate и инициализировать их внутри него. Теперь такая ошибка: На всякий случай выкладываю полный код приложения. В качестве иконки ic_bell можно использовать любое изображение. Часть кода почему-то не отображается, но его можно скопировать из поля ввода, которое появляется при нажатии "исправить". MainActivity.java import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; public class MainActivity extends AppCompatActivity { View count; TextView notifCount; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); count = menu.findItem(R.id.badge).getActionView(); notifCount = (TextView)count.findViewById(R.id.notif_count); } private int mNotifCount = 0; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); notifCount.setText(String.valueOf(mNotifCount)); return super.onCreateOptionsMenu(menu); } private void setNotifCount(int count){ mNotifCount = count; invalidateOptionsMenu(); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.badge) { return true; } return super.onOptionsItemSelected(item); } } menu_main.xml- actionbar_notification.xml
rouded_square
Ответы
Ответ 1
Пункт меню menu/menu_actionbar.xml layout кнопки layout/actionbar_notifitcation_icon.xmlФон бэйджа drawable/rounded_square.xml В активити: private int mNotifCount = 1; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_actionbar, menu); MenuItem item = menu.findItem(R.id.badge); View count = MenuItemCompat.getActionView(item); TextView notifCount = (TextView) count.findViewById(R.id.notif_count); notifCount.setText(String.valueOf(mNotifCount)); return super.onCreateOptionsMenu(menu); } private void setNotifCount(int count) { mNotifCount = count; invalidateOptionsMenu(); }
Комментариев нет:
Отправить комментарий