Xamarin.Forms-Android。我在Android平台上使用Button Renderer将图像添加到Android.Widget.Button。图像文件存储在Assets文件夹中,而不是通常的Drawable文件夹中。我将XAML中的按钮的ImageSource设置为正常,然后在渲染器中获取图像位置并在资产文件夹中搜索它。可绘制对象是正确创建的,并通过检查匹配的宽度和高度等进行确认,但是它只是未显示在按钮本身上。该图像文件具有AndroidAsset的构建操作,但是我也尝试了AndroidResource,但它仍然无法正常工作。
FileImageSource fis = (FileImageSource)Element.ImageSource;
Stream stream = context.Assets.Open("images/" + fis.File);
Drawable d = Drawable.CreateFromStream(stream, null);
stream.Close();
Control.SetCompoundDrawablesWithIntrinsicBounds(null, d, null, null);
您可以像下面的代码一样创建自定义渲染器。
[assembly: ExportRenderer(typeof(Xamarin.Forms.Button), typeof(CustomButton.Droid.CustomButton))]
namespace CustomButton.Droid
{
public class CustomButton:ButtonRenderer
{
Context mcontext;
public CustomButton(Context context) : base(context)
{
mcontext = context;
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
{
base.OnElementChanged(e);
AssetManager assets = mcontext.Assets;
Stream input = assets.Open("main.png");
var mydraw=Drawable.CreateFromStream(input, null);
Control.Background = mydraw;
}
}
}
以xamarin形式使用。
<StackLayout>
<!-- Place new controls here -->
<Label Text="Welcome to Xamarin.Forms!"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" />
<Button Text="Button"/>
</StackLayout>
这里正在运行屏幕截图。
更新
如果使用Control.SetCompoundDrawablesWithIntrinsicBounds(null, mydraw, null, null);
,它可以在文字上方显示图像。
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
{
base.OnElementChanged(e);
AssetManager assets = mcontext.Assets;
Stream input = assets.Open("person.jpg");
var mydraw = Drawable.CreateFromStream(input, null);
Control.SetCompoundDrawablesWithIntrinsicBounds(null, mydraw, null, null);
}