以编程方式更改Spinner样式

3

我需要实现在按钮点击时更改应用程序主题的功能。我已经成功地更改了按钮、编辑文本和文本视图的样式。但是在更改Spinner的样式时遇到了问题。

唯一成功的更改是更改背景颜色:

spinnerRoutes.setBackgroundResource(R.drawable.dark_theme_spinner_background);

但是只有标题行的背景改变了。我还需要改变行和项的文本颜色,以及下拉列表行的背景

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

是否可以通过编程方式更改下拉列表的样式?


你必须使用一些库来定制旋转选择器。 - Hasmukh Barochiya
请点击以下链接:https://dev59.com/TG855IYBdhLWcg3waDeR希望对您有所帮助。 - Galax
@HasmukhBarochiya,你能推荐一些吗? - AnZ
1
请尝试访问以下链接:http://www.coderzheaven.com/2011/07/18/customizing-a-spinner-in-android/ - Hasmukh Barochiya
2个回答

4
如果您想自定义下拉菜单的样式,您需要在适配器类中覆盖getView()函数。同时,如果您想控制Spinner上显示的文本,您需要使用spinner.onItemSelectedListener()并在回调方法中修改文本视图。
以下是自定义Spinner下拉菜单的示例代码:
     @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;
        }

自定义 spinner 文本(出现在 spinner 顶部的文本):

@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));

            }

你看,我在创建时已经将其定制成这样了。想象一下它是白色的。现在我想把它的颜色改成深色的。但是怎么做呢? - AnZ
我应该将白色想象成什么,指定视图(下拉菜单背景或下拉列表背景)? - DJphy

3

当涉及到完全定制Spinner中的项目时,其他人是正确的。

但如果您唯一需要更改的是项目中文本的样式(意味着您仍然希望使用TextView,但带有不同的字体、颜色和重力),那么您只需要将自定义项目布局传递给适配器:

这就是您的适配器应该看起来的样子:

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" />

请确保TextView是xml中唯一的视图,并且其ID与上述指定的相同,这样默认适配器才能识别它。

希望对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接