如何解决使用材料设计将 androidx.appcompat.widget.SearchView操作栏中的搜索图标更改为 androidx.legacy:legacy-support-v4:1.0.0
我被这个问题困了好几天..我决定添加一个底部导航,这迫使我将我的设计更改为材料设计。 (https://material.io/components/bottom-navigation/android)。我的操作栏现在有几个样式更改。更准确地说,是它的 androidx.appcompat.widget.SearchView。如下图所示,搜索图标是黑色的,我需要它是白色的。
对于这里回答的类似问题,我已经尝试了很多解决方案,但似乎没有一个能解决问题。我目前的情况如下:
kwarg
那些是我的styles.xml 的相关部分:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
android:theme="@style/MyActionBarTheme"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- "toolbar top right hand items"-->
<item
android:id="@+id/activityExecutionsMenu_search"
android:icon="@drawable/ic_search_white"
android:title="@string/activityExecutionsFragments_menu_search_hint"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="always" />
<item
android:id="@+id/activityExecutionsMenu_group"
android:icon="@drawable/ic_group"
android:title="@string/activityExecutionsFragments_menu_group"
app:showAsAction="always"/>
<item
android:id="@+id/activityExecutionsMenu_filter"
android:icon="@drawable/ic_filter"
android:title="@string/activityExecutionsFragments_menu_filter"
app:showAsAction="always"/>
<item
android:id="@+id/activityExecutionsMenu_sort"
android:icon="@drawable/ic_sort"
android:title="@string/activityExecutionsFragments_menu_filter"
app:showAsAction="always"/>
这是片段,它在我的应用程序的几个部分中被重用,它创建了菜单,包括 onCreateOptionsMenu,其中一些其他有希望的 SO 答案尝试似乎完成了工作,但对我不起作用>
<style name="MyActionBarTheme" parent="ThemeOverlay.MaterialComponents.Dark">
<!-- Customize your theme here. -->
<item name="android:actionBarWidgetTheme">@style/MyPopupMenuTheme_withRoundCorners_blue</item>
<item name="actionOverflowMenuStyle">@style/MyPopupMenuTheme_withRoundCorners_blue</item>
<item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge
</item>
<item name="android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall
</item>
<item name="actionMenuTextColor">@color/white</item>
<!--<item name="colorControlnormal">@color/stress10</item>-->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorPrimary</item>
<!--<item name="android:textColorSecondary">@color/mood6</item>-->
<item name="android:windowBackground">@color/backgroundColor</item>
<item name="popupMenuStyle">@style/MyPopupMenuTheme_withRoundCorners_blue</item>
<item name="android:popupMenuStyle">@style/MyPopupMenuTheme_withRoundCorners_blue</item>
<!--<item name="android:actionBarStyle">@style/MyTheme.ActionBarStyle</item>-->
<item name="android:actionButtonStyle">@style/myActionButtonStyle</item>
<item name="actionButtonStyle">@style/myActionButtonStyle</item>
</style>
<style name="myActionButtonStyle" parent="Widget.MaterialComponents.FloatingActionButton">
<item name="android:minWidth">30dp</item>
<item name="android:maxWidth">48dp</item>
<item name="android:width">36dp</item>
</style>
<style name="myPopupMenuTextAppearanceSmall" parent="@style/MaterialAlertDialog.MaterialComponents.Title.Text">
<item name="android:textColor">@color/colourAsLinkIndicatingAction</item>
</style>
<style name="myPopupMenuTextAppearanceLarge" parent="@style/MaterialAlertDialog.MaterialComponents.Title.Text">
<item name="android:textColor">@color/colourAsLinkIndicatingAction</item>
</style>
<style name="MyPopupMenuTheme_withRoundCorners" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorPrimary</item>
<item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge
</item>
<item name="android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall
</item>
<item name="android:tint">@color/colourAsLinkIndicatingAction</item>
<item name="android:textColor">@color/colourAsLinkIndicatingAction</item>
<item name="android:popupMenuStyle">@drawable/rounded_corners_background_for_popupmenu</item>
<item name="android:popupBackground">@drawable/rounded_corners_background_for_popupmenu</item>
<item name="popupMenuStyle">@drawable/rounded_corners_background_for_popupmenu</item>
<item name="background">@drawable/rounded_corners_background_for_popupmenu</item>
<item name="android:colorBackground">@color/colourAsLinkIndicatingAction</item>
</style>
<style name="MyPopupMenuTheme_withRoundCorners_blue" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorPrimary</item>
<item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge
</item>
<item name="android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall
</item>
<item name="android:textColor">@color/colourAsLinkIndicatingAction</item>
<item name="android:popupMenuStyle">@drawable/rounded_corners_background_for_popupmenu_blue</item>
<item name="android:popupBackground">@drawable/rounded_corners_background_for_popupmenu_blue</item>
<item name="popupMenuStyle">@drawable/rounded_corners_background_for_popupmenu_blue</item>
<item name="background">@drawable/rounded_corners_background_for_popupmenu_blue</item>
<item name="android:colorBackground">@color/colourAsLinkIndicatingAction</item>
</style>
这些是我的 gradle 文件中使用的一些依赖项
...
import android.app.SearchManager;
...
import import androidx.appcompat.widget.SearchView;
...
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.linearlayoutmanager;
import androidx.recyclerview.widget.RecyclerView;
...
public class ActivityExecutions_Fragment
extends DialogFragment
{
public View view;
private Toolbar myToolbar;
public SearchView searchView;
...
/*
* empty constructor
*/
public ActivityExecutions_Fragment(){}
/*
* use this to instantiate fragment
*
* pass parameters to individualize behavIoUr
*/
public static ActivityExecutions_Fragment newInstance(String source)
{
ActivityExecutions_Fragment frag = new ActivityExecutions_Fragment();
Bundle args = new Bundle();
args.putString("source",source);
frag.setArguments(args);
return frag;
}
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState)
{
FrameLayout frameLayout = new FrameLayout(getActivity());
...
populateViewForOrientation(inflater,frameLayout);
return frameLayout;
}
/*
* remove title bar
*/
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
Dialog dialog = super.onCreateDialog(savedInstanceState);
// request a window without the title
dialog.getwindow().requestFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
/**
similar behavIoUr as onCreate() in activities
adjusted for fragments
*/
private void populateViewForOrientation(LayoutInflater inflater,ViewGroup viewGroup)
{
viewGroup.removeAllViewsInLayout();
if(deviceIsCurrentlyInPortraitOrientation)
{
view = inflater.inflate(R.layout.activity_executions_fragment,viewGroup);
}
else
{
view = inflater.inflate(R.layout.activity_executions_fragment,viewGroup);
}
...
myToolbar = (Toolbar) view.findViewById(R.id.toolbar_activityExecutions);
getActivity().getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close_white);
getActivity().getSupportActionBar().setHomeButtonEnabled(true);
getActivity().getSupportActionBar().setdisplayHomeAsUpEnabled(true);
getActivity().getSupportActionBar().setdisplayShowHomeEnabled(true);
}
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) {
menu.clear();
inflater.inflate(R.menu.activity_executions_menu,menu);
super.onCreateOptionsMenu(menu,inflater);
searchView = (SearchView)menu.findItem(R.id.activityExecutionsMenu_search).getActionView();
searchView.setMaxWidth(Integer.MAX_VALUE);
// this attempt does not work icon stays black
ImageView searchIcon=
searchView.findViewById(androidx.appcompat.R.id.search_mag_icon);
searchIcon.setColorFilter(getResources().getColor(R.color.white),android.graphics.PorterDuff.Mode.SRC_IN);
);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
menu.findItem(R.id.activityExecutionsMenu_group).setIcon(R.drawable.ic_ungroup);
toolbar_searchButton = menu.findItem(R.id.activityExecutionsMenu_search);
toolbar_groupButton = menu.findItem(R.id.activityExecutionsMenu_group);
toolbar_filterButton = menu.findItem(R.id.activityExecutionsMenu_filter);
toolbar_sortButton = menu.findItem(R.id.activityExecutionsMenu_sort);
}
}
如何让搜索图标再次变白?
我应该删除 legacy.support 库吗?对应的依赖是否太多?扩展 DialogFragment 是否存在问题?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。