従来のAndroid.view.ActionMode
に加えて、Android.support.v7.widget.Toolbar
を新しいAndroid.app.ActionBar
で使用しようとしています。私はそれを表示することができます:
toolbar.startActionMode(callback);
問題は、ActionMode
がActionBar
ではなくToolbar
の上に表示されることです。それを変更する方法はありますか?
私は自分のテーマに以下を設定しようとしましたが、何も変わらないようです:
<item name="windowActionModeOverlay">true</item>
Toolbar
を使用しているため、AppCompatActivity
を使用しており、setSupportActionBar(toolbar);
まず、正しい名前空間をインポートしていることを確認してください。
import androidx.appcompat.view.ActionMode;
// Or
import Android.support.v7.view.ActionMode;
とない
import Android.view.ActionMode;
次に使用する
_actionMode = startSupportActionMode(this);
とない
_actionMode = startActionMode(this);
アクティビティではなく、ツールバーで開始してください。あなたの活動:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.startActionMode(mActionModeCallback)
使用する必要があります
<item name="windowActionModeOverlay">true</item>
アンドレが述べたようにあなたのテーマで。
あなたのテーマでこれを試してください:
<item name="windowActionModeOverlay">true</item>
人々が明らかにしていないことの1つは、
<item name="windowActionModeOverlay">true</item>
appTheme.NoActionBarではなく、AppThemeというベーステーマに配置されます
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowActionModeOverlay">true</item>
</style>
<style name="transparent" parent="Theme.AppCompat.Light.NoActionBar">
<item name="Android:windowBackground">@Android:color/transparent</item>
<item name="Android:windowIsTranslucent">true</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
androidManifest.xmlを見つけ、次にアプリケーションまたはアクティビティテーマで以下のコードを追加します
<item name="windowActionModeOverlay">true</item>
以下のようなので:
<style name="WorkTimeListTheme" parent="AppTheme.NoActionBar">
<item name="windowActionModeOverlay">true</item>
<item name="actionModeBackground">@color/theme_primary</item>
</style>
これが私が作った解決策です。
onCreateActionModeActionMode.Callbackのメソッドで、これを追加します:
StandaloneActionMode standaloneActionMode = (StandaloneActionMode) actionMode;
Field mContextView;
try {
mContextView = StandaloneActionMode.class.getDeclaredField("mContextView");
mContextView.setAccessible(true);
View contextView = (View) mContextView.get(standaloneActionMode);
MarginLayoutParams params = (MarginLayoutParams) contextView.getLayoutParams();
params.topMargin = mToolbar.getTop();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
わたしにはできる。
上記のすべての方法を試しましたが、まだ機能しません。そして、私は以下の方法を試しました:
private class ActionModeCallback implements ActionMode.Callback {
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
actionMode.getMenuInflater().inflate(R.menu.note_find_action, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
((AppCompatActivity) getActivity()).getSupportActionBar().hide();
return false;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {
((AppCompatActivity) getActivity()).getSupportActionBar().show();
}
}
ここでは、サポートライブラリのアクションモードとstartSupportActionModeメソッドを使用しました。同時に、特定のアクティビティのテーマを変更しようとしました。確かに、それは機能しません。したがって、本当に良い選択肢がない場合は、これを試してみてください。
つい最近、カラフルなフレームを使用してアプリの複数のテーマを有効にしたことがわかりました。これにより、コードのテーマが変更されます。このフレームワークでスタイルを変更しようとすると、機能します。
それがうまくいくことを願っています。