与ListView CHOICE_MODE_MULTIPLE_MODAL一起使用时,操作模式不应用于工具栏(用作操作栏)

时间:2017-12-08 20:56:40

标签: android

在我的项目中,我正在用工具栏替换Action Bar。我从Theme.Material.Light.NoActionBar继承了我的主题,并从我的Activity的onCreate中调用了setActionBar来传递工具栏。到现在为止还挺好。问题是当我使用带有CHOICE_MODE_MULTIPLE_MODAL的ListView时。操作模式显示在Too Bar的顶部,实际的Action Bar将驻留在那里,如果我没有使用NoActionBar主题删除它。

Without action mode
With action mode

我需要在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>

1 个答案:

答案 0 :(得分:0)

您需要将<item name="windowActionModeOverlay">true</item>添加到您的应用主题