툴바 위에 ActionMode 표시
나는 전통적인 것 외에도 android.view.ActionMode
새로운 것과 함께 사용하려고합니다 . 다음과 같이 표시 할 수 있습니다.android.support.v7.widget.Toolbar
android.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
'programing' 카테고리의 다른 글
시간없이 Rails DateTime.now (0) | 2020.09.18 |
---|---|
두 파일을 나란히 표시 (0) | 2020.09.18 |
Webpack-webpack-dev-server : 명령을 찾을 수 없습니다. (0) | 2020.09.18 |
Ruby의 외부 프로세스 STDOUT에서 지속적으로 읽기 (0) | 2020.09.18 |
Twitter Bootstrap 3에서 반응 형 기능을 제거하는 방법은 무엇입니까? (0) | 2020.09.18 |