Hehllo, 我是新的android程序员。 我的项目有一个选项菜单,见下文 我的xml菜单代码:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/add_new_media_item_menu"
android:icon="@drawable/ic_menu_add_clip_normal"
android:title="@string/editor_add"
android:showAsAction="ifRoom|withText">
<menu>
<item android:id="@+id/menu_item_capture_video"
android:title="@string/editor_capture_video" />
<item android:id="@+id/menu_item_capture_image"
android:title="@string/editor_capture_image" />
<item android:id="@+id/menu_item_import_video"
android:title="@string/editor_import_video" />
<item android:id="@+id/menu_item_import_image"
android:title="@string/editor_import_image" />
<item android:id="@+id/menu_item_import_audio"
android:title="@string/editor_import_audio" />
</menu>
</item>
<!-- Project related menu are always grouped into the more option. -->
<item android:id="@+id/menu_item_change_aspect_ratio"
android:title="@string/editor_change_aspect_ratio"
android:showAsAction="never" />
<item android:id="@+id/menu_item_edit_project_name"
android:title="@string/editor_edit_project_name"
android:showAsAction="never" />
<item android:id="@+id/menu_item_export_movie"
android:title="@string/editor_export_movie"
android:showAsAction="never" />
<item android:id="@+id/menu_item_delete_project"
android:title="@string/editor_delete_project"
android:showAsAction="never" />
<item android:id="@+id/menu_item_play_exported_movie"
android:title="@string/editor_play_exported_movie"
android:showAsAction="never" />
<item android:id="@+id/menu_item_share_movie"
android:title="@string/editor_share_movie"
android:showAsAction="never" />
</menu>
和我的java代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.action_bar_menu, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
final boolean haveProject = (mProject != null);
final boolean haveMediaItems = haveProject && mProject.getMediaItemCount() > 0;
menu.findItem(R.id.menu_item_capture_video).setVisible(haveProject);
menu.findItem(R.id.menu_item_capture_image).setVisible(haveProject);
menu.findItem(R.id.menu_item_import_video).setVisible(haveProject);
menu.findItem(R.id.menu_item_import_image).setVisible(haveProject);
menu.findItem(R.id.menu_item_import_audio).setVisible(haveProject &&
mProject.getAudioTracks().size() == 0 && haveMediaItems);
menu.findItem(R.id.menu_item_change_aspect_ratio).setVisible(haveProject &&
mProject.hasMultipleAspectRatios());
menu.findItem(R.id.menu_item_edit_project_name).setVisible(haveProject);
// Check if there is an operation pending or preview is on.
boolean enableMenu = haveProject;
if (enableMenu && mPreviewThread != null) {
// Preview is in progress
enableMenu = mPreviewThread.isStopped();
if (enableMenu && mProjectPath != null) {
enableMenu = !ApiService.isProjectBeingEdited(mProjectPath);
}
}
menu.findItem(R.id.menu_item_export_movie).setVisible(enableMenu && haveMediaItems);
menu.findItem(R.id.menu_item_delete_project).setVisible(enableMenu);
menu.findItem(R.id.menu_item_play_exported_movie).setVisible(enableMenu &&
mProject.getExportedMovieUri() != null);
menu.findItem(R.id.menu_item_share_movie).setVisible(enableMenu &&
mProject.getExportedMovieUri() != null);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home: {
// Returns to project picker if user clicks on the app icon in the action bar.
final Intent intent = new Intent(this, ProjectsActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
return true;
}
case R.id.menu_item_capture_video: {
mInsertMediaItemAfterMediaItemId = mProject.getLastMediaItemId();
// Create parameters for Intent with filename
final ContentValues values = new ContentValues();
String videoFilename = DIRECTORY + '/' + getVideoOutputMediaFileTitle() + ".mp4";
values.put(MediaStore.Video.Media.DATA, videoFilename);
mCaptureMediaUri = getContentResolver().insert(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
final Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mCaptureMediaUri);
startActivityForResult(intent, REQUEST_CODE_CAPTURE_VIDEO);
return true;
}
case R.id.menu_item_capture_image: {
mInsertMediaItemAfterMediaItemId = mProject.getLastMediaItemId();
// Create parameters for Intent with filename
final ContentValues values = new ContentValues();
mCaptureMediaUri = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mCaptureMediaUri);
startActivityForResult(intent, REQUEST_CODE_CAPTURE_IMAGE);
return true;
}
case R.id.menu_item_import_video: {
mInsertMediaItemAfterMediaItemId = mProject.getLastMediaItemId();
final Intent intent = new Intent(Intent.ACTION_PICK);
intent.setData(MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, REQUEST_CODE_IMPORT_VIDEO);
return true;
}
case R.id.menu_item_import_image: {
mInsertMediaItemAfterMediaItemId = mProject.getLastMediaItemId();
final Intent intent = new Intent(Intent.ACTION_PICK);
intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, REQUEST_CODE_IMPORT_IMAGE);
return true;
}
case R.id.menu_item_import_audio: {
final Intent intent = new Intent(Intent.ACTION_PICK);
intent.setData(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, REQUEST_CODE_IMPORT_MUSIC);
return true;
}
case R.id.menu_item_change_aspect_ratio: {
final ArrayList<Integer> aspectRatiosList = mProject.getUniqueAspectRatiosList();
final int size = aspectRatiosList.size();
if (size > 1) {
final Bundle bundle = new Bundle();
bundle.putIntegerArrayList(PARAM_ASPECT_RATIOS_LIST, aspectRatiosList);
// Get the current aspect ratio index
final int currentAspectRatio = mProject.getAspectRatio();
int currentAspectRatioIndex = 0;
for (int i = 0; i < size; i++) {
final int aspectRatio = aspectRatiosList.get(i);
if (aspectRatio == currentAspectRatio) {
currentAspectRatioIndex = i;
break;
}
}
bundle.putInt(PARAM_CURRENT_ASPECT_RATIO_INDEX, currentAspectRatioIndex);
showDialog(DIALOG_CHOOSE_ASPECT_RATIO_ID, bundle);
}
return true;
}
case R.id.menu_item_edit_project_name: {
showDialog(DIALOG_EDIT_PROJECT_NAME_ID);
return true;
}
case R.id.menu_item_delete_project: {
// Confirm project delete
showDialog(DIALOG_DELETE_PROJECT_ID);
return true;
}
case R.id.menu_item_export_movie: {
// Present the user with a dialog to choose export options
mExportProgress = 0;
showDialog(DIALOG_EXPORT_OPTIONS_ID);
return true;
}
case R.id.menu_item_play_exported_movie: {
final Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(mProject.getExportedMovieUri(), "video/*");
intent.putExtra(MediaStore.EXTRA_FINISH_ON_COMPLETION, false);
startActivity(intent);
return true;
}
case R.id.menu_item_share_movie: {
final Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, mProject.getExportedMovieUri());
intent.setType("video/*");
startActivity(intent);
return true;
}
default: {
return false;
}
}
}
我的问题是为什么选项菜单显示不正确?
任何人都可以帮我解决这个问题吗?