我一直试图在我的Android应用上运行一个动作按钮,并且失败了。我读了很多问题和答案,似乎没什么用。视频链接始终只显示在我不想要的菜单中
这是菜单Xml。
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:puertogaleradivesites="http://schemas.android.com/apk/res-auto" >
<!-- Search, should appear as action button -->
<item android:id="@+id/youtube"
android:icon="@drawable/ic_play_arrow_black_24dp"
android:title="YouTube"
puertogaleradivesites:showAsAction="ifRoom"/>
<item android:id="@+id/action_settings"
puertogaleradivesites:showAsAction="never"
android:title="Settings"/>
</menu>
这是主要的Java Fragment
public class DivesiteFragment extends Fragment {
private Divesite mDivesite;
private TextView mDepthField;
private TextView mSiteDescription;
private TextView mDistance;
private ProportionalImageView mImageView;
public static final String EXTRA_SITE_ID = "com.blueribbondivers.extraSiteID";
private Context mContext;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
UUID crimeId = (UUID)getActivity().getIntent()
.getSerializableExtra(EXTRA_SITE_ID);
mDivesite = DiveSites.get(getActivity()).getDiveSite(crimeId);
mContext = getActivity().getApplicationContext();
//getActivity().getActionBar().setTitle(Html.fromHtml("<font color=\"#1c3565\">" + mDivesite.getName() + "</font>"));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_divesite, parent, false);
Resources resources = mContext.getResources();
//setHasOptionsMenu(true);
mDepthField = (TextView)v.findViewById(R.id.divesite_display_depth);
mDepthField.setText(mDivesite.getMaxDepth());
mSiteDescription = (TextView)v.findViewById(R.id.divesite_display_description);
mSiteDescription.setText(mDivesite.getSiteDescription());
mSiteDescription.setMovementMethod(new ScrollingMovementMethod());
mDistance = (TextView)v.findViewById(R.id.divesite_display_distance);
mDistance.setText(mDivesite.getTravelTime());
mImageView = (ProportionalImageView)v.findViewById(R.id.divesite_display_imageView);
String imageName = mDivesite.getPhoto();
final int resourceID = resources.getIdentifier(imageName,"drawable",mContext.getPackageName());
mImageView.setImageResource(resourceID);
setHasOptionsMenu(true);
return v;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.divesitemenu, menu);
super.onCreateOptionsMenu(menu,inflater);
}
}
我在Github上也有完整的项目https://github.com/Jonnyblue/PuertoGaleraDiveSites
非常感谢任何帮助。
答案 0 :(得分:0)
用于显示Youtbe,gmail等菜单:
您应该使用 yourapp:showAsAction =&#34;始终&#34;
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context=".HomeActivity">
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_search"
yourapp:showAsAction="always"
android:title="@string/search"/>
<item
android:id="@+id/action_refresh"
android:icon="@drawable/ic_refresh"
yourapp:showAsAction="always"
android:title="@string/refresh"/>
</menu>
希望它会对你有所帮助。
答案 1 :(得分:0)
您的活动延伸FragmentActivity。如果您希望向后兼容的操作栏在所有API级别上运行相同(API 21中的内容发生了重大变化),则应该扩展AppCompatActivity
答案 2 :(得分:0)
如果要将ActioBar项目a显示为按钮而不是溢出菜单,则需要为其定义android:orderInCategory
。所以它不会出现在溢出菜单中。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_magnify"
android:orderInCategory="100"
app:showAsAction="ifRoom|collapseActionView"
android:title="@string/noticiation_count"/>
</menu>
同样,当您使用片段时,可以安全地在onCreate()方法中使用此行,
setHasOptionsMenu(true);
经过测试并与Fragments完美配合。