2014-05-07 79 views
2

我最近開始使用Android Studio而不是Eclipse的ADT插件。總的來說,我幾乎沒有與Android Studio有關的問題,並且轉換並不困難。今天晚上,我在Android Studio中開始了一個新項目,並快速爲主要活動設置了基本佈局,並添加了一個包含三個項目的操作欄。編輯菜單xml文件時菜單的預覽顯示了操作欄中的按鈕,但是當我在Galaxy SII(運行android 4.2.2)或Genymotion模擬器(運行android 4.3)上啓動應用程序時,按鈕是總是被迫進入溢出菜單。我禁用了操作欄中的應用標題,以確保按鈕有足夠的空間,但仍然沒有運氣。Android Studio 0.5.7不會在操作欄中顯示按鈕

然後,我在Eclipse中創建了一個項目,並通過XML複製菜單。在我的手機和模擬器上,按鈕都顯示在操作欄中,而不是溢出菜單。在這一點上我看不出任何理由爲什麼項目應該在兩個不同的IDE中表現不同。我將Eclipse項目導入到Android Studio中,並且當我啓動應用程序時,再次在手機和模擬器上,按鈕出現在操作欄中。

有沒有其他人遇到類似這樣的問題?直到我成功地在Android Studio中獲得一個按我想要的方式工作的項目時,幾個小時的時間都是令人沮喪的。

在Android Studio 0.5.7中的以下步驟應該讓您與我所做的相同。

  1. 創建一個新項目。
  2. 設置最小API級別爲11
  3. 設置目標API至19
  4. 在它們的默認保留所有其他設置和創建項目。
  5. 在res /菜單文件夾中創建一個文件調用test_menu.xml
  6. 添加以下文件:

    <item android:id="@+id/testmeniitem" 
        android:title="Test Menu Item" 
        android:showAsAction="always" 
        android:icon="@drawable/ic_launcher" 
        /> 
    

預覽應如下所示: Menu preview

  1. 在MainActivity.java中更新onCreateOptionsMenu,以便使測試菜單膨脹。

    getMenuInflater()。inflate(R.menu.test_menu,menu);

  2. 在您選擇的設備上運行項目。該菜單項應該存在,但只在溢出菜單中。

如果需要了解更多信息,請告訴我,我會更新問題。

回答

5

嘗試如下:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <item android:id="@+id/testmeniitem" 
     android:title="Test Menu Item" 
     android:showAsAction="always" 
     app:showAsAction="always" 
     android:icon="@drawable/ic_launcher" 
     /> 

</menu> 

你需要把自定義空間,並設置showAsAction兩次。

我知道這很奇怪,但必須這樣做才能確保showAsAction適用於所有API和所有兼容性庫。

ActionBar buttons documentation page

如果您的應用使用支持庫對 低了Android 2.1版本的兼容性,showAsAction屬性不可 從android:命名空間。相反,此屬性由 支持庫提供,您必須定義您自己的XML名稱空間並使用該名稱空間作爲屬性前綴。 (自定義XML命名空間應該 根據您的應用程序的名稱,但它可以是任何你想要的名稱,只是 在聲明它的文件的範圍內使用。)

+0

謝謝!這確實是答案。我記得在文檔中看到了這些信息,並認爲它並不適用,因爲我的最小api級別設置爲11.必須與Android Studio構建項目的方式相比Eclipse有所不同。 – waffleShirt