ToolBar和Menu的联合使用及问题

在布局中写ToolBar属性的时候能够设置logo、title、titleTextColor、subTitle等(logo默认显示在ToolBar的左侧,title和subtitle显示在logo右侧,若是不设置subtitle,title会默认竖直居中)android

全部ToolBar的功能要在前面把android改成app不然无效app

第一步:布局

由于系统默认会给整个布局顶部添加一个ActionBar因此要让咱们本身定义的ToolBar显示的话要自定义一个style让Action显示不出来,且咱们定义的样式style最好继承系统默认的样式(AppTheme),自定义的style代码以下:ui

<style name="AppTheme.NoActionBar">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>

第二部:this

要在清单文件中给想要放置ToolBar的Activity添加一个主题,即在activity的“>”内部加入一行代码spa

<activity android:name=".MainActivity"
    android:theme="@style/AppTheme.NoActionBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

红色部分即为咱们为ToolBar自定义的样式xml

第三部:继承

在Activity的代码中要记得实例化ToolBar并写入一段代码,ToolBar便可实现ip

toolbar= (Toolbar) findViewById(R.id.toolbar_main);
setSupportActionBar(toolbar);

第四部:get

如何在ToolBar的右侧添加按钮的方法

            一、ToolBar内部能够嵌套其它控件,能够理解为ToolBar自己为一个布局,里面能够添加TextView、Button之类的控件,可是用这种方法我没有实现让按钮在ToolBar右侧依次排开,也没找到好的办法实现

            二、在Activity的代码中实现Menu,Menu便会从ToolBar右侧依次排开,首先要在res文件夹下新建一个menu文件夹,再在menu文件夹下选择新建menufile代码以下:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/action_setting" android:icon="@mipmap/ic_audit"
        android:actionLayout="@layout/action_setting"
        android:title="评审" app:showAsAction="always|withText"></item>
    <item android:id="@+id/action_setting1" android:icon="@mipmap/ic_add_article" android:title="编写"
        android:actionLayout="@layout/action_setting1"
        app:showAsAction="always|withText"/>
</menu>

在上面这段代码中一个item即为一个menu,这里我新建了两个menu,必需要给menu设置id和title和showAsAction,咱们能够给每个menu设置一个新的布局,例如第一个item的actionLayout即为我给这个menu设置的布局     

            在Activity中重写onCreateOpionMenu方法,其中的R.menu.menu_main即为咱们新建的menufile

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main,menu);
    return super.onCreateOptionsMenu(menu);
}

            为了实现menu的点击时间咱们要在Activity中重写onOptionsItemSelected方法,代码以下:

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_setting1:
            Toast.makeText(MainActivity.this, "点击了Home", Toast.LENGTH_SHORT).show();
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
           builder.setMessage("确认退出吗?");
           builder.setTitle("提示");
            builder.create().show();
            break;
        case R.id.action_setting:
            Toast.makeText(MainActivity.this, "点击了Settings菜单", Toast.LENGTH_SHORT).show();
            break;
    }
    return super.onOptionsItemSelected(item);
}

            上面的代码中的R.id.action_setting即为咱们新建的menu文件中第二个item的id,这里我设置了点击menu的时候生成一个对话话框。设置完成后这两个menu即会在ToolBar的右侧依次显示,可是为何menu会自动显示在ToolBar上不知道谁能告诉我

相关文章
相关标签/搜索