Showing posts with label optionsmenu. Show all posts
Showing posts with label optionsmenu. Show all posts

Display OptionsMenu in FragmentActivity

| 0 comments |

I tried to display options menu in FragmentActivity, and run on Android 5, but the option menu doesnt shown!

My case is:
Min Sdk Version: API 16: Android 4.1 (Jelly Bean)
Target Sdk Version: API 23; Android 6.0 (Marshmallow)
Compile Sdk Version: API 23: Android 6.0 (Marshmallow)
Build Tools Version: 23.0.1

values/styles.xml
<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>

</resources>


menu/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu
>
<item
android_id="@+id/option1"
android_orderInCategory="100"
app_showAsAction="always"
android_title="Option 1"/>
<item
android_id="@+id/option2"
android_orderInCategory="100"
android_title="Option 2"/>
<item
android_id="@+id/option3"
android_orderInCategory="100"
android_title="Option 3"/>
</menu>

MainActivity.java
package com.blogspot.android_er.testfragmentactivity;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends FragmentActivity {

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

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.option1:
Toast.makeText(MainActivity.this, "Option 1", Toast.LENGTH_LONG).show();
return true;
case R.id.option2:
Toast.makeText(MainActivity.this, "Option 2", Toast.LENGTH_LONG).show();
return true;
case R.id.option3:
Toast.makeText(MainActivity.this, "Option 3", Toast.LENGTH_LONG).show();
return true;
}
return super.onOptionsItemSelected(item);
}
}


To fix it:

(approach 1)
Edit MainActivity.java, extends ActionBarActivity (deprecated) or AppCompatActivity, instead of FragmentActivity.

Refer to the document of FragmentActivity, If you want to implement an activity that includes an action bar, you should instead use the ActionBarActivity class, which is a subclass of this one, so allows you to use Fragment APIs on API level 7 and higher.

And, ActionBarActivity is deprecated, so you should use AppCompatActivity instead.

(approach 2)
Alternatively, edit values/styles.xml, set parent of <style> to "android:Theme.Holo.Light" or "android:Theme.Holo.Light.DarkActionBar", instead of "Theme.AppCompat.Light.DarkActionBar".

This video show how to and demo on Android Emulator running Android 4.1 Jelly Bean with API 16 and Android 6.0 Marshmallow with API 23.


Read More..

Add OptionsMenu to Toolbar

| 0 comments |

Modify from last example of "Set title, subtitle and logo of Toolbar", to add OptionsMenu to Toolbar.


Create /res/menu/menu_main.xml to define our OptionsMenu.
<?xml version="1.0" encoding="utf-8"?>
<menu
>
<item
android_id="@+id/menu_camera"
android_icon="@android:drawable/ic_menu_camera"
android_orderInCategory="100"
android_title="camera"
app_showAsAction="always"/>
<item
android_id="@+id/menu_compass"
android_icon="@android:drawable/ic_menu_compass"
android_orderInCategory="100"
android_title="compass"
app_showAsAction="always"/>
<item
android_id="@+id/menu_agenda"
android_icon="@android:drawable/ic_menu_agenda"
android_orderInCategory="100"
android_title="agenda"
app_showAsAction="always"/>
<item
android_id="@+id/menu_gallery"
android_icon="@android:drawable/ic_menu_gallery"
android_orderInCategory="100"
android_title="gallery"
app_showAsAction="always"/>
<item
android_id="@+id/menu_calendar"
android_icon="@android:drawable/ic_menu_my_calendar"
android_orderInCategory="100"
android_title="calendar"
app_showAsAction="always"/>
</menu>

Modify MainActivity.java, override onCreateOptionsMenu() and onOptionsItemSelected().
package com.blogspot.android_er.androidtoolbar;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

getSupportActionBar().setTitle("Toolbar example");
toolbar.setSubtitle("Android-er.blogspot.com");
toolbar.setLogo(android.R.drawable.ic_menu_info_details);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
Toast.makeText(this, item.getTitle(), Toast.LENGTH_LONG).show();
return super.onOptionsItemSelected(item);
}

}


Next:
- Set image on Toolbar

Read More..

Implement checkable items in OptionsMenu of Toolbar

| 0 comments |
Example to implement checkable items in OptionsMenu of Toolbar, modify from last example"Set image on Toolbar".

Modify menu/menu_main.xml, to add checkable items:
<?xml version="1.0" encoding="utf-8"?>
<menu
>
<item
android_id="@+id/item_checkable1"
android_orderInCategory="100"
android_title="Checkable opt 1"
android_checkable="true"
android_checked="true"/>
<item
android_id="@+id/item_checkable2"
android_orderInCategory="100"
android_title="Checkable opt 2"
android_checkable="true"
android_checked="false"/>

<item
android_id="@+id/item_normal"
android_orderInCategory="100"
android_title="Normal item"/>

</menu>

Modify MainActivity.java, modify onOptionsItemSelected() to handle the item click.
package com.blogspot.android_er.androidtoolbar;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

getSupportActionBar().setTitle("Toolbar example");
toolbar.setSubtitle("Android-er.blogspot.com");
toolbar.setLogo(android.R.drawable.ic_menu_info_details);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

Toast.makeText(this, item.getTitle(), Toast.LENGTH_LONG).show();

int item_id = item.getItemId();
switch(item_id){
case R.id.item_checkable1:
if(item.isChecked()){
item.setChecked(false);
}else{
item.setChecked(true);
}
break;
case R.id.item_checkable2:
if(item.isChecked()){
item.setChecked(false);
}else{
item.setChecked(true);
}
break;
}


return super.onOptionsItemSelected(item);
}
}



Read More..