繁体   English   中英

微调文本颜色是白色?

[英]spinner text color is white?

我在布局中使用了一个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)情况下,微调器位于片段中。

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

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

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

谢谢

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

是的,这是错的。 只有在确切知道使用getApplicationContext()时才使用getApplicationContext() 特别是,永远不要使用getApplicationContext()扩展布局,因为它会因为不使用正确的主题而搞砸了

我会完全删除mcontext ,用片段中需要的getActivity()替换它。

试试吧..

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是你当前的类名。这段代码对我有用。

我找到了解决方案。 它是为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的时间

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

我也有这个问题。 这不是解决方案,而是其他人在上述解决方案不起作用时尝试的潜在解决方法。

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

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

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

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

getActivity().getApplicationContext();

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

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

编辑

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM