在 Xamarin Forms 中,在我的設定頁面中,我可以在 Light 和 Dark 主題之間切換。
每當我切換主題時,我都會MessagingCenter告訴所有聽眾主題已更改。
在我的CustomPickerRenderer for iOS我有這個代碼告訴選擇器切換主題。
[assembly: ExportRenderer(typeof(Picker), typeof(CustomPickerRenderer))]
namespace CykelStaden.iOS.Renderers
{
public class CustomPickerRenderer : PickerRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
MessagingCenter.Subscribe<object, string>(this, "ThemeIsDark", (sender, arg) =>
{
this.OverrideUserInterfaceStyle = UIUserInterfaceStyle.Dark;
});
MessagingCenter.Subscribe<object, string>(this, "ThemeIsLight", (sender, arg) =>
{
this.OverrideUserInterfaceStyle = UIUserInterfaceStyle.Light;
});
}
}
}
現在上面的 iOS 代碼運行良好,但是我如何為它撰寫相同的代碼
CustomPickerRenderer for Android
我已經搜索了 2 天,但我不知道該怎么做。
請幫幫我。
uj5u.com熱心網友回復:
我想你正在尋找這樣的東西
Application.Current.RequestedThemeChanged = (s, a) =>
{
Config.LoadTheme();
};
此 存盤庫包含示例應用程式,可在 Android 和 Windows 上運行時更改主題,因此您可以嘗試。
uj5u.com熱心網友回復:
你可以參考下面的代碼:
我在 App.xaml 中設定了樣式。您也可以從檔案中添加主題。
<Application.Resources>
<ResourceDictionary>
<Style TargetType="Picker" x:Key="DarkTheme">
<Setter Property="BackgroundColor" Value="Black"></Setter>
<Setter Property="TextColor" Value="White"></Setter>
</Style>
<Style TargetType="Picker" x:Key="LightTheme">
<Setter Property="BackgroundColor" Value="White"></Setter>
<Setter Property="TextColor" Value="Black"></Setter>
</Style>
</ResourceDictionary>
</Application.Resources>
Xml:
<Picker x:Name="picker" Title="Select a Theme" TitleColor="Green" SelectedIndexChanged="picker_SelectedIndexChanged">
<Picker.ItemsSource>
<x:Array Type="{x:Type x:String}">
<x:String>Dark</x:String>
<x:String>Light</x:String>
</x:Array>
</Picker.ItemsSource>
</Picker>
后面的代碼:
public Page10()
{
InitializeComponent();
picker.Style = (Style)App.Current.Resources["DarkTheme"];
}
private void picker_SelectedIndexChanged(object sender, EventArgs e)
{
switch (picker.SelectedItem.ToString())
{
case "Dark":
MessagingCenter.Send<Page10>(this, "Dark");
break;
case "Light":
MessagingCenter.Send<Page10>(this, "Light");
break;
}
}
protected override void OnDisappearing()
{
base.OnDisappearing();
MessagingCenter.Unsubscribe<Page10>(this, "Dark");
MessagingCenter.Unsubscribe<Page10>(this, "Light");
}
自定義渲染器:
[assembly: ExportRenderer(typeof(Picker), typeof(CustomPickerRenderer))]
namespace App15.Droid
{
class CustomPickerRenderer : PickerRenderer
{
public CustomPickerRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
var picker = e.NewElement as Picker;
MessagingCenter.Subscribe<Page10>(this, "Dark", (sender) =>
{
picker.Style = (Style)App.Current.Resources["DarkTheme"];
});
MessagingCenter.Subscribe<Page10>(this, "Light", (sender) =>
{
picker.Style = (Style)App.Current.Resources["LightTheme"];
});
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/362795.html
標籤:C# 安卓 ios xamarin.forms 安卓主题
下一篇:為什么訊息中心的資料沒有發送過去
