与仅创建布局相比,创建自定义ActionBar的好处是什么?

时间:2018-10-07 19:27:15

标签: java android android-layout

我一直在尝试实现自定义操作栏,但是由于下面的代码,我一直收到空指针异常。

@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返回null。在尝试使其运行了几个小时而没有运气之后,我开始思考为什么我真的需要将其设置为自定义操作栏。我能够创建想要的设计,如下图所示,它看起来很好,没有上面的代码,或者没有尝试创建自定义操作栏,白色区域是scrollView,内容将位于动作栏。因此,我的问题是,有必要使自定义操作栏起作用,并且为什么上述代码不起作用?

enter image description here

1 个答案:

答案 0 :(得分:1)

  

为什么getSupportActionBar返回null?

您可能正在使用NoActionBar之类的Theme.AppCompat.Light.NoActionBar主题,

删除NoActionBar部分。

Theme.AppCompat.LightTheme.AppCompat.Light.DarkActionBar

  

为什么使用ActionBar而不是布局?

原因1

创建自定义布局将添加许多样板代码。 Actionbar通常在您应用的所有活动中保持一致。因此,如果使用布局,则最终将向所有活动布局添加相同的布局代码。 (即使您使用<layout/>标签添加了布局,也仍然是不必要的代码。)

原因2

您的action items中将有ActionBar。使用自定义布局,您最终将在每个活动中在这些findViewById上调用action itemsfindViewById是一项昂贵的操作。因此,它肯定会影响您应用的性能(虽然可以忽略不计,但仍然可以)。另外,这是您在每个活动中都需要编写的不必要的代码。