【问题标题】:How to set Font Awseome icon on Floating Action Button?如何在浮动操作按钮上设置 Font Awesome 图标?
【发布时间】:2015-09-28 06:06:56
【问题描述】:

我正在尝试为浮动操作按钮使用字体真棒图标。我无法实施以下解决方案。 https://github.com/futuresimple/android-floating-action-button/issues/59

【问题讨论】:

  • 请将您尝试的代码添加到您的问题中。否则你的问题是题外话,很可能会被关闭。
  • @GeraldSchneider 我想知道如何在浮动操作按钮上添加文本,因为我没有得到任何解决方案。那么有没有办法在FAB上添加字体awseome图标。上面的 url 建议这个 public void setIconDrawable(@NonNull Drawable iconDrawable) 我无法理解我们如何使用这种方法来设置文本

标签: android font-awesome


【解决方案1】:

你应该使用官方的 Font Awesome 库,

https://github.com/bperin/FontAwesomeAndroid

FontAwesome库中有DrawableAwesome,你需要使用它来构造它

DrawableAwesome drable = new DrawableAwesome.DrawableAwesomeBuilder(Context context, int icon).build();

并在您的 FAB 中设置。 int icon 是字符串资源的 id 您还可以自定义渲染选项,如阴影、粗体等,只需检查 DrawableAwesome

另一个库可用,以防万一有人想检查。 https://github.com/JoanZapata/android-iconify

【讨论】:

    【解决方案2】:

    感谢 QAMAR,您在这里帮助了我。

    对于使用 Xamarin 的人,我将 DrawableAwesome.java 移植到 C#:

    using Android.Content;
    using Android.Graphics;
    using Android.Graphics.Drawables;
    using Android.Util;
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace YourNameSpace
    {
      public class DrawableAwesome : Drawable
      {
        private static float padding = 0.88f;
        private Context context;
        private string icon;
        private Paint paint;
        private int width;
        private int height;
        private float size;
        private int color;
        private bool antiAliased;
        private bool fakeBold;
        private float shadowRadius;
        private float shadowDx;
        private float shadowDy;
        private int shadowColor;
    
        public override int Opacity
        {
          get
          {
            return (int)Format.Translucent;
          }
        }
    
        public DrawableAwesome(string icon, int sizeDpi, int color, bool antiAliased, bool fakeBold, float shadowRadius, float shadowDx, float shadowDy, int shadowColor, Context context)
        {
          this.context = context;
          this.icon = icon;
          this.size = dpToPx(sizeDpi) * padding;
          this.height = dpToPx(sizeDpi);
          this.width = dpToPx(sizeDpi);
          this.color = color;
          this.antiAliased = antiAliased;
          this.fakeBold = fakeBold;
          this.shadowRadius = shadowRadius;
          this.shadowDx = shadowDx;
          this.shadowDy = shadowDy;
          this.shadowColor = shadowColor;
          this.paint = new Paint();
    
          paint.SetStyle(Paint.Style.Fill);
          paint.TextAlign = Paint.Align.Center;
          this.paint.Color = new Color(this.color);
          this.paint.TextSize = this.size;
          Typeface font = AppData.FontAwesomeTypeface;
          this.paint.SetTypeface(font);
          this.paint.AntiAlias = this.antiAliased;
          this.paint.FakeBoldText = this.fakeBold;
          this.paint.SetShadowLayer(this.shadowRadius, this.shadowDx, this.shadowDy, new Color(this.shadowColor));
        }
    
        public override void Draw(Canvas canvas)
        {
          float xDiff = (width / 2.0f);
          canvas.DrawText(icon, xDiff, size, paint);
        }
    
        public override int IntrinsicHeight
        {
          get
          {
            return height;
          }
        }
        public override int IntrinsicWidth
        {
          get
          {
            return width;
          }
        }
    
        public override void SetAlpha(int alpha)
        {
          paint.Alpha = alpha;
        }
    
        public override void SetColorFilter(ColorFilter cf)
        {
          paint.SetColorFilter(cf);
        }
    
        private int dpToPx(int dp)
        {
          DisplayMetrics displayMetrics = context.Resources.DisplayMetrics;
          int px = (int)Math.Round(dp * (displayMetrics.Xdpi / (int)DisplayMetricsDensity.Default));
          return px;
        }
    
        public class DrawableAwesomeBuilder
        {
          private Context context;
          private string icon;
          private int sizeDpi = 32;
          private int color = Color.White;
          private bool antiAliased = true;
          private bool fakeBold = true;
          private float shadowRadius = 0;
          private float shadowDx = 0;
          private float shadowDy = 0;
          private int shadowColor = Color.White;
    
          public DrawableAwesomeBuilder(Context context, string icon)
          {
            this.context = context;
            this.icon = icon;
          }
    
          public void SetSize(int size)
          {
            this.sizeDpi = size;
          }
    
          public void SetColor(int color)
          {
            this.color = color;
          }
    
          public void SetAntiAliased(bool antiAliased)
          {
            this.antiAliased = antiAliased;
          }
    
          public void SetFakeBold(bool fakeBold)
          {
            this.fakeBold = fakeBold;
          }
    
          public void SetShadow(float radius, float dx, float dy, int color)
          {
            this.shadowRadius = radius;
            this.shadowDx = dx;
            this.shadowDy = dy;
            this.shadowColor = color;
          }
    
          public DrawableAwesome build()
          {
            return new DrawableAwesome(icon, sizeDpi, color, antiAliased, fakeBold, shadowRadius, shadowDx, shadowDy, shadowColor, context);
          }
        }
      }
    }
    

    将 font_awesome.xml 添加到 Xamarin Android 项目中的 Values 文件夹后,您可以执行以下操作:

      DrawableAwesome drable = new DrawableAwesome.DrawableAwesomeBuilder(this.FabButton.Context, Resources.GetString(Resource.String.fa_whatevericonyouwant)).build();
      this.FabButton.SetImageDrawable(drable);
    

    this.FabButton 在哪里:

    private FloatingActionButton fabButton;
    public FloatingActionButton FabButton
    {
      get
      {
        if (this.fabButton!= null)
          return fabButton;
    
        fabButton= FindViewById<FloatingActionButton>(Resource.Id.fabButton);
        return fabButton;
      }
    }
    

    【讨论】:

      【解决方案3】:

      更好的是,您可以使用官方谷歌图书馆进行制造.. 看我的回答 Floating Action Button

      【讨论】:

        猜你喜欢
        • 2016-09-24
        • 1970-01-01
        • 2017-11-13
        • 1970-01-01
        • 1970-01-01
        • 2016-07-26
        • 2014-05-03
        • 1970-01-01
        • 2016-03-15
        相关资源
        最近更新 更多