Преимущества создания пользовательского ActionBar по сравнению с простым созданием макета? - PullRequest
0 голосов
/ 07 октября 2018

Я пытался реализовать настраиваемую панель действий, но получаю исключение нулевого указателя из-за приведенного ниже кода.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    getSupportActionBar().setDisplayShowCustomEnabled(true);
    getSupportActionBar().setCustomView(R.layout.home_action_bar);
}

Очевидно, getSupportActionBar возвращает ноль.Пытаясь заставить его работать в течение нескольких часов безуспешно, я начинаю думать, почему мне действительно нужно сделать его настраиваемой панелью действий.Мне удалось создать дизайн, который я хочу, и он выглядит просто отлично, как показано на рисунке ниже, без вышеуказанного кода или без попыток создать настраиваемую панель действий, белая область представляет собой scrollView, и содержимое будет идти заПанель действий.Итак, мой вопрос сейчас заключается в том, нужно ли работать настраиваемой панели действий, и почему не работает вышеуказанный код?

enter image description here

1 Ответ

0 голосов
/ 07 октября 2018

Почему getSupportActionBar возвращает ноль?

Возможно, вы используете тему NoActionBar, например Theme.AppCompat.Light.NoActionBar,

Удалите часть NoActionBar.

Как Theme.AppCompat.Light или Theme.AppCompat.Light.DarkActionBar

Зачем использовать ActionBar вместо макета?

Причина 1

Создание пользовательского макета добавит много шаблонного кода.Actionbar обычно поддерживается постоянным во всех действиях вашего приложения.Поэтому, если вы используете макет, то в конечном итоге вы добавите один и тот же код макета ко всем макетам ваших действий.(Даже если вы включаете макет с помощью тега <layout/>, он по-прежнему не нужен код).

Причина 2

У вас будет action items в вашем ActionBar.Используя пользовательский макет, вы в конечном итоге будете вызывать findViewById на этих action items в каждом из ваших действий.findViewById является дорогостоящей операцией.Так что это определенно повлияет на производительность вашего приложения (может быть, очень незначительным, но все же).Кроме того, это ненужный код, который нужно писать в каждом упражнении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...