2013-08-15 42 views
7

Tôi có một mục tôi muốn luôn hiển thị trên thanh hành động bằng cách sử dụng thư viện AppCompat. Nó chỉ là một menu phụ sử dụng hình ảnh tràn mặc định.AppCompat - Mục không hiển thị trên thanh hành động cho các cấp API v8-13

Điều này không hiệu quả đối với tôi ở cấp API v8-13 và tôi đã làm mọi thứ mà hướng dẫn dành cho nhà phát triển cho biết, bao gồm thêm không gian tên của riêng tôi.

Tôi đang sử dụng kiểu tùy chỉnh có Theme.AppCompat làm cha mẹ (bên dưới).

Đây là bài đăng đầu tiên của tôi nên tôi không có đủ điểm danh tiếng để đăng hình ảnh hoạt động nhưng mục bị thiếu trong thanh tác vụ và trình đơn xuất hiện ở dưới cùng khi tôi nhấn nút menu.

Mọi phản hồi sẽ được đánh giá cao !!

AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.myproject" 
    android:installLocation="auto" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="8" /> 

    <application 
     android:debuggable="true" 
     android:icon="@drawable/my_app_icon" 
     android:label="@string/app_name" 
     android:theme="@style/CustomActionBarTheme" > 
     <uses-library android:name="com.google.android.maps" /> 

     <activity 
      android:name=".ui.MainActivity" 
      android:label="@string/app_name" 
      android:launchMode="singleTop" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

</manifest> 

menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:MyApp="http://schemas.android.com/apk/res-auto" > 

    <item 
     android:id="@+id/overflow" 
     MyApp:icon="@drawable/abc_ic_menu_moreoverflow_normal_holo_dark" 
     MyApp:showAsAction="always" 
     android:icon="@drawable/abc_ic_menu_moreoverflow_normal_holo_dark" 
     android:showAsAction="always"> 
     <menu> 
      <item 
       android:id="@+id/action_about" 
       android:icon="@drawable/about_icon" 
       android:title="About"/> 
      <item 
       android:id="@+id/action_feedback" 
       android:icon="@drawable/feedback_icon" 
       android:title="Feedback"/> 
      <item 
       android:id="@+id/action_settings" 
       android:icon="@drawable/settings_icon" 
       android:title="@string/action_settings"/> 
     </menu> 
    </item> 

</menu> 

styles.xml

<resources> 
    <style name="CustomActionBarTheme" parent="@style/Theme.AppCompat"> 
     <item name="android:actionBarStyle">@style/MyActionBar</item> 
     <item name="actionBarStyle">@style/MyActionBar</item> 
    </style> 

    <style name="MyActionBar" parent="@style/Widget.AppCompat.ActionBar"> 
     <item name="android:titleTextStyle">@style/TitleTextStyle</item> 
     <item name="android:background">@drawable/abc_ab_bottom_solid_dark_holo</item> 
     <item name="titleTextStyle">@style/TitleTextStyle</item> 
     <item name="background">@drawable/abc_ab_bottom_solid_dark_holo</item> 
    </style> 

    <style name="TitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"> 
     <item name="android:textStyle">bold</item> 
    </style> 
</resources> 

MainActivity.java

package com.myproject; 
... 
public class MainActivity extends BaseActivity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreateEqually(savedInstanceState); 
     ActivityHelper.setLayoutTitle(this, R.layout.main, R.string.main, getSupportActionBar()); 
    } 

    ... 

} 

BaseActivity.java

package com.myproject; 

import android.support.v7.app.ActionBarActivity; 
... 

public class BaseActivity extends ActionBarActivity { 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    public boolean onCreateOptionsMenu(Menu menu) { 
     return true; 
    } 

    public boolean onPrepareOptionsMenu(Menu menu) { 
     return MenusHelper.displayMenu(this, menu); 
    } 

    ... 
} 

MenusHelper.java

package com.myproject; 
... 

public final class MenusHelper { 

    ... 

    public static boolean displayMenu(BaseActivity currentActivity, Menu menu) { 
     // clear former menus 
     menu.clear(); 
     MenuInflater inflater = new MenuInflater(currentActivity); 
     inflater.inflate(R.menu.menu, menu); 

     return true; 
    } 

    ... 
} 

ActivityHelper.java

package com.myproject; 

import android.support.v7.app.ActionBar; 
... 

public final class ActivityHelper { 
    ... 

    public static void setLayoutTitle(Activity activity, int layoutId, String titleStr, ActionBar actionBar) { 
     activity.setContentView(layoutId); 
     actionBar.setTitle(titleStr); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
    } 

} 
+0

bạn có thể bao gồm mã Java của bạn không? –

+0

Tôi đã thêm mã Java ở trên. – jah15

+0

có thể trùng lặp của [Actionbar không được hiển thị với AppCompat] (http://stackoverflow.com/questions/18510337/actionbar-not-shown-with-appcompat) – flx

Trả lời

11

Cố gắng đặt mã cho MenusHelper.displayMenu(this, menu); vào onCreateOptionsMenu() hơn onPrepareOptionsMenu() và cũng làm thay đổi cần thiết.

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

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

    // In case you have an item 
    MenuItem shareItem = menu.findItem(R.id.menu_share); 

    // To retrieve the Action Provider 
    mActionProvider = (ShareActionProvider) 
    MenuItemCompat.getActionProvider(shareItem); 

    return super.onCreateOptionsMenu(menu); 
} 

Hãy chắc chắn rằng Menu trong XML của bạn trông như thế này:

<item 
    android:id="@+id/share" 
    android:title="@string/menu_share" 
    yourapp:actionProviderClass="android.support.v7.widget.ShareActionProvider" 
    yourapp:showAsAction="ifRoom|withText"/> 
+0

Cảm ơn! Tôi thổi phồng menu trong 'onCreateOptionsMenu()' thay vì trong 'MenusHelper.displayMenu() 'và nó đã hoạt động! Ban đầu tôi đã gọi nó trong 'onPrepareOptionsMenu()' để bật/tắt các mục con nhất định dựa trên hoạt động hiện tại. Cảm ơn một lần nữa tất cả mọi người! – jah15

7

vấn đề là này

android:showAsAction="always" 

rằng cần phải được

youpackagename:showAsAction="always" 

thực sự nhìn qua nó một lần nữa bạn tuyên bố rằng hai lần

android:icon="@drawable/abc_ic_menu_moreoverflow_normal_holo_dark" 
android:showAsAction="always" 

remove mà cắn

+0

Cảm ơn bạn đã đề xuất, nhưng điều đó không giải quyết được vấn đề! Bất kỳ ý tưởng nào khác? Tôi đã thêm mã Java ở trên. Cảm ơn! – jah15