如何更改微调箭头的颜色或可绘制

时间:2015-01-15 22:17:58

标签: android xml spinner

只想更改Spinner箭头(@color或@drawable)

的颜色

enter image description here

这是唯一能做某事的代码,它使得可绘制整个微调器的背景。 (我已经尝试了很多其他没有运气的想法)

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
...
<item name="android:spinnerStyle">@style/SpinnerColor</item>
</style>

<style name="SpinnerColor" parent="Base.Widget.AppCompat.Spinner">
    <item name="android:background">@drawable/ic_add_white_24dp</item>
</style>

以下是我如何给Spinner

充气
mNavigationSpinner = new Spinner(getSupportActionBar().getThemedContext());
mNavigationSpinner.setAdapter(spinnerAdapter);

mNavigationSpinner.setOnItemSelectedListener(this);
toolbar.addView(mNavigationSpinner);

3 个答案:

答案 0 :(得分:2)

这是我的修复。

这是我忘记的Toolbar中的一个样式调用。

在toolbar.xml中

:此

app:theme="@style/ThemeOverlay.AppCompat.Light"

更改为

app:theme="@style/ThemeOverlay.AppCompat"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"

this

相同

答案 1 :(得分:0)

尝试更改

<item name="android:spinnerStyle">@style/SpinnerColor</item>

<item name="android:actionDropDownStyle">@style/SpinnerColor</item>

其中

<item name="android:background">@drawable/ic_add_white_24dp</item>
SpinnerColor样式中的

StateListDrawable。 StateListDrawable的项目是9-patch drawables。

答案 2 :(得分:0)

好。您可以使用以下代码更改下拉箭头颜色

在你的styles.xml文件中

只需添加此属性即可。

laravel

例如。

    public class Item
    {
        public string Name { get; set; }
        public int Quantity { get; set; }
    }

    private void button2_Click(object sender, EventArgs e)
        {
        DataTable dt1 = new DataTable("dataTable1");
        dt1.Columns.Add("Name", typeof(string));
        dt1.Columns.Add("Quantity", typeof(int));

        DataRow r = dt1.NewRow();
        r["Name"] = "Item1";
        r["Quantity"] = 200;
        dt1.Rows.Add(r);

        r = dt1.NewRow();
        r["Name"] = "Item2";
        r["Quantity"] = 200;
        dt1.Rows.Add(r);

        r = dt1.NewRow();
        r["Name"] = "Item3";
        r["Quantity"] = 200;
        dt1.Rows.Add(r);

        r = dt1.NewRow();
        r["Name"] = "Item4";
        r["Quantity"] = 200;
        dt1.Rows.Add(r);


        dgGridView.DataSource = dt1;

        DataTable dt2 = new DataTable("dataTable1");
        dt2.Columns.Add("Name", typeof(string));
        dt2.Columns.Add("Quantity", typeof(int));

        DataRow r2 = dt2.NewRow();
        r2["Name"] = "Item1";
        r2["Quantity"] = 200;
        dt2.Rows.Add(r2);

        r2 = dt2.NewRow();
        r2["Name"] = "Item2";
        r2["Quantity"] = 50;
        dt2.Rows.Add(r2);

        r2 = dt2.NewRow();
        r2["Name"] = "Item3";
        r2["Quantity"] = 200;
        dt2.Rows.Add(r2);

        dataGridView1.DataSource = dt2;

        DataTable dtResult = new DataTable("dataTable1");
        dtResult.Columns.Add("Name", typeof(string));
        dtResult.Columns.Add("Quantity", typeof(int));

        List<Item> dt1Items = dt1.AsEnumerable().Select(row => new Item()
        {
            Name=row["Name"].ToString(),
            Quantity =Convert.ToInt32(row["Quantity"])
        }).ToList();

        List<Item> dt2Items = dt2.AsEnumerable().Select(row => new Item()
        {
            Name = row["Name"].ToString(),
            Quantity = Convert.ToInt32(row["Quantity"])
        }).ToList();

        foreach (Item item in dt1Items)
        {
            var matched = dt2Items.FirstOrDefault(f => f.Name == item.Name);
            var rr = dtResult.NewRow();

            if (matched == null) //Item does not exist in dataTable2 so add to dataTableResult
            {
                rr["Name"] = item.Name;
                rr["Quantity"] = item.Quantity;
                dtResult.Rows.Add(rr);

                continue;
            }

            //Item does exist but the subtraction == 0 do not add.
            if (item.Quantity - matched.Quantity == 0)
                continue;

//Else add diff to results
            rr["Name"] = item.Name;
            rr["Quantity"] = item.Quantity - matched.Quantity;
            dtResult.Rows.Add(rr);
        }

    dataGridView2.DataSource = dtResult;
}