我试图使用android.view.ActionMode新的android.support.v7.widget.Toolbar,除了传统的android.app.ActionBar.我可以用以下方式显示它:
toolbar.startActionMode(callback);
Run Code Online (Sandbox Code Playgroud)
问题是,ActionMode显示在ActionBar,而不是在Toolbar.有办法改变吗?
我试图在我的主题中设置以下内容,但它似乎没有改变任何东西:
<item name="windowActionModeOverlay">true</item>
Run Code Online (Sandbox Code Playgroud) android android-support-library android-actionmode android-toolbar
我刚刚将我的一个应用程序调整到新的v22.1.1支持和appcompat库,请参阅此处和此处了解更多详细信息.当我做一些测试时,我正在使用的ActionModes出现了问题.
当您使用调用启动ActionMode时startSupportActionMode() - 如果您使用现已弃用的ActionBarActivity基类或新的AppCompatActivity基类 - onPrepareActionMode()则不会被调用.
在onPrepareActionMode()最初使用时创建ActionMode时,会自动调用先前版本(包括v21.0.3和v22.0.0)startSupportActionMode().
我在2.2,4.4.2和5.0设备上测试了它,所以它似乎不依赖于版本.
有谁知道,如果这是预期的行为,那是在v22.1.1中引入的,还是一个bug?
我发现了这个问题,但这里没有很多反馈......
2015年5月11日编辑:
如Android问题跟踪器159527中所述,此问题不仅影响appcompat和支持库的v22.1.x,还影响5.1 Android实现.
目前有两种可能的临时解决方案,一般是:
@Override
public ActionMode startSupportActionMode(final ActionMode.Callback callback) {
// Fix for bug https://code.google.com/p/android/issues/detail?id=159527
final ActionMode mode = super.startSupportActionMode(callback);
if (mode != null) {
mode.invalidate();
}
return mode;
}
Run Code Online (Sandbox Code Playgroud)
和一个'快速和脏'的(当你实例化你的ActionMode时):
final ActionMode actionMode = startSupportActionMode(new MyActionMode());
if(actionMode != null) {
actionMode.invalidate();
}
Run Code Online (Sandbox Code Playgroud)
如果您不使用appcompat(ActionBarActivity/ AppCompatActivity),则需要替换 …
android android-appcompat android-support-library android-actionmode
MainActivity.java
我MultiChoiceModeListener在这个类中实现了以下是代码:
上listView:
listView.setMultiChoiceModeListener(MainActivity.this);
listView.setChoiceMode(listView.CHOICE_MODE_MULTIPLE_MODAL);
@Override
public boolean onActionItemClicked(ActionMode arg0, MenuItem arg1) {
switch (arg1.getItemId()) {
case R.id.save:
// Close CAB
arg0.finish();
return true;
case R.id.saveto:
// Close CAB
arg0.finish();
return true;
default:
return false;
}
}
@Override
public boolean onCreateActionMode(ActionMode arg0, Menu arg1) {
arg0.getMenuInflater().inflate(R.menu.save_menu, arg1);
return true;
}
@Override
public void onDestroyActionMode(ActionMode arg0) {
listadaptor.removeSelection();
}
@Override
public boolean onPrepareActionMode(ActionMode arg0, Menu arg1) {
return false;
}
@Override
public void onItemCheckedStateChanged(ActionMode arg0, int arg1, …Run Code Online (Sandbox Code Playgroud) 我为我的应用程序实现了自己的viewgroup.由于各种原因,使用操作栏不是一个选项,所以在我的视图组中,我有自己的"动作栏",一个在顶部,一个在底部.图1说明了我当前的布局.

正如您所看到的,布局中有两个edittexts,一切看起来都不错.
但是,当用户在任何edittexts中选择一些文本时,将显示上下文动作模式栏.图2说明了这一点.

当发生这种情况时,actionmode bar会"按下"我的整个布局以获得它的空间.在平板电脑和其他大屏幕设备中,这是可以的,但在较小的设备中,尤其是软键盘可见时,剩余高度太小(横向不可用).
我想要做的是动作模式栏来覆盖我的布局而不是按下它,如图3所示.

那可能吗?
Ohoy.当我将我的应用程序升级到L时,我将ActionBars替换为工具栏,每当我启动ActionMode时,它都会推送所有内容.(我想这是因为再次显示ActionBar以显示ActionMode.)是否可以将ActionMode显示为叠加层,还是将其置于工具栏中?
也没有任何样式选项似乎适用于它,这让我想知道是否有一种新的方式来设计它.有任何想法吗?
即时通讯使用程序兼容性V7 21,到目前为止,我用尽windowActionModeOverlay=true和toolbar.startActionMode(..)

android android-actionmode android-5.0-lollipop android-toolbar
我有一个状态栏,主题集中包含以下内容:
<!-- Base Theme for all "Material"-esque styles. We use NoActionBar
so we can use the Toolbar at runtime.
-->
<style name="Material" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentStatus">true</item>
...
</style>
Run Code Online (Sandbox Code Playgroud)
我DrawerLayout的大多数活动都有,它使用以下方式设置状态栏的颜色:
mDrawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.myapp_green));
Run Code Online (Sandbox Code Playgroud)
我使用的是a Toolbar,而不是默认值ActionBar,因此它存在于我的布局中(即导航抽屉在其上绘制).
一切都很好,除了在我的一个活动中,我有一个多选模式ActionMode.当ActionMode激活它(使用长按)时,它覆盖Toolbar使用:
<item name="android:windowActionModeOverlay">true</item>
<item name="windowActionModeOverlay">true</item>
<item name="actionModeStyle">@style/Material.Widget.ActionMode</item>
Run Code Online (Sandbox Code Playgroud)
的Material.Widget.ActionMode风格是:
<style name="Material.Widget.ActionMode" parent="@style/Widget.AppCompat.ActionMode">
<item name="android:background">@color/myapp_green</item>
<item name="background">@color/myapp_green</item>
</style>
Run Code Online (Sandbox Code Playgroud)
现在,问题在于,只要发生这种情况,状态栏就会从myapp_green颜色变为黑色.这几乎就像关闭了状态栏半透明(我使用的是Android 5.0).我想知道如何才能使这种行为不会发生,并保持状态栏的颜色/半透明度.
我试图添加<item name="android:windowTranslucentStatus">true</item>动作模式的样式,以及添加<item name="android:statusBarColor">@color/myapp_green</item>样式ActionMode,两者都没有成功.
更新:
我想知道这是否与我设置状态栏背景的不稳定方式有关.我的所有Activity类都派生自NavigationDrawerActivity.java:
/**
* An …Run Code Online (Sandbox Code Playgroud) 默认操作模式(3.0及更高版本)左侧带有绿色主题和"完成"按钮.我该如何定制这些?
谢谢
android android-3.0-honeycomb android-actionbar android-actionmode
0我在我的应用程序上使用startActionMode(ActionMode).
默认情况下,它会在栏上添加"完成"按钮,我想将其删除.
此外,如果有办法改变它的文本,我也想知道,导致与"完成"不同的描述可以使动作与它的行为相对应.
我正在创建一个Android应用程序,其中支持级别api是7所以我使用sherlock actionbar.我正在使用动作模式.问题是我想改变动作模式的背景.所以我试过了
<item name="android:background">@color/something</item>
<item name="android:backgroundStacked">@color/something</item>
<item name="android:backgroundSplit">@color/something</item>
Run Code Online (Sandbox Code Playgroud)
这些风格的解决方案可用,但它们都不起作用. http://i43.tinypic.com/2nriic1.png
android actionbarsherlock android-actionbar actionmode android-actionmode
我正在Android Studio中创建一个Android应用.当我打开布局编辑器时,我看到布局顶部的灰色"弹出窗口",它表示它
无法解析资源@style/Widget.Holo.Light.ActionMode.Inverse.
当我将"渲染版本"更改为API 15(Android 4.0.3)时会发生这种情况.
它在一分钟前工作,但当我切换回布局时,我才得到这个错误.
编辑:我使用的是AppCompat库.
主题定义如下
<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar" />
Run Code Online (Sandbox Code Playgroud)
该应用程序在我运行时工作正常,但在编辑器中无法正确呈现(至少它给出了错误).
如果有人能帮助我,我会很高兴的.谢谢!
android rendering android-appcompat android-resources android-actionmode