针对不同微调器样式的不同dropDownListView样式

时间:2013-08-16 09:03:23

标签: android android-spinner android-theme android-styles

在我的应用主题中,我有dropDownListViewStylespinnerStyle用于整个应用程序。但在一个片段中,我需要使用自定义样式dropDownListViewStyle的微调器(我需要更改分隔符)。是否可以在主题中设置带有其他dropDownListViewStyle的微调器?

在微调器样式或布局中无法设置下拉分隔符。也无法在微调器样式或布局中设置dropDownListViewStyle。

我真的被困了,希望有人有答案。

1 个答案:

答案 0 :(得分:3)

不幸的是,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); } 执行此操作:

Spinner

如果没有这个,那么你正在考虑创建一个自定义{{1}},考虑到它是开源的,它不是困难。