在我的项目中,我正在用工具栏替换Action Bar。我从Theme.Material.Light.NoActionBar继承了我的主题,并从我的Activity的onCreate中调用了setActionBar来传递工具栏。到现在为止还挺好。问题是当我使用带有CHOICE_MODE_MULTIPLE_MODAL的ListView时。操作模式显示在Too Bar的顶部,实际的Action Bar将驻留在那里,如果我没有使用NoActionBar主题删除它。
我需要在ListView中配置一些东西吗?还是MultiChoiceModeListener?
这是我的活动的超级简单代码
public class MainActivity extends Activity implements ActionMode.Callback, AbsListView.MultiChoiceModeListener {
static final ArrayList<String> values = new ArrayList<>(Arrays.asList("Apple", "Ball", "Cat", "Dog", "Elephant", "Flower"));
ArrayAdapter<String> adapter;
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setActionBar(findViewById(R.id.toolbar));
lv = findViewById(R.id.wordList);
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_activated_1, values);
lv.setAdapter(adapter);
lv.setMultiChoiceModeListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_normal, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Toast.makeText(this, "This is a test", Toast.LENGTH_SHORT).show();
return true;
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
getMenuInflater().inflate(R.menu.menu_active, menu);
mode.setTitle("Go CAPS!");
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
turnWordsToUppercase();
mode.finish();
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
lv.clearChoices();
lv.requestLayout();
}
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
}
void turnWordsToUppercase() {
//Logic for turning words to uppercase
}
}
这是我的主题
<style name="AppTheme" parent="android:Theme.Material.Light.NoActionBar">
<item name="android:colorPrimary">@color/colorPrimary</item>
<item name="android:colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="android:colorAccent">@color/colorAccent</item>
<item name="windowActionModeOverlay">true</item>
</style>
答案 0 :(得分:0)
您需要将<item name="windowActionModeOverlay">true</item>
添加到您的应用主题