2013-07-29 54 views
1

我正在構建一個非常簡單的應用程序,它有1個Action Bar。我使用AppCompat庫以統一的方式使用Android 2.1或更高版本進行支持。如何使用AppCompat從Android中單獨的類添加一個ActionBar?

我正在關注Google指導,並且變得有點卡住了。我有點小菜,所以請忍受我:)

我的主類擴展活動,所以我創建了一個新的類,它擴展了ActionBarActivity。

package com.example.simpledice; 

import android.os.Bundle; 
import android.support.v7.app.ActionBar; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 

public class DiceActionBar extends ActionBarActivity 
{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_dice_action_bar); 
     ActionBar actionBar = getSupportActionBar(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.dice_action_bar, menu); 
     return true; 
    } 

} 

然後我說這樣的:

public class MainActivity extends Activity 
{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     DiceActionBar diceActionBar = new DiceActionBar(); 

這並編譯並部署,但沒有行動起來吧。我也試過類似的片段,但沒有喜悅(甚至無法讓它們編譯!)。我只是將一個項目添加到操作欄,因此它看起來似乎有點矯枉過正。

任何人都可以告訴我哪裏出錯了嗎?

編輯
根據Tanis.7x答案更新了代碼。不幸的是,ActionBar仍然沒有顯示。更新代碼:

public class MainActivity extends ActionBarActivity 
{ 
    private ActionBar actionBar; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     actionBar = getSupportActionBar(); 
     actionBar.show(); 
} 

@Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     // Inflate the menu items for use in the action bar 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.main, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 

} 

清單:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.simpledice" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="7" 
     android:targetSdkVersion="18" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.AppCompat.Light.DarkActionBar" 
     android:uiOptions="splitActionBarWhenNarrow"> 
     <activity 
      android:name="com.example.simpledice.MainActivity" 
      android:label="@string/app_name" 
      android:theme="@style/Theme.AppCompat.Light.DarkActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

RES /菜單/ main.xml中

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:id="@+id/action_search" 
      android:icon="@drawable/mute" 
      android:title="@string/muteOption" 
      android:showAsAction="ifRoom" 
      /> 

</menu> 

回答

2

感謝您的答案Tanix。您的視頻最終找到了解決方案。 問題在這裏:

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:id="@+id/action_search" 
      android:icon="@drawable/mute" 
      android:title="@string/muteOption" 
      android:showAsAction="ifRoom" 
      /> 
</menu> 

當使用任何蜂窩狀前的特點,是蜂窩後,菜單中列出的任何物品應在XML命名空間「yourapp」,像這樣:

<menu 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:SimpleDice="http://schemas.android.com/apk/res-auto" 
     > 
    <item android:id="@+id/action_search" 
      SimpleDice:icon="@drawable/mute" 
      android:title="@string/muteOption" 
      SimpleDice:showAsAction="ifRoom" 
      /> 
</menu> 

行動酒吧現在像夢一樣出現。

已解決。

2

ActionBarActivity 的活動,你可以從ActionBarActivity documentation看到。簡單地創建一個新的活動什麼都不做您需要啓動新的DiceActionBar活動,或更改使用ActionBarActivity的方式。

在這種情況下,您需要更改MainActivity以擴展ActionBarActivity而不是Activity。 因此MainActivity應該看起來像這樣:

public class MainActivity extends ActionBarActivity { 
    // The rest of your MainActivity code 
} 
+0

此解決方案確實使代碼看起來更好,但仍然沒有Action Bar。請參閱編輯的問題... – BigTobster

+0

我會建議觀看[ActionBarCompat]的簡介(http://youtu.be/6TGgYqfJnyc)。您還需要確保您的應用程序(或特定活動)使用AppCompat主題。例如,您可以爲ActionBarCompat的Holo樣式設置'android:theme =「@ android:style/Theme.AppCompat」'。還有標準的燈光和黑暗的ActionBar變種。 –

相關問題