В теме вопроса под вспомогательной иконкой я подразумевал маленькую в правом нижнем углу основной. Вот пример: маленькая иконка с цифрой показывает количество оповещений:
Спросить я хочу, естественно, как добавить эту маленькую иконку с цифрой и ещё запрограммировать, чтобы в зависимости от числа оповещений выводилась нужная иконка, но если Вы предложите решение, в котором вместо маленькой иконки - отрисованная средствами 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
Ответ
Пункт меню
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(); }
Комментариев нет:
Отправить комментарий