在我的应用程序主题中dropDownListViewStyle
,我拥有spinnerStyle
整个应用程序。但在一个片段中,我需要自定义样式的微调器dropDownListViewStyle
(我需要更改分隔线)。是否可以dropDownListViewStyle
在主题中设置其他微调器?
在微调器样式或布局中无法设置下拉分隔符。也无法在微调器样式或布局中设置 dropDownListViewStyle。
我真的很困惑,希望有人有答案。
在我的应用程序主题中dropDownListViewStyle
,我拥有spinnerStyle
整个应用程序。但在一个片段中,我需要自定义样式的微调器dropDownListViewStyle
(我需要更改分隔线)。是否可以dropDownListViewStyle
在主题中设置其他微调器?
在微调器样式或布局中无法设置下拉分隔符。也无法在微调器样式或布局中设置 dropDownListViewStyle。
我真的很困惑,希望有人有答案。
不幸的是,dropDownListViewStyle
被硬编码在Spinner
. 如果您查看源代码,您会发现DropdownPopup
扩展了ListPopupWindow
. 在ListPopupWindow
感兴趣的类中DropDownListView
,您可以找到构造函数:
public DropDownListView(Context context, boolean hijackFocus) {
super(context, null, com.android.internal.R.attr.dropDownListViewStyle);
// ...
}
因此,正如您所评估的,改变这一点的唯一方法是按主题。考虑到Spinner
问题正在用于Activity
需要基本主题的环境中,我只知道一种解决方法。不幸的是,唯一的办法就是改变Fragment
. 这意味着其中的所有 Spinners
内容都Fragment
将具有替代主题。Fragment
要在运行时更改主题,请onCreateView
执行以下操作:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// create ContextThemeWrapper from the original Activity Context with the custom theme
Context context = new ContextThemeWrapper(getActivity(), R.style.My_Custom_Theme);
// clone the inflater using the ContextThemeWrapper
LayoutInflater localInflater = inflater.cloneInContext(context);
// inflate using the cloned inflater, not the passed in default
return localInflater.inflate(R.layout.my_layout, container, false);
}
除此之外,您正在考虑创建一个 custom ,考虑到它是开源的Spinner
,这并不太难。