xamarin - 如何在 Xamarin.Forms 中使用 Android 控件
问题描述
我正在尝试创建具有 Android 评分栏和 iOS 滑块的 Xamarin 表单。下面是我正在使用的 XAML 文件。当我尝试在 Android 设备中运行时,我可以看到标签但看不到评分栏。请帮忙。
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ios="clr-namespace:UIKit;assembly=Xamarin.iOS;targetPlatform=iOS"
xmlns:android="clr-namespace:Android.Widget;assembly=Mono.Android;targetPlatform=Android"
xmlns:androidForms="clr-namespace:Xamarin.Forms;assembly=Xamarin.Forms.Platform.Android;targetPlatform=Android"
mc:Ignorable="d"
x:Class="XamrineTest.Page1">
<StackLayout BackgroundColor="Green" >
<Label Text="Welcome to Page1!" BackgroundColor="Gray"/>
<ios:UIDatePicker />
<ios:UISlider MaxValue="10" Value="{Binding SlideValue}" />
<ios:UIStepper />
<ios:UISwitch />
<android:RatingBar BackgroundColor="Lavender" HorizontalOptions="Center"
Scale="0.4"
StarCount="5" Step="0.5" Margin="0" SelectedColor="Orange"
HeightRequest="40" UnSelectedColor="LightGray" Rate="{Binding Rating,Mode=TwoWay}">
</android:RatingBar>
</StackLayout>
</ContentPage>
解决方案
我认为您的代码中有几个问题:
1.你使用的命名空间不对,改成这样:
<androidWidget:RatingBar x:Arguments="{x:Static androidLocal:MainActivity.Instance}" >
</androidWidget:RatingBar>
并使用以下命名空间:
xmlns:androidWidget="clr-namespace:Android.Widget;assembly=Mono.Android;targetPlatform=Android"
2.我们还需要下面的代码来初始化androidWidget:RatingBar
x:Arguments="{x:Static androidLocal:MainActivity.Instance}"
定义android代码的Instance
in :MainActivity
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
internal static MainActivity Instance { get; private set; } // define Instance
protected override void OnCreate(Bundle bundle)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(bundle);
Instance = this;// init Instance
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());
}
}
有关更多详细信息,您可以查看:https ://docs.microsoft.com/en-us/xamarin/xamarin-forms/platform/native-views/xaml
而且这个链接还包含了一些有用的示例,大家可以参考一下。
更新:
是的,您也可以使用x:Arguments="{x:Static androidForms:Forms.Context}"
,并且以下代码可以正常工作。
<android:RatingBar x:Arguments="{x:Static androidForms:Forms.Context}" NumStars="5" StepSize="1.0" Rating="{Binding Rating,Mode=TwoWay}" />
笔记:
您在 RatingBar 中使用的以下属性不存在。
BackgroundColor="Lavender" HorizontalOptions="Center"
Scale="0.4"
StarCount="5" Step="0.5" Margin="0" SelectedColor="Orange"
HeightRequest="40" UnSelectedColor="LightGray" Rate="{Binding Rating,Mode=TwoWay}"
推荐阅读
- sql - postgresql如何在冲突时更新另一个表
- c# - 如何在 C# 中运行 PowerShell 命令
- qt - 使用 gstreamer、Qt 和 weston 在固定位置显示多个 h264 视频流
- mysql - 如何在此查询中使用 have
- amazon-web-services - 使用无服务器获取当前 CF 堆栈值
- azure - Azure Policy - 设置密钥/机密的到期时间
- vb.net - ComboBox 在加载到新表单 VB.Net 时显示第一项
- r - 当我使用 `dplyr::mutate()` 时,为什么 `furrr::future_map_int()` 比 `purrr::map_int()` 慢?
- typescript - 在打字稿中导入处理程序的 Fastify 模式
- r - 从相关矩阵中提取某些值