Android:如何/教程将 ActionBar 更改为 ActionBarCompat(工具栏)?
Posted
技术标签:
【中文标题】Android:如何/教程将 ActionBar 更改为 ActionBarCompat(工具栏)?【英文标题】:Android: How to/Tutorial for changing ActionBar to ActionBarCompat (Toolbar)? 【发布时间】:2014-12-31 18:32:30 【问题描述】:我一直坚持这一点,检查了官方指导等。任何教程/从 ActionBar 更改为 ActionBarCompat 的步骤是什么(对于旧版本的工具栏和支持?我已经导入了 appcompat-v7:21.0 .+,试过了
getSupportActionBar();
和
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
setSupportActionBar(toolbar);
在样式中将主题更改为 appcompat 主题...有什么常见的错误需要注意或想法吗?
不断收到这种错误:
java.lang.RuntimeException: Unable to start activity ComponentInfocom.battery.plusfree/com.battery.plusfree.MainCollectionActivity: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2212)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2271)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5146)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.battery.plusfree.MainCollectionActivity.onCreate(MainCollectionActivity.java:133)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2271)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5146)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
at dalvik.system.NativeStart.main(Native Method)
【问题讨论】:
一个很好的起点:github.com/kanytu/android-material-drawer-template 发布你的 MainColelctionActivity 发布您的活动和布局。关于工具栏的必读内容是:android-developers.blogspot.it/2014/10/… 你也可以发布你正在膨胀的布局吗?可能是它缺少 因此 NPE? 您使用的是什么 appcompat 主题?您的活动需要使用 appcompat.light.noactionbar 主题(或类似的东西,现在不记得确切的名称):) 【参考方案1】:我从我的应用程序中了解到,您不能同时使用工具栏和操作栏。所以这可能是你的问题所在,但我不确定,因为你没有发布你的代码,但是使用 styles.xml 文件你必须指定或者像这样:
<style name="AppTheme.Base" parent="Theme.AppCompat">
<item name="colorPrimary">@color/mycolorprimary</item>
<item name="colorPrimaryDark">@color/mycolorprimarydark</item>
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
</style>
Activity.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_
android:layout_>
<!-- dont use this if you only want to use the actionbar instead -->
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_
android:layout_
android:elevation="5dp"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary" />
</LinearLayout>
Activity.java:
public class MyActivity extends ActionBarActivity
Toolbar mToolbar;
public void onCreate(Bundle savedInstanceState)
// configure toolbar stuff
setSupportActionBar(mToolbar);
// or if you don't want to use the toolbar
// then change the style values accordingly
// and then you can run getSupportActionBar() instead
参考:here .. 希望对您有所帮助!
【讨论】:
出现错误。当片段中的 ctrl+空格时,setSupportActionBar 不显示。 @KarthikeyanVe 片段既没有ActionBar
也没有 Toolbar
。我猜你已经通过简单的 Google 搜索找到了它。【参考方案2】:
@Andrew Butler:很好的答案,尽管有一种不使用操作栏的标准方法。
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<!-- Customize your theme here.>
</style>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here.>
</style>
【讨论】:
【参考方案3】:将您的主题的父级设置为没有操作栏的父级。例如
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/mycolorprimary</item>
<item name="colorPrimaryDark">@color/mycolorprimarydark</item>
<item name="android:windowNoTitle">true</item>
</style>
不再需要将 windowActionBar 设置为 false。
【讨论】:
以上是关于Android:如何/教程将 ActionBar 更改为 ActionBarCompat(工具栏)?的主要内容,如果未能解决你的问题,请参考以下文章
Android:如何将ActionBar“主页”图标更改为应用程序图标以外的东西?
如何在Android中将ActionBar添加到Activity
如何更改 Android 中各个片段的 ActionBar 颜色?