Android 如何在ActionMode内更改TextView的背景色
我的操作栏中有一个Android 如何在ActionMode内更改TextView的背景色,android,android-actionbar,styles,android-actionmode,Android,Android Actionbar,Styles,Android Actionmode,我的操作栏中有一个TextView,如下所示: 我已经配置了逻辑,当我长按关联的列表视图中的某个项目时,它将覆盖工具栏和操作模式。最终的结果如下所示: 这基本上是正确的,除了ActionMode中TextView标题周围令人讨厌的背景之外 我尝试了很多方法,从更改style.xml文件中的Widget.ActionMode样式,到实际将actionmodel设置为特定样式。不过,似乎没有任何东西会影响此TextView 我已经通读了一遍,但似乎我所做的任何事情都不会对这个背景产生影响 旁注:
TextView
,如下所示:
我已经配置了逻辑,当我长按关联的列表视图中的某个项目时,它将覆盖工具栏
和操作模式
。最终的结果如下所示:
这基本上是正确的,除了ActionMode
中TextView
标题周围令人讨厌的背景之外
我尝试了很多方法,从更改style.xml
文件中的Widget.ActionMode
样式,到实际将actionmodel
设置为特定样式。不过,似乎没有任何东西会影响此TextView
我已经通读了一遍,但似乎我所做的任何事情都不会对这个背景产生影响
旁注:如果能够在呈现Android设备时以某种方式查看其样式层次结构,那就太好了。hierarchy viewer让我了解了其中的1/3,但它没有任何样式信息。有谁知道这样一个工具,我可以用来调试这个问题
styles.xml(仅相关内容):
<style name="Material" parent="Theme.AppCompat.Light">
<item name="textHeaderMaxLines">@integer/text_header_max_lines</item>
<item name="trackAbstractMaxLines">@integer/track_abstract_max_lines</item>
<item name="activatableItemBackground">@drawable/activatable_item_background</item>
<!-- ActionMode Styles -->
<item name="android:windowActionModeOverlay">true</item>
<item name="windowActionModeOverlay">true</item>
<item name="actionModeBackground">@color/app_green_dark</item>
</style>
<style name="Material.AppBar" parent="Theme.AppCompat.NoActionBar">
<item name="android:textColorPrimaryInverse">@android:color/white</item>
<item name="android:actionMenuTextColor">@android:color/white</item>
<item name="android:textColorSecondary">@android:color/white</item>
<item name="android:background">@color/app_green</item>
<item name="android:color">@android:color/white</item>
<item name="android:textColor">@android:color/white</item>
</style>
<style name="Material.AppBar.ActionMode" parent="Widget.AppCompat.Light.ActionMode.Inverse">
<item name="android:background">@color/app_green_dark</item>
</style>
@整数/文本\标题\最大\行
@整数/轨道\u抽象\u最大\u行
@可绘制/可激活\u项目\u背景
真的
真的
@颜色/应用程序\绿色\深色
@android:彩色/白色
@android:彩色/白色
@android:彩色/白色
@颜色/应用程序绿色
@android:彩色/白色
@android:彩色/白色
@颜色/应用程序\绿色\深色
我想你可以尝试用黑客的方式来改变背景:
通过Java:
<style name="Material" parent="Theme.AppCompat.Light">
<item name="textHeaderMaxLines">@integer/text_header_max_lines</item>
<item name="trackAbstractMaxLines">@integer/track_abstract_max_lines</item>
<item name="activatableItemBackground">@drawable/activatable_item_background</item>
<!-- ActionMode Styles -->
<item name="android:windowActionModeOverlay">true</item>
<item name="windowActionModeOverlay">true</item>
<item name="actionModeBackground">@color/app_green_dark</item>
</style>
<style name="Material.AppBar" parent="Theme.AppCompat.NoActionBar">
<item name="android:textColorPrimaryInverse">@android:color/white</item>
<item name="android:actionMenuTextColor">@android:color/white</item>
<item name="android:textColorSecondary">@android:color/white</item>
<item name="android:background">@color/app_green</item>
<item name="android:color">@android:color/white</item>
<item name="android:textColor">@android:color/white</item>
</style>
<style name="Material.AppBar.ActionMode" parent="Widget.AppCompat.Light.ActionMode.Inverse">
<item name="android:background">@color/app_green_dark</item>
</style>
使用hierarchyviewer.bat
分析布局,关注ActionMode
视图,您可以看到以下内容:(标题ID:action\u bar\u Title
,副标题ID:action\u SubTitle
)
2.根据我们在上面找到的ID找到specifyTextView
,然后做任何你想做的事情
/**
* To hack the title and subTitle in ActionMode
*/
private void hack() {
int titleID = Resources.getSystem().getIdentifier("action_bar_title", "id", "android");
View titleView = getWindow().getDecorView().findViewById(titleID);
if ((titleView != null) && (titleView instanceof TextView)) {
((TextView) titleView).setBackgroundColor(Color.RED);
}
int subTitleID = Resources.getSystem().getIdentifier("action_bar_subtitle", "id", "android");
View subTitleView = getWindow().getDecorView().findViewById(subTitleID);
if ((subTitleView != null) && (subTitleView instanceof TextView)) {
((TextView) subTitleView).setBackgroundColor(Color.GREEN);
}
}
3.您可以在ActionMode
create时调用此方法,例如:在onCreateActionMode()
中。最终结果:
通过样式:
<style name="Material" parent="Theme.AppCompat.Light">
<item name="textHeaderMaxLines">@integer/text_header_max_lines</item>
<item name="trackAbstractMaxLines">@integer/track_abstract_max_lines</item>
<item name="activatableItemBackground">@drawable/activatable_item_background</item>
<!-- ActionMode Styles -->
<item name="android:windowActionModeOverlay">true</item>
<item name="windowActionModeOverlay">true</item>
<item name="actionModeBackground">@color/app_green_dark</item>
</style>
<style name="Material.AppBar" parent="Theme.AppCompat.NoActionBar">
<item name="android:textColorPrimaryInverse">@android:color/white</item>
<item name="android:actionMenuTextColor">@android:color/white</item>
<item name="android:textColorSecondary">@android:color/white</item>
<item name="android:background">@color/app_green</item>
<item name="android:color">@android:color/white</item>
<item name="android:textColor">@android:color/white</item>
</style>
<style name="Material.AppBar.ActionMode" parent="Widget.AppCompat.Light.ActionMode.Inverse">
<item name="android:background">@color/app_green_dark</item>
</style>
或者您可以尝试设置一个android:actionModeStyle
来控制标题和字幕背景,但是android:background
似乎不适用于此:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="android:actionModeBackground">@android:color/white</item>
<item name="android:actionModeStyle">@style/TestActionModeStyle</item>
</style>
<style name="TestActionModeStyle">
<item name="android:titleTextStyle">@style/TestTitleStyle</item>
<item name="android:subtitleTextStyle">@style/TestSubTitleStyle</item>
</style>
<style name="TestTitleStyle">
<item name="android:textColor">@android:color/black</item>
<item name="android:background">@android:color/holo_red_dark</item>
</style>
<style name="TestSubTitleStyle">
<item name="android:textColor">@android:color/black</item>
<item name="android:background">@android:color/holo_green_dark</item>
</style>
我不确定我是否理解你的问题,如果你需要根据你的editText状态改变背景,你可以在你的editText中这样做background@MuhannadFakhouri它不是EditText
,而是ActionMode
中的默认TextView
标题。我使用ActionMode
对象上的setTitle()
设置文本本身。我想知道如何设置样式,因为我从其他帖子中收集到的当前解决方案似乎没有任何作用。谢谢,@Bill。一旦有机会,我会尽快查看。我最终按照建议创建了一个自定义视图。谢谢你的回答,@Bill@jwir3是的,我在我的项目中使用同样的方法!