以编程方式更改Spinner样式

时间:2015-05-27 11:27:59

标签: android android-layout android-spinner

我需要实现在按钮点击时更改应用程序主题的功能。 我已经成功更改了按钮,edittexts和textview的样式。但面临改变Spinner风格的问题。

唯一成功的变化是背景颜色的变化:

spinnerRoutes.setBackgroundResource(R.drawable.dark_theme_spinner_background);

但是只有标题行的背景发生了变化。我还需要更改行和项的textColor ,以及微调器行的背景

我已经尝试了很多类似的stackoverflow解决方案,但没有一个能够工作。

是否有可能以编程方式更改微调器的样式?

2 个答案:

答案 0 :(得分:3)

如果你想自定义微调器的下拉菜单,你需要覆盖适配器类中的getView函数。如果你想控制Spinnner上出现的文本你需要这个spinner.onItemSelectedListener()并修改回调方法中的文本视图

自定义微调器下拉菜单的示例代码:

     @Override
        public View getDropDownView (int position, View convertView, ViewGroup parent) {

            /**The Adapter's view to be supplied for the spinner when constructing a spinner. */
            View view = super.getView(position, convertView, parent);
            TextView listView = (TextView) view.findViewById(android.R.id.text1);

            listView .setBackgroundColor(Color.parseColor(fontBack_BgnColor));

            listView .setHeight((int) heightPixels);
            listView .setGravity(Gravity.CENTER);
            listView .setTextSize(TypedValue.COMPLEX_UNIT_PX, 20);
            listView .setTextColor(Color.parseColor(fontColor));
            listView .setText(super.getItem(position));
            return view;
        }

自定义微调器文本(显示在微调器顶部的文本):

@Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {

                ((TextView) view).setTextSize(TypedValue.COMPLEX_UNIT_PX, 25);
                ((TextView) view).setTextColor(Color.parseColor(spinnerTextColor));

            }

答案 1 :(得分:2)

其他人在完全自定义微调器中的项目时是正确的。 但是,如果您需要更改的唯一内容是项目中的文本样式(意味着您仍然需要文本视图,但又说不同的字体,颜色,重力),那么您只需要将适配器传递给自定义项目布局: / p>

这是你的适配器应该是这样的:

spinner.setAdapter(new ArrayAdapter<String>(getActivity(), R.layout.custom_item, data)

其中custom_item是您创建的xml布局文件,如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@android:id/text1"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:textAppearance="?android:attr/textAppearanceListItemSmall"
         android:gravity="center"
         android:textColor="@android:color/red"
         android:paddingStart="?android:attr/listPreferredItemPaddingStart"
         android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
         android:minHeight="?android:attr/listPreferredItemHeightSmall" />

只需确保文本视图是该xml中唯一的视图,并且其id如上所述,因此默认适配器可以识别它。

希望有所帮助。