Android - ActionBar - PopupMenu - 错误
Android - ActionBar - PopupMenu - Error
我在 ActionBar 中创建弹出菜单。
MainActivity.java
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuInflater;
import android.widget.PopupMenu;
public class MainActivity extends Activity
implements PopupMenu.OnMenuItemClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
//return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_search:
//openSearch();
return true;
case R.id.action_settings:
View menuItemView = findViewById(R.id.action_settings);
PopupMenu popup = new PopupMenu(this, menuItemView);
popup.inflate(R.menu.menu_popup);
popup.show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_popup_ascending:
//archive(item);
return true;
case R.id.action_popup_descending:
if (item.isChecked()) item.setChecked(false);
else item.setChecked(true);
return true;
default:
return false;
}
}
}
menu_main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_search_white_24dp"
android:title="@string/action_search"
android:showAsAction="ifRoom" />
<item
android:id="@+id/action_settings"
android:icon="@drawable/ic_more_vert_white_24dp"
android:title="@string/action_settings"
android:showAsAction="always" />
</menu>
menu_popup.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="@+id/group_delete"
android:checkableBehavior="single">
<item
android:id="@+id/action_popup_ascending"
android:title="@string/menu_popup_ascending"
android:checkable="true"/>
<item
android:id="@+id/action_popup_descending"
android:title="@string/menu_popup_descending"
android:checkable="true"/>
</group>
</menu>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<com.getbase.floatingactionbutton.AddFloatingActionButton
android:id="@+id/add_floating_action_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
fab:fab_colorNormal="@color/Secondary_Purple_200"
fab:fab_colorPressed="@color/Secondary_Purple_400"
fab:fab_plusIconColor="@color/Primary_White"
android:layout_marginBottom="16dp"
android:layout_marginRight="16dp"
android:layout_marginEnd="16dp" />
</RelativeLayout>
在模拟器 API 16(最小 SDK)中一切正常,但在 Android Logcat 中我看到错误并且不明白为什么。
在第一条消息中,您可以看到日志。
尝试重启模拟器
或
签入真机
Because sometime emulator not behave good, you need to test on real
device if possible.
我在 ActionBar 中创建弹出菜单。
MainActivity.java
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuInflater;
import android.widget.PopupMenu;
public class MainActivity extends Activity
implements PopupMenu.OnMenuItemClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
//return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_search:
//openSearch();
return true;
case R.id.action_settings:
View menuItemView = findViewById(R.id.action_settings);
PopupMenu popup = new PopupMenu(this, menuItemView);
popup.inflate(R.menu.menu_popup);
popup.show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_popup_ascending:
//archive(item);
return true;
case R.id.action_popup_descending:
if (item.isChecked()) item.setChecked(false);
else item.setChecked(true);
return true;
default:
return false;
}
}
}
menu_main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_search_white_24dp"
android:title="@string/action_search"
android:showAsAction="ifRoom" />
<item
android:id="@+id/action_settings"
android:icon="@drawable/ic_more_vert_white_24dp"
android:title="@string/action_settings"
android:showAsAction="always" />
</menu>
menu_popup.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="@+id/group_delete"
android:checkableBehavior="single">
<item
android:id="@+id/action_popup_ascending"
android:title="@string/menu_popup_ascending"
android:checkable="true"/>
<item
android:id="@+id/action_popup_descending"
android:title="@string/menu_popup_descending"
android:checkable="true"/>
</group>
</menu>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<com.getbase.floatingactionbutton.AddFloatingActionButton
android:id="@+id/add_floating_action_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
fab:fab_colorNormal="@color/Secondary_Purple_200"
fab:fab_colorPressed="@color/Secondary_Purple_400"
fab:fab_plusIconColor="@color/Primary_White"
android:layout_marginBottom="16dp"
android:layout_marginRight="16dp"
android:layout_marginEnd="16dp" />
</RelativeLayout>
在模拟器 API 16(最小 SDK)中一切正常,但在 Android Logcat 中我看到错误并且不明白为什么。 在第一条消息中,您可以看到日志。
尝试重启模拟器
或
签入真机
Because sometime emulator not behave good, you need to test on real device if possible.