如何使用活动和片段在自定义工具栏中设置菜单项?

时间:2018-03-09 09:40:41

标签: java android android-activity toolbar

之前我只使用了活动,但是当我将片段添加到活动时,菜单图标消失了,我可以找到修复它

我的自定义工具栏          

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal"
        android:weightSum="100">

        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:id="@+id/actionbar_logo_click"
            android:paddingLeft="3dp"
            android:layout_weight="5">

            <ImageView
                android:id="@+id/actionbar_logo"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:paddingRight="10dp" />
        </FrameLayout>

        <TextView
            android:id="@+id/actionbar_titel"
            style="@style/AudioFileInfoOverlayText"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:paddingTop="7dp"
            android:textColor="@color/white"
            android:textSize="27dp" />
    </LinearLayout>
</android.support.v7.widget.Toolbar>

我的菜单项

<?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"
    android:icon="@drawable/ic_more_vert_white_24dp"
    app:showAsAction="always">
    <item
        android:id="@+id/menu_rate"
        android:title="@string/menu_rate"
        />
    <item
        android:id="@+id/menu_about"
        android:title="@string/menu_about" />

</menu>

我的活动xml布局,我在其中添加了ID为

的自定义工具栏
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include layout="@layout/app_bar"></include>

    <!-- Container for loading and the actual fragment-->
    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />



    <ProgressBar
        android:id="@+id/loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:visibility="gone"
        android:indeterminate="true" />
</LinearLayout>
</FrameLayout>

我的java活动,我调用工具栏并夸大菜单项

@EActivity(R.layout.activity_main_layout)
public class MainActivity extends BaseActivity {


    @ViewById(R.id.adview)
    MoPubView mMoPubView;

    @ViewById(R.id.app_bar)
    Toolbar toolbar;

    @ViewById(R.id.actionbar_logo)
    ImageView mAactionbarImage;

    @ViewById(R.id.actionbar_titel)
    TextView mActionbarTitel;


    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setSupportActionBar(toolbar);
    }

    @AfterViews
    protected void onViewsInitialized() {
        gotoFragment(MainFragment_.builder().build(), false);

        mAactionbarImage.setImageResource(R.mipmap.ic_launcher);

        //Set the titel of the actionbar
        mActionbarTitel.setText("How To Twitch");
    }


    @Override
    public void onBackPressed() {

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu, menu);
        menu.getItem(0).setIcon(R.drawable.ic_more_vert_white_24dp);
        return super.onCreateOptionsMenu(menu);

    }

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_rate:
                final String appPackageName = getPackageName(); // getPackageName() from Context or Activity object
                try {
                    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
                } catch (android.content.ActivityNotFoundException anfe) {
                    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + appPackageName)));
                }
                break;
            case R.id.menu_about:
                Intent aboutIntent = new Intent(MainActivity.this, AboutActivity_.class);
                startActivity(aboutIntent);
                break;
            default:
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

由于某种原因我的菜单图标没有显示在工具栏中,所以如果有人知道我做错了什么会帮助我很多

1 个答案:

答案 0 :(得分:0)

我认为你缺少一个被覆盖的方法onPrepareOptionsMenu

尝试添加此重写方法并检查:

@Override
public void onPrepareOptionsMenu(Menu menu) {
    menu.findItem(R.id. menu_rate).setVisible(true);
    menu.findItem(R.id. menu_about).setVisible(true);
    super.onPrepareOptionsMenu(menu);
}

在片段的setHasOptionsMenu(true);内添加onCreateView()