动作按钮未出现在Android上

时间:2015-07-05 02:19:44

标签: java android android-fragments android-actionbar

我一直试图在我的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

非常感谢任何帮助。

3 个答案:

答案 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完美配合。