Страницы

Поиск по вопросам

четверг, 5 декабря 2019 г.

Как добавить вспомогательную иконку с основной в меню ActionBar?

#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(); }

Комментариев нет:

Отправить комментарий