如何在Android中更改微调器的列表背景颜色

Noa*_*chi 16 android android-spinner

我正在动态创建一个新的微调器,如何更改列表背景颜色?

当前的背景颜色是深灰色:

两个布偶 当我将微调器的背景属性更改为白色时,我遇到了这种不必要的情况:

两个布偶 我希望它在活动中是透明的,只有当我打开微调器(按下它)时,我希望背景为白色.

这是我正在创建微调器的代码:

我正在创建适配器:

    mAdapter = new ArrayAdapter<String>(getApplicationContext(), 
                                     R.layout.spinner, R.id.Language, lang);
    LinearLayout layoutHolder = 
                         (LinearLayout)findViewById(R.id.RegisterFormLayout);
    Spinner spinner = new Spinner(getApplicationContext());
    LayoutParams layParams= new 
                Spinner.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,       
                                         ViewGroup.LayoutParams.WRAP_CONTENT);
    spinner.setLayoutParams(layParams);
    spinner.setAdapter(mAdapter); 
    spinner.setOnItemSelectedListener(new myOnItemSelectedListener());
    if (lang != null)
       spinner.setSelection(lang.intValue());
    spinnerList.add(spinner);
    layoutHolder.addView(spinner);
Run Code Online (Sandbox Code Playgroud)

我的spinner.xml布局是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" 
android:id="@+id/SpinnerLayout">

<TextView
    android:id="@+id/Language"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="#ffffff"
    android:background="#00ffffff"
    android:padding="5dp" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

Rah*_*til 23

我认为通过主题更改无法实现此要求.因为Spinner构造函数只有在print xml中写入时才会在popupBackground attr上赋值,否则它将使用默认主题值.如下

   <Spinner
    android:id="@+id/spinner1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:popupBackground="@android:color/holo_green_dark" />
Run Code Online (Sandbox Code Playgroud)

//只是尝试更改弹出背景

  • 它周围增加了一个令人讨厌的黑色边框 (2认同)

Noa*_*chi 12

解决方案是在动态创建微调器时添加此代码:

spinner.setPopupBackgroundResource(R.drawable.spinner);
Run Code Online (Sandbox Code Playgroud)

并在Drawable文件夹下创建spinner.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="#ffffff" />
</shape>
Run Code Online (Sandbox Code Playgroud)

此解决方案要求API级别为16及以上.

结果:

两个布偶