微调文本颜色是白色?

时间:2014-04-24 21:11:52

标签: android android-spinner

我在布局中使用了一个Spinner。 我使用这段代码:

...
        <Spinner
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:id="@+id/spin_prod_promo" />
...

现在,当我分配它的适配器时,我使用以下代码:

...
 ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(mcontext, android.R.layout.simple_spinner_item, mylabels);
 // Drop down layout style
 dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 Spinner myspinner = (Spinner) V.findViewById(R.id.spin_prod_promo);
 // attaching data adapter to spinner
 myspinner.setAdapter(dataAdapter);
...

我的问题是,微调器的文本颜色是白色的...因此不可读,我不会在代码中的任何地方将它设置为这样。

“有趣的事情”是我在不同的活动中使用完全相同的代码,并且Spinner具有正确的颜色。 不同之处在于,在此(BAD)情况下,微调器位于片段中。

  • 因此,如果微调器处于活动状态 - 颜色很好
  • 如果微调器位于片段上 - 颜色混乱

我尝试使用自定义布局来处理微调器的项目,但我所做的就是让微调器看起来已禁用。此外,下拉列表中总有一个项目具有背景颜色(只有点击它才会看到它,然后只要我点击就可以看到内容) 这里发生了什么? 我该如何解决这个问题?

我能做些什么来将微调器的颜色设置为主题的颜色? 片段中的所有其他小部件都具有正常颜色......

谢谢

7 个答案:

答案 0 :(得分:24)

  

Context mcontext = getActivity()。getApplicationContext();这是错的吗?

是的,这是错误的。只有当您知道确切原因时才使用getApplicationContext() getApplicationContext()。特别是,永远不要使用getApplicationContext()来扩展布局,如it will screw things up by not using the right theme

我会完全删除mcontext,将其替换为片段中所需的getActivity()

答案 1 :(得分:6)

试试吧..

String[]array={"A","B","C","D"};
ArrayAdapter<String> adapter=new ArrayAdapter<String>  (**YourClassName.this**,android.R.layout.simple_list_item_checked,array);
listView.setAdapter(adapter);

注意 YourClassName.this是您当前的班级名称。此代码适用于我。

答案 2 :(得分:2)

我找到了解决方案。它是为Spinner的项声明一个自定义布局,并使用它而不是默认布局。在自定义布局中,我将TextView文本的颜色设置为黑色。 它以这种方式工作。 所以代码:(promospin_row.xml)

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:textColor="#000000"
        android:id="@+id/tv_promo_txt"
        android:paddingLeft="5dp"
        android:paddingTop="5dp" />
</LinearLayout>

和java代码:

  // Creating adapter for spinner
  ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(mcontext, R.layout.promospin_row, R.id.tv_promo_txt, mylabels);
  // Drop down layout style
  dataAdapter.setDropDownViewResource(R.layout.promospin_row);
  Spinner myspinner = (Spinner) V.findViewById(R.id.spin_prod_promo);
  // attaching data adapter to spinner
  myspinner.setAdapter(dataAdapter);

这样,项目文本变为黑色。而且没有其他异常现象。 感谢@CommonsWare的时间

答案 3 :(得分:2)

只需使用null而不是getApplicationContext()。 它必须工作。 我已经尝试过它的工作了。 在您的应用程序中,您可以使用null而不是mcontext

答案 4 :(得分:1)

我也有这个问题。这不是一个解决方案,而是一个潜在的解决方法,供其他人尝试以防上述解决方案无效。

将选择微调器时显示的弹出窗口的背景颜色设置为与白色文本颜色形成对比的颜色。

<Spinner
    ...
    android:popupBackground="@color/layout_background"
    ... />

这里我将layout_background定义为深灰色#565656,位于我的src / main / java / res / values文件夹中名为colors.xml的单独文件中。

答案 5 :(得分:0)

另一种解决方案是确实使用GetApplication()作为上下文而不是

getActivity().getApplicationContext();

这样我就可以使用默认的项目布局而无需声明新的自定义布局。

所以我猜,CommonsWare是正确的。正是这种背景让事情变得糟透了。 请@Commonsware,让你的评论回答,这样我就可以接受,因为你应该得到它。

修改

当你写下你的答案时,我正在写这个,这就是为什么我似乎没有看到你的答案:)

答案 6 :(得分:0)

只需使用getBaseContext()而不是mcontext。 为我工作。我在AutoCompleteTextView的onItemClick函数中设置了微调器的适配器,并且在使用getBaseContext()之前遇到了相同的文本颜色问题。希望这个答案有所帮助。