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

Gar*_*yer 7 c# android xamarin xamarin.forms

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

我知道如何在我们页面的代码背后(xaml.cs)中执行此操作,并且我知道您可以在styles.xml中进行静态更改。但是因为listview颜色可以更改,所以无论选择哪种颜色,我们都可能遇到类似的问题。

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

LeR*_*Roy 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:

如果你想改变android上的选择,你必须在你的android styles.xml文件中进行,要动态改变它,你必须编写一个effect:

<?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>
Run Code Online (Sandbox Code Playgroud)