Drawable未出现在Button Xamarin Forms Android中

问题描述 投票:0回答:1

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);
c# android xamarin xamarin.forms xamarin.android
1个回答
0
投票

您可以像下面的代码一样创建自定义渲染器。

[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>

这里正在运行屏幕截图。

enter image description here

更新

如果使用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);
        }

这里正在运行屏幕截图。enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.