2015-07-10 67 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)。運行你的項目。