【问题标题】:Android Custom TextView dotted line [closed]Android自定义TextView虚线[关闭]
【发布时间】:2013-08-30 18:43:53
【问题描述】:

我从很多天开始尝试,但没有得到任何解决方案。我参考了这个 Android:Draw line on a textview 我试图在文本视图中创建虚线,完成它,工作正常,但我想添加虚线直到文本视图包含的文本长度,如果文本视图有一行文本,那么它工作正常但是如果文本视图有多行文本,然后对于文本一半或小于屏幕宽度的行,然后也出现虚线,我不想要.... 我用Paint画虚线......请帮助我...... 提前致谢

【问题讨论】:

  • 你能发布你的代码吗?
  • 你能提供一些你到目前为止所做的代码吗? . .
  • mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setDither(true); mPaint.setColor(0xFFFF0000); mPaint.setARGB(255, 0, 0, 0); mPaint.setStyle(Paint.Style.STROKE); mPaint.setPathEffect(new DashPathEffect(new float[]{ 3, 3, }, 0)); mPaint.setStrokeWidth(1);.. 这段代码绘制虚线并在 OnDraw 中检查我为 (int i = 0; i
  • 你想在多行TextView中突出显示每一行吗?
  • 我想在文本下方加下划线(虚线),表示文本视图的字符下方

标签: android


【解决方案1】:

靠题,在里面做的,试着写在类LinedEditText的构造函数里

mPaint = new Paint();
    mPaint.setARGB(255, 0, 0, 0);
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setPathEffect(new DashPathEffect(new float[] {10,10}, 0));

而不是

mPaint = new Paint();
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setColor(0x800000FF);

编辑:

请再告诉我一次,你想要这样吗:

或者这个:

编辑:

主活动:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    LinearLayout ll = new LinearLayout(this);
    ll.setOrientation(LinearLayout.VERTICAL);
    LayoutParams textViewLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

    String text = "Sample Sample Sample Sample Sample Sample Sample Sample Sample Sample";

    LinedEditText et = new LinedEditText(this, null, text);
    et.setText(text);
    et.setLayoutParams(textViewLayoutParams);
    et.setKeyListener(null);

    ll.addView(et);

    this.setContentView(ll);
}

LinedEditText:

public class LinedEditText extends EditText {
private Rect mRect;
private Paint mPaint;
String text;

public LinedEditText(Context context, AttributeSet attrs, String text) {
    super(context, attrs);
    this.text = text;

    mRect = new Rect();
    mPaint = new Paint();
    mPaint.setARGB(255, 0, 0, 0);
    mPaint.setStyle(Style.STROKE);
    mPaint.setPathEffect(new DashPathEffect(new float[] { 10, 10 }, 0));
}

@Override
protected void onDraw(Canvas canvas) {
    Rect r = mRect;
    Paint paint = mPaint;

    int lineCount = getLineCount();
    int size = getLayout().getLineStart(lineCount-1);

    String str = getText().toString().substring(size);

    float densityMultiplier = getContext().getResources().getDisplayMetrics().density;
    float scaledPx = 20 * densityMultiplier;
    paint.setTextSize(scaledPx);
    float i = paint.measureText(str);

    for (int k = 0; k < lineCount-1; k++) {
        int baseline = getLineBounds(k, r);
        canvas.drawLine(r.left, baseline + 2, r.right, baseline + 2, paint);
    }

    int baseline = getLineBounds(lineCount-1, r);
    canvas.drawLine(r.left, baseline + 2, i, baseline + 2, paint);

    super.onDraw(canvas);
}
}

【讨论】:

  • 请查看可能的图片编辑和回答
  • 最后一张图片包含多行虚线,但最后一行包含 2 个单词 Sample Sample 我只想要这两个单词的破折号
  • 我找到了一些解决方案,在不久的将来我会做出回应
  • 感谢 Lia Pronina 的回复
  • 感谢 Lia Pronina...你做得很好....:)
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
相关资源
最近更新 更多