我可以在Xamarin.Forms中以编程方式更改styles.xml吗?

时间:2018-01-26 16:04:35

标签: c# android xamarin xamarin.forms

我们有一款具有可自定义颜色的应用。这使得列表视图中所选项目的橙色Android默认值有时看起来很糟糕。我们想要更改列表视图所选项目的颜色。

我知道如何在我们的页面的代码隐藏(xaml.cs)中执行此操作,并且我知道您可以在styles.xml中静态更改它。但是因为列表视图的颜色可能会发生变化,所以我们可能会选择与我们选择的任何颜色类似的问题。

有没有办法从代码中访问和更改styles.xml值?

2 个答案:

答案 0 :(得分:0)

您可以使用Xamarin Themes进行操作,其中有一个清晰的教程。

然后您可以使用以下内容更改主题

void OnPickerSelectionChanged(object sender, EventArgs e)
{
    Picker picker = sender as Picker;
    Theme theme = (Theme)picker.SelectedItem;

    ICollection<ResourceDictionary> mergedDictionaries = Application.Current.Resources.MergedDictionaries;
    if (mergedDictionaries != null)
    {
        mergedDictionaries.Clear();

        switch (theme)
        {
            case Theme.Dark:
                mergedDictionaries.Add(new DarkTheme());
                break;
            case Theme.Light:
            default:
                mergedDictionaries.Add(new LightTheme());
                break;
        }
    }
}

更新:

如果要更改android上的选择,则必须在android styles.xml文件中进行选择,要动态更改它,就必须编写一个效果:

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <color name="DarkYellow">#FF00FF</color>
  <style name="Theme.MyHoloLight" parent="android:Theme.Holo.Light">
    <item name="android:colorPressedHighlight">@color/DarkYellow</item>
    <item name="android:colorLongPressedHighlight">@color/DarkYellow</item>
    <item name="android:colorFocusedHighlight">@color/DarkYellow</item>
    <item name="android:colorActivatedHighlight">@color/DarkYellow</item>
    <item name="android:activatedBackgroundIndicator">@color/DarkYellow</item>
  </style>
</resources>

答案 1 :(得分:0)

我们还可以使用Backgroundcolor Bindable属性创建ViewCell渲染器。有了这个,我们可以做的是将绑定属性的所需颜色设置为xaml本身,这将在其渲染器中设置颜色,以便我们可以根据要求提供不同的颜色。