Android 官方DEMO - ActionBarCompat-Basic

叭叭呜 2018-05-03

ActionBarCompat-Basic Demo下载地址:https://github.com/googlesamples/android-ActionBarCompat-Basic/#readme

Android ActionBar样式生成器:

http://jgilfelt.github.io/android-actionbarstylegenerator/#name=example&compat=sherlock&theme=light&actionbarstyle=solid&texture=0&hairline=0&neutralPressed=0&backColor=E4E4E4%2C100&secondaryColor=D6D6D6%2C100&tabColor=33B5E5%2C100&tertiaryColor=F2F2F2%2C100&accentColor=33B5E5%2C100&cabBackColor=FFFFFF%2C100&cabHighlightColor=33B5E5%2C100

ActionBar官方说明:https://developer.android.google.cn/reference/android/support/v7/app/ActionBar

Menu官方说明:https://developer.android.google.cn/reference/android/view/Menu

Menu官司方说明:https://developer.android.google.cn/reference/android/view/MenuItem

ActionBarCompat-Basic

示例展示了在基本页面中创建和使用ActionBar菜单:

  1. 创建Activity并继承AppCompatActivity;
  2. 在res资源文件夹下创建menu文件夹,并在menu文件夹下创建主菜单布局xml;
  3. 重写onCreateOptionsMenu()方法,创建并初始化菜单;
  4. 重写onOptionsItemSelected()方法。
import android.os.Bundle;<br />import android.support.v4.view.MenuItemCompat;<br />import android.support.v7.app.AppCompatActivity;<br /><em><em><em>import android.view.Menu;<br /></em></em></em><em><em><em><em><em>import android.view.MenuItem;</em></em></em></em></em>
<em><em><em><em><em><em><em>public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sample_main);
    }

    /**
     * 创建并实例化菜单,添加菜单项,返回true则显示菜单。
     */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // 绑定菜单布局文件,布局文件已定义两个菜单子项refresh和settings
         getMenuInflater().inflate(R.menu.main, menu);

        // 动态添加location菜单子项,菜单子项id在文件ids.xml中定义<br />     // 第一个int类型的groupID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。<br />     // 第二个int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个itemID对应一个menu中的选项。在后面使用菜单的时候,就靠这个item ID来判断你使用的是哪个选项。<br />     // 第三个int类型的orderID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的显示顺序来显示。(参考MenuItem.getOrder())<br />     // 第四个String类型的title参数,表示选项中显示的文字。<br /></em></em></em></em></em></em></em><em><em><em><em><em><em><em><em>      MenuItem locationItem = menu.add(0, R.id.menu_location, 0<span>, R.string.menu_location);</em></em></em></em></em></em></em></em>
<em><em><em><em><em><em><em><em>        locationItem.setIcon(R.drawable.ic_action_location);

        // 设置菜单子项如何显示,可选值:<br />     // SHOW_AS_ACTION_ALWAYS:总是显示在ActionBar里,建议最多不超过两个子项,太多在小屏幕设备上会影响体验。<br />     // SHOW_AS_ACTION_IF_ROOM:由系统决定如何摆放。<br />     // SHOW_AS_ACTION_NEVER:不将子项显示在ActionBar里。<br />        // SHOW_AS_ACTION_WITH_TEXT:子项显示为文本按钮,不管是否有设置图标。<br />     // 原Demo使用的是MenuItemCompat.setShowAsAction(locationItem, MenuItem.SHOW_AS_ACTION_IF_ROOM);但这个方法在API 26以后已经被其他方法取代。
        locationItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

        return true;
    }
    /**
     * 菜单事件处理,如果处理完成,则返回true
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_refresh:
                // Here we might start a background refresh task
                return true;

            case R.id.menu_location:
                // Here we might call LocationManager.requestLocationUpdates()
                return true;

            case R.id.menu_settings:
                // Here we would open up our settings activity
                return true;
        }

        return super.onOptionsItemSelected(item);
    }
}</em></em></em></em></em></em></em></em>

ActionBar主布局文件,menu文件夹下的main.xml,另外Android Studio提供快速创建菜单布局文件的方法:

  1. 在res文件夹右键选择new->android resource directory;
  2. 弹出对话框后,在Directory name中输入menu,Resource type中选择menu,然后确定;
  3. 此时res文件夹下已创建menu文件夹,右键点击menu文件夹,选择new->Menu resource file;
  4. 弹出对话框后,输入File name,然后确定即可。
<?xml version="1.0" encoding="utf-8"?>
<!-- 这里添加了新的support命名空间,允许以向后兼容的方式使用showAsAction属性 -->
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:support="http://schemas.android.com/apk/res-auto" >
<br />   <!-- showAsAction设置为ifRoom -->
    <item
        android:id="@+id/menu_refresh"
        android:icon="@drawable/ic_action_refresh"
        android:title="@string/menu_refresh"
        support:showAsAction="ifRoom"/>

    <!-- showAsAction设置为never -->
    <item
        android:id="@+id/menu_settings"
        android:icon="@drawable/ic_action_settings"
        android:title="@string/menu_settings"
        support:showAsAction="never"/>

</menu>

values文件夹下创建ids.xml文件,用于定义动态添加的子菜单location:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="menu_location" type="id"/>
</resources>

Demo截图如下,点击右上角三点弹出settings菜单子项:

Android 官方DEMO - ActionBarCompat-Basic

相关推荐