0

I have been trying to create a simple drop down menu when I click my action bar icon and have certain selections link to particular activities.

Something like this:

enter image description here

I've tried to follow this but no luck.

Android ActionBar ActionProvider submenu

How to add submenu items to ActionBar action in code?

Currently I have this as my Java code, but the drop down menu appears under my appname instead of the overflow icon:

    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;

            }

        };
Community
  • 1
  • 1
Rohit Tigga
  • 2,373
  • 9
  • 43
  • 81

1 Answers1

0

You can use Preference Activity for this. So Just Create a xml folder in res folder. and create a 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>

After that create an 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;
}

}

After that create a MenuOptions.java file

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);
}

}

After that where you are where you are using action bar setting button where put this code.

@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);
}
Amit Jayaswal
  • 1,725
  • 2
  • 19
  • 36