首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ImageSpan中可以使用Xamarin.Forms吗?

在ImageSpan中可以使用Xamarin.Forms吗?
EN

Stack Overflow用户
提问于 2014-08-24 06:31:59
回答 1查看 476关注 0票数 2

我试图在Xamarin.Forms.Labs中调整Xamarin.Forms.Labs中的ImageButtons,以图像和文本为中心(作为块)在图像按钮上呈现ImageButtons,而不是像渲染器的默认行为那样使图像对齐到按钮的左/右边缘。

我遇到了一个StackOverflow文章,它说这种布局可以在安卓中使用ImageSpan实现--但是,当我将代码翻译到Xamarin.Forms C#时,就会显示文本,而不是图像。有人能看出这个代码有什么明显的问题吗?

是ImageButton控件的ImageSource值。

代码语言:javascript
复制
var handler = new FileImageSourceHandler();

var bitmap = await handler.LoadImageAsync(source, this.Context);

if (bitmap != null)
{
    var bitmapWidth = this.ImageButton.ImageWidthRequest.Equals(0) ? bitmap.Width : (int)(this.ImageButton.ImageWidthRequest);
    var bitmapHeight = this.ImageButton.ImageHeightRequest.Equals(0) ? bitmap.Height : (int)(this.ImageButton.ImageHeightRequest);

    Drawable drawable = new BitmapDrawable(Resources, bitmap);
    var scaledDrawable = new ScaleDrawable(drawable, 0, bitmapWidth, bitmapHeight).Drawable;
    scaledDrawable.SetBounds(0, 0, bitmapWidth, bitmapHeight);

    var scaledBitmap = Bitmap.CreateScaledBitmap(bitmap, bitmapWidth, bitmapHeight, true);

    var leftPadding = (int)this.ImageButton.ButtonPadding.Left;
    var rightPadding = (int)this.ImageButton.ButtonPadding.Right;
    var topPadding = (int)this.ImageButton.ButtonPadding.Top;
    var bottomPadding = (int)this.ImageButton.ButtonPadding.Bottom;

    Control.SetPadding(leftPadding, topPadding, rightPadding, bottomPadding);
    Control.Gravity = GravityFlags.CenterHorizontal | GravityFlags.CenterVertical;

    switch (this.ImageButton.Orientation)
    {
        case ImageOrientation.ImageToRight:
            var rightButtonLabel = new SpannableString(string.Format("{0} ", this.Control.Text));
            //rightButtonLabel.SetSpan(new ImageSpan(scaledBitmap), rightButtonLabel.Length() - 1, rightButtonLabel.Length(), SpanTypes.InclusiveInclusive);
            //rightButtonLabel.SetSpan(new ImageSpan(scaledDrawable, SpanAlign.Bottom), rightButtonLabel.Length() - 1, rightButtonLabel.Length(), SpanTypes.InclusiveInclusive);
            //rightButtonLabel.SetSpan(new ImageSpan(scaledDrawable), rightButtonLabel.Length() - 1, rightButtonLabel.Length(), SpanTypes.InclusiveInclusive);
            rightButtonLabel.SetSpan(new ImageSpan(Forms.Context, scaledBitmap, SpanAlign.Bottom), rightButtonLabel.Length() - 1, rightButtonLabel.Length(), SpanTypes.InclusiveInclusive);
            Control.SetText(rightButtonLabel, Android.Widget.TextView.BufferType.Spannable);
            break;

        case ImageOrientation.ImageToLeft:
        default:
            var leftButtonLabel = new SpannableString(string.Format(" {0}", this.Control.Text));
            //leftButtonLabel.SetSpan(new ImageSpan(scaledBitmap), 0, 1, SpanTypes.InclusiveInclusive);
            //leftButtonLabel.SetSpan(new ImageSpan(scaledDrawable, SpanAlign.Bottom), 0, 1, SpanTypes.InclusiveInclusive);
            //leftButtonLabel.SetSpan(new ImageSpan(scaledDrawable), 0, 1, SpanTypes.ExclusiveExclusive);
            leftButtonLabel.SetSpan(new ImageSpan(Forms.Context, scaledBitmap, SpanAlign.Bottom), 0, 1, SpanTypes.InclusiveInclusive);
            Control.SetText(leftButtonLabel, Android.Widget.TextView.BufferType.Spannable);
            break;
    }
}

文字中心很好,但没有图像。我尝试了几个不同的ImageSpan重载,使用可绘制的位图,使用Forms.Context,但它们都没有工作。

在Xamarin.Forms?中使用ImageSpan是否存在一些限制?

EN

回答 1

Stack Overflow用户

发布于 2015-08-03 09:25:37

是的,这是一个古老的问题。不管怎样,我想帖子可以帮助解决这个问题。

只需将图像加载到某个(不可见的)视图中,ImageSpan图像就会显示出来。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25469116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档