簡體   English   中英

如何在任何給定的操作欄圖標上添加下拉菜單

[英]How to add a drop-down menu on any given actionbar icon

單擊動作欄圖標並具有指向特定活動的某些選擇鏈接時,我一直在嘗試創建一個簡單的下拉菜單。

像這樣:

在此處輸入圖片說明

我嘗試遵循此方法,但沒有運氣。

Android ActionBar ActionProvider子菜單

如何在代碼中向ActionBar操作添加子菜單項?

目前,我將其作為Java代碼,但下拉菜單顯示在我的應用程序名稱下方,而不是溢出圖標:

    public boolean onCreateOptionsMenu(Menu menu){
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        return true;
    }



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        super.onCreate(savedInstanceState);

        SpinnerAdapter adapter =
                ArrayAdapter.createFromResource(this, R.array.actions,
                        android.R.layout.simple_spinner_dropdown_item);

// Callback
        OnNavigationListener callback = new OnNavigationListener() {

            String[] items = getResources().getStringArray(R.array.actions); // List items from res

            @Override
            public boolean onNavigationItemSelected(int position, long id) {

                // Do stuff when navigation item is selected

                Log.d("NavigationItemSelected", items[position]); // Debug

                return true;

            }

        };

您可以為此使用“首選項活動”。 因此,只需在res文件夾中創建一個xml文件夾。 並創建一個settings.xml

<?xml version="1.0" encoding="utf-8"?>

<com.xxx.MyPreferenceCategory
     android:title="@string/about_application" >

    <Preference
        android:key="shareApp"
        android:summary="@string/share_app_summary"
        android:title="@string/share_app" />

    <Preference
        android:key="rateApp"
        android:summary="@string/rate_app_summary"
        android:title="@string/rate_app" />

    <Preference
        android:key="version"
        android:summary="@string/version_app_summary"
        android:title="@string/version_app" />
</com.xxx.MyPreferenceCategory>

<com.xxx.MyPreferenceCategory 
    android:title="@string/about_developer" >

    <Preference
        android:key="contactUs"
        android:summary="@string/contact_us_summary"
        android:title="@string/contact_app" />

    <Preference
        android:key="aboutUs"
        android:title="@string/about_app" />

    <Preference
        android:key="terms"
        android:title="@string/about_app_terms" />

    <Preference
        android:key="policy"
        android:title="@string/about_app_policy" />
</com.xxx.MyPreferenceCategory>

之后,創建一個MyPreferenceCategory.java。

public class MyPreferenceCategory extends PreferenceCategory{

public MyPreferenceCategory(Context context) {
    super(context);
}

private TextView categoryTitle;

public MyPreferenceCategory(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public MyPreferenceCategory(Context context, AttributeSet attrs,
        int defStyle) {
    super(context, attrs, defStyle);
}
@Override
protected View onCreateView(ViewGroup parent) {
    categoryTitle  = (TextView) super.onCreateView(parent);

    return categoryTitle;
}

}

之后,創建一個MenuOptions.java文件

public class MenuOptions extends SherlockPreferenceActivity {
Handler disconnectHandler;
Runnable disconnectCallback;
Preference shareApp, rateApp, contactUs, aboutUs, termsCondition,
        privacyPolicy;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    findViewById(android.R.id.list).setBackgroundColor(Color.WHITE);

    disconnectHandler = new Handler() {
        public void handleMessage(Message msg) {
        }
    };

    disconnectCallback = new Runnable() {
        @Override
        public void run() {
        }
    };

    shareApp = (Preference) findPreference("shareApp");
    shareApp.setOnPreferenceClickListener(new OnPreferenceClickListener() {

        @Override
        public boolean onPreferenceClick(Preference preference) {
        //do your stuff
            return false;
        }
    });

    rateApp = (Preference) findPreference("rateApp");
    rateApp.setOnPreferenceClickListener(new OnPreferenceClickListener() {

        @Override
        public boolean onPreferenceClick(Preference preference) {
            //do your stuff
            return false;
        }
    });

    contactUs = (Preference) findPreference("contactUs");
    contactUs.setOnPreferenceClickListener(new OnPreferenceClickListener() {

        @Override
        public boolean onPreferenceClick(Preference preference) {
            //do your stuff
            return false;
        }
    });

    aboutUs = (Preference) findPreference("aboutUs");
    aboutUs.setOnPreferenceClickListener(new OnPreferenceClickListener() {

        @Override
        public boolean onPreferenceClick(Preference preference) {
            return false;
        }
    });

    termsCondition = (Preference) findPreference("terms");
    termsCondition
            .setOnPreferenceClickListener(new OnPreferenceClickListener() {

                @Override
                public boolean onPreferenceClick(Preference preference) {
                    return false;
                }
            });

    privacyPolicy = (Preference) findPreference("policy");
    privacyPolicy
            .setOnPreferenceClickListener(new OnPreferenceClickListener() {

                @Override
                public boolean onPreferenceClick(Preference preference) {
                    return false;
                }
            });
}

@Override
public boolean onOptionsItemSelected(
        com.actionbarsherlock.view.MenuItem item) {
    // TODO Auto-generated method stub
    switch (item.getItemId()) {
    case android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);
        break;

    default:
        break;
    }
    return super.onOptionsItemSelected(item);
}

}

之后,您將在其中使用操作欄設置按鈕的位置放置此代碼。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.activity_main, menu);
    return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_settings:
        Intent intent = new Intent(getBaseContext(), MenuOptions.class);
        startActivity(intent);
        return true;

    default:
        break;

    }
    return super.onOptionsItemSelected(item);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM