【问题标题】:Change Spinner style programmatically以编程方式更改 Spinner 样式
【发布时间】:2015-05-27 19:58:11
【问题描述】:

我需要实现在按钮单击时向上更改应用程序主题的功能。 我已经成功地改变了按钮、edittexts 和 textviews 的样式。但面临Spinner 风格变化的问题。

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

spinnerRoutes.setBackgroundResource(R.drawable.dark_theme_spinner_background);

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

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

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

【问题讨论】:

标签: android android-layout android-spinner


【解决方案1】:

如果您想自定义微调器的下拉菜单,您需要覆盖适配器类中的 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));

            }

【讨论】:

  • 你看,我在创作的时候已经这样定制了。想象它是白色的。现在我想把它的颜色改成深色。但是怎么做呢?
  • 我应该把什么想象成白色,指定视图(微调器背景或下拉菜单背景)。
【解决方案2】:

在完全自定义微调器中的项目时,其他人是对的。 但是,如果您唯一需要更改的是项目中文本的样式(这意味着您仍然想要一个文本视图,但使用不同的字体、颜色、重力),那么您只需向适配器传递一个自定义项目布局:

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

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 与上面指定的相同,以便默认适配器可以识别它。

希望有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 2010-09-11
    • 2019-04-11
    相关资源
    最近更新 更多