2015-07-10 84 views
0

我想创建android的自定义动作条, 这是我简单的代码: 公共类MainActivity扩展活动{如何在android中创建自定义动作条?

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     menubar(); 
    } 

    public void menubar(){ 

     ActionBar mActionBar = getActionBar(); 
     LayoutInflater inflater = getLayoutInflater(); 

     View mCustomView = inflater.inflate(R.layout.menu_bar, null); 
     ImageButton button = (ImageButton) mCustomView.findViewById(R.id.bt_menu); 
     button.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 
       Toast.makeText(getApplicationContext(), "Clicked!",Toast.LENGTH_LONG).show(); 
      } 
     }); 

     mActionBar.setCustomView(mCustomView); 
     mActionBar.setDisplayShowCustomEnabled(true); 

    } 

} 

,但是当我运行显示的错误是这样的:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setCustomView(android.view.View)' on a null object reference 
     at dot.com.coba.MainActivity.menubar(MainActivity.java:39) 
     at dot.com.coba.MainActivity.onCreate(MainActivity.java:21) 

回答

0

getActionBar()方法返回null,所以试试getSupportActionBar()这样:

ActionBar mActionBar = getSupportActionBar(); 
+0

我尝试那样,但不能工作, 无法解析方法'getsupportActionBar' – Bekti

0

首先,请阅读this Android Developers博文。
请注意,现在,您应该使用Toolbar而不是ActionBar

在此版本中,Android引入了一个新的工具栏小部件。 这是一个 动作栏模式的概括,它给你更多的控制和灵活性。工具栏是您的层次结构中的一个视图,就像 任何其他视图一样,使您可以更轻松地与其他视图交叉,并为其设置动画效果,并对滚动事件做出反应。您也可以将它设置为您的活动的操作栏,这意味着您的标准选项菜单 动作将显示在其中。

换句话说,ActionBar现在成为一种特殊的Toolbar。这是从Google's official Material Design spec document摘录。

应用栏,以前称为Android中的操作栏,是一种用于品牌推广,导航,搜索和操作的特殊工具栏。


如何设置Toolbar在您的项目?
1)。在你build.gradle文件:

compile 'com.android.support:appcompat-v7:22.2.0' 

2)。AppCompatActivity扩展您的Activity

public class MyActivity extends AppCompatActivity{ 

3)。创建链接到您的Toolbar类成员的Activity或使用ViewHolder模式:

public class MyActivity extends AppCompatActivity{ 
    //Some code 

    private Toolbar mActionBarToolbar; 

    //Some code 
} 

4)。MyActivity

protected Toolbar getActionBarToolbar() { 
    if (mActionBarToolbar == null) { 
     mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar); 
     if (mActionBarToolbar != null) { 
      setSupportActionBar(mActionBarToolbar); 
     } 
    } 
    return mActionBarToolbar; 
} 

5)创建新的方法getActionBarToolbar()

@Override 
public void setContentView(int layoutResID) { 
    super.setContentView(layoutResID); 
    getActionBarToolbar(); 
} 

6):覆盖方法的MyActivitysetContentView创建文件res/layout/toolbar_actionbar.xml

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:myapp="http://schemas.android.com/apk/res-auto" 
    myapp:theme="@style/ActionBarThemeOverlay" 
    myapp:popupTheme="@style/ActionBarPopupThemeOverlay" 
    android:id="@+id/toolbar_actionbar" 
    android:background="@null" 
    myapp:titleTextAppearance="@style/ActionBar.TitleText" 
    android:layout_width="match_parent" 
    android:layout_height="?actionBarSize" /> 

而且设置你的价值观到性能myapp:thememyapp:popupThememyapp:titleTextAppearance删除它。 7)。包括在你的活动布局(对我来说layout_my_activity.xml):

<include layout="@layout/toolbar_actionbar" /> 

8)。运行你的项目。