【问题标题】:EditText hint and text with different text sizeEditText 提示和具有不同文本大小的文本
【发布时间】:2015-06-03 05:48:53
【问题描述】:

我正在寻找如何在编辑文本中为提示和用户输入文本设置不同的文本大小。我对此有两个问题。 1) 是否可以为提示和用户输入显示不同大小的文本? 2)如果是,那么我们如何才能做到这一点? 我参考Android EditText Hint Size 链接,但任何其他可用的替代品,如自定义样式。 请指导我。

【问题讨论】:

    标签: android


    【解决方案1】:

    使用此代码..

    editText.setHint(Html.fromHtml(
        "<font size=\"5\">" + "hinttext1" + "</font>" + 
        "<small>" + "hinttext2" + "</small>" )); 
    

    【讨论】:

      【解决方案2】:

      使用HTML 不够灵活。我建议使用另一种方式。你需要自定义SpannableStringMetricAffectingSpan

      1) 创建自定义Hint 对象:

      import android.graphics.Typeface;
      import android.text.SpannableString;
      import android.text.Spanned;
      import android.text.style.MetricAffectingSpan;
      
      public class CustomHint extends SpannableString
      {
          public CustomHint(final CharSequence source, final int style)
          {
              this(null, source, style, null);
          }
      
          public CustomHint(final CharSequence source, final Float size)
          {
              this(null, source, size);
          }
      
          public CustomHint(final CharSequence source, final int style, final Float size)
          {
              this(null, source, style, size);
          }
      
          public CustomHint(final Typeface typeface, final CharSequence source, final int style)
          {
              this(typeface, source, style, null);
          }
      
          public CustomHint(final Typeface typeface, final CharSequence source, final Float size)
          {
              this(typeface, source, null, size);
          }
      
          public CustomHint(final Typeface typeface, final CharSequence source, final Integer style, final Float size)
          {
              super(source);
      
              MetricAffectingSpan typefaceSpan = new CustomMetricAffectingSpan(typeface, style, size);
              setSpan(typefaceSpan, 0, source.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
          }
      }
      

      2) 创建自定义MetricAffectingSpan 对象:

      import android.graphics.Typeface;
      import android.text.TextPaint;
      import android.text.style.MetricAffectingSpan;
      
      public class CustomMetricAffectingSpan extends MetricAffectingSpan
      {
          private final Typeface _typeface;
          private final Float    _newSize;
          private final Integer  _newStyle;
      
          public CustomMetricAffectingSpan(Float size)
          {
              this(null, null, size);
          }
      
          public CustomMetricAffectingSpan(Float size, Integer style)
          {
              this(null, style, size);
          }
      
          public CustomMetricAffectingSpan(Typeface type, Integer style, Float size)
          {
              this._typeface = type;
              this._newStyle = style;
              this._newSize = size;
          }
      
          @Override
          public void updateDrawState(TextPaint ds)
          {
              applyNewSize(ds);
          }
      
          @Override
          public void updateMeasureState(TextPaint paint)
          {
              applyNewSize(paint);
          }
      
          private void applyNewSize(TextPaint paint)
          {
              if (this._newStyle != null)
                  paint.setTypeface(Typeface.create(this._typeface, this._newStyle));
              else
                  paint.setTypeface(this._typeface);
      
              if (this._newSize != null)
                  paint.setTextSize(this._newSize);
          }
      }
      

      3) 使用:

      Typeface newTypeface = Typeface.createFromAsset(getAssets(), "AguafinaScript-Regular.ttf");
      CustomHint customHint = new CustomHint(newTypeface, "Enter some text", Typeface.BOLD_ITALIC, 60f);
              //        CustomHint customHint = new CustomHint(newTypeface, "Enter some text", Typeface.BOLD_ITALIC);
              //        CustomHint customHint = new CustomHint(newTypeface, "Enter some text", 60f);
              //        CustomHint customHint = new CustomHint("Enter some text", Typeface.BOLD_ITALIC, 60f);
              //        CustomHint customHint = new CustomHint("Enter some text", Typeface.BOLD_ITALIC);
              //        CustomHint customHint = new CustomHint("Enter some text", 60f);
      
      customEditText.setHint(customHint);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-09
        • 2021-03-26
        • 2012-11-11
        • 1970-01-01
        • 1970-01-01
        • 2013-05-22
        • 2020-04-19
        • 2017-06-19
        相关资源
        最近更新 更多