我正在尝试重现Google Keep,Gmail等ActionBar更改效果。
如下图所示,当用户选择便笺或邮件时,操作栏会根据其效果进行更改。 我想也这样做。
任何帮助?
答案 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
}
}
如下所示:
执行长按
请注意,V
项是默认项,而在context_menu.xml中,我只提供了X
项。