7

我曾在Android: Ruled/horizo​​nal lines in Textview上问过一个题为“Android:TextView中的规则/水平线”的问题。但我没有得到要求的答案。所以我打算通过java在TextView上画线来做到这一点。有没有办法在TextView中画线?或者如果我从 java 代码中获得行尾,那么我将能够为每一行添加 textview。任何帮助将不胜感激。

4

2 回答 2

22

我正在使用在EditText中的每一行文本之间绘制线条的技术,然后我将通过将setKeyListener(null)设置为自定义 EditText 对象来使EditText不可编辑,这样 EditText 就像TextView :)


一个自定义的 EditText,它在显示的每行文本之间画线:

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

    // we need this constructor for LayoutInflater
    public LinedEditText(Context context, AttributeSet attrs) {
        super(context, attrs);

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

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

        for (int i = 0; i < count; i++) {
            int baseline = getLineBounds(i, r);

            canvas.drawLine(r.left, baseline + 1, r.right, baseline + 1, paint);
        }

        super.onDraw(canvas);
    }
} 

现在在需要TextView的地方使用LinedEditText类的对象并使其不可编辑。

一个例子:

public class HorizontalLine extends Activity{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);
        setTitle("Android: Ruled/horizonal lines in Textview");

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

        LinedEditText et = new LinedEditText(this, null);
        et.setText("The name of our country is Bangladesh. I am proud of my country :)");
        et.setLayoutParams(textViewLayoutParams);
        et.setKeyListener(null);

        ll.addView(et);
        this.setContentView(ll);

    }

}

et.setKeyListener(null)使 EditText 不可编辑,因此它就像一个 TextView。


输出:

在此处输入图像描述

光标问题:

如果您仅使用et.setKeyListener(null),那么它只是不听键,但用户可以在 EditText 上看到光标。如果您不想要此光标,只需添加以下行即可禁用 EditText:

 et.setEnabled(false);
于 2012-05-26T23:59:39.447 回答
1

我不知道你为什么要在 textview 中添加一行。如果您想绘制一条水平单线,只需将此代码放在您从数据库中读取的文本视图之间,显然是在您的布局 xml 文件中:

<View android:background="#colorYouWant" android:layout_width = "fill_parent" android:layout_height="1dip" android:id="+@id/horizontalLine"/>

在相关的 java 代码中通过 java 编码调整分隔:

View horizontalLine = (View)findViewById(R.id.horizontalLine);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(left, top, right, bottom);
horizontalLine.setLayoutParams(lp);

左侧、顶部、右侧、底部参数是您必须更改的参数。

于 2012-05-25T13:15:55.123 回答