操作栏更改效果

时间:2014-01-16 21:36:08

标签: android android-actionbar

我正在尝试重现Google Keep,Gmail等ActionBar更改效果。

如下图所示,当用户选择便笺或邮件时,操作栏会根据其效果进行更改。 我想也这样做。

任何帮助?

enter image description here

1 个答案:

答案 0 :(得分:1)

看起来这是一种相对较新的能力,称为Contextual action mode

简而言之,它只是长选项目的特定“上下文”菜单。我认为上面的链接提供了足够的信息。但是,下面是一些关于如何使用它的简单示例:

<强> main.xml中

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:clipChildren="false"
    android:id="@+id/root">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:text="Do Long Press"
        android:layout_centerHorizontal="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="5dp" />
</RelativeLayout>

<强> context_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:icon="@android:drawable/ic_menu_close_clear_cancel"
          android:title="close"
          android:showAsAction="always"
          android:id="@+id/close_menu" />
</menu>

<强> MyActivity.java

public class MyActivity extends Activity implements ActionMode.Callback {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        findViewById(R.id.button).setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(final View v) {
                startActionMode(MyActivity.this);
                return true;
            }
        });
    }

    @Override
    public boolean onCreateActionMode(final ActionMode mode, final Menu menu) {
        // Inflate a menu resource providing context menu items
        MenuInflater inflater = mode.getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);
        return true;
    }

    @Override
    public boolean onPrepareActionMode(final ActionMode mode, final Menu menu) {
        // TODO: auto-generated block
        return false;
    }

    @Override
    public boolean onActionItemClicked(final ActionMode mode, final MenuItem item) {
        switch (item.getItemId()) {
            case R.id.close_menu:
                mode.finish(); // Action picked, so close the CAB
                return true;
            default:
                return false;
        }
    }

    @Override
    public void onDestroyActionMode(final ActionMode mode) {
        // TODO: auto-generated block
    }
}

如下所示:

enter image description here

执行长按

enter image description here

请注意,V项是默认项,而在context_menu.xml中,我只提供了X项。