【问题标题】:how to align * in corner of text in text view in android [closed]如何在android的文本视图中对齐*在文本的角落[关闭]
【发布时间】:2014-06-16 09:12:06
【问题描述】:

通常,当我们在文本之前给出 * 时,我看起来像 (*hai),但是当在字符串文件中用于文本视图的相同文本中时,它看起来不一样。我想在文本视图的左上角设置 *。

普通 setText("*收取清洁费");没有将星号放在我想要的位置。

我想要像附加的屏幕截图这样的输出。请大侠们给我解决方案。

【问题讨论】:

  • 您可能需要使用两个文本视图。然而,最佳解决方案是使用 drawableleft
  • 我可以使用两个文本视图,但是如何在我的文本中对齐左上角
  • 在单个文本视图中是不可能的。您要么使用两个文本视图,要么使用一个图像视图并在文本视图之前设置一个可绘制对象。
  • 请注意,您的要求已经是星号字符的默认行为:*收取清洁费

标签: android xml string textview


【解决方案1】:

我用这个类创建了一个上标:

import android.text.TextPaint;
import android.text.style.MetricAffectingSpan;

/**
 * A Helper class to adjust the alignment in a textview or other text section,
 * used when SpannableStrings sets text dynamically.
 * 
 */
public class SuperscriptSpanAdjuster extends MetricAffectingSpan {
    double ratio = 0.5;

    public SuperscriptSpanAdjuster(double ratio) {
        this.ratio = ratio;
    }

    @Override
    public void updateMeasureState(TextPaint p) {
        p.baselineShift += (int) (p.ascent() * ratio);
    }

    @Override
    public void updateDrawState(TextPaint arg0) {
        arg0.baselineShift += (int) (arg0.ascent() * ratio);
    }
}

然后这样使用:

String temp = getString("*Cleaning Fee Applies");
SpannableString s = new SpannableString(temp);
s.setSpan(new SuperscriptSpanAdjuster(3.0/5.0), 0, 1, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);
((TextView) this.findViewById(R.id.mytextView)).setText(s);

【讨论】:

    【解决方案2】:

    试试下面的代码:

    text.setTransformationMethod(new AsteriskPasswordTransformationMethod());
    public class AsteriskPasswordTransformationMethod extends PasswordTransformationMethod {
        @Override
        public CharSequence getTransformation(CharSequence source, View view) {
            return new PasswordCharSequence(source);
        }
    
        private class PasswordCharSequence implements CharSequence {
            private CharSequence mSource;
            public PasswordCharSequence(CharSequence source) {
                mSource = source; // Store char sequence
            }
            public char charAt(int index) {
                return '*'; // This is the important part
            }
            public int length() {
                return mSource.length(); // Return default
            }
            public CharSequence subSequence(int start, int end) {
                return mSource.subSequence(start, end); // Return default
            }
        }
    };
    

    【讨论】:

    • 您能否解释一下将字符转换为星号(即:屏蔽密码)的方法如何回答how to align * in corner of text 的问题?
    • 正如@DerGolem 所指出的,这个答案与所提出的问题完全无关。请务必记住,我们希望得到具体解决所提问题的答案。如果问题中有代码,您的答案应该解决该代码本身。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多