programing

툴바 위에 ActionMode 표시

nasanasas 2020. 9. 18. 08:17
반응형

툴바 위에 ActionMode 표시


나는 전통적인 것 외에도 android.view.ActionMode새로운 것과 함께 사용하려고합니다 . 다음과 같이 표시 할 수 있습니다.android.support.v7.widget.Toolbarandroid.app.ActionBar

toolbar.startActionMode(callback);

문제는이 ActionMode가 위에 표시 ActionBar되지 않고 위에 표시 된다는 것 입니다 Toolbar. 그것을 바꿀 수있는 방법이 있습니까?

내 테마에서 다음을 설정하려고 시도했지만 아무것도 변경되지 않는 것 같습니다.

<item name="windowActionModeOverlay">true</item>

당신은을 사용하고 있기 때문에 Toolbar, 나는 또한 당신이를 사용한다고 가정 AppCompatActivity하고, 내장 교체 한 ActionBar사용자 정의와 함께 Toolbar사용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>

Andre가 말한대로 테마에서.


테마에서 이것을 시도하십시오.

<item name="windowActionModeOverlay">true</item>

사람들이 명확하지 않은 한 가지는

<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>

이것이 제가 만든 해결책입니다.

내에서 onCreateActionMode의 방법 ActionMode.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 메소드를 사용했습니다. 동시에 나는 주어진 활동의 주제를 수정하려고 시도했다. 확실히 작동하지 않습니다. 따라서 더 나은 선택이 없다면 이것을 시도해 볼 수 있습니다.

Just recently, I have found that I used the Colorful frame to enable multiple theme of my app, this will change the theme in code. When I tried to modify the style in this framework, it works.

Hope it works.

참고URL : https://stackoverflow.com/questions/26483778/display-actionmode-over-toolbar

반응형