【问题标题】:Android: Ruled/horizontal lines in TextviewAndroid:Textview 中的规则/水平线
【发布时间】:2018-09-23 22:16:32
【问题描述】:

在 Android 中,我有一个 TextView,它的内容是动态的。我想在每行文本之后显示一条水平线。我搜索了很多,找到了 EditText(How to use ruled/horizontal lines to align text in EditText in Android?)。我打算在它们下面绘制动态 TextView 和一条水平线。但我不知道如何检测行尾。任何帮助将不胜感激。我要和How to use ruled/horizontal lines to align text in EditText in Android?的附图一样的效果

【问题讨论】:

    标签: android textview


    【解决方案1】:

    我正在使用在 EditText 中的每一行文本之间画线的技术,然后我将通过设置 setKeyListener( null) 到自定义的 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);
    

    【讨论】:

    • 这太棒了!您将如何更改它以使整个控件具有线条(即使那里没有文本(对于固定大小的控件)?
    【解决方案2】:

    您可以使用视图来绘制线条:对于水平线:

    <View
    android:layout_height="1dp"
    android:layout_width="fill_parent"
    android:background="#ffffff" />
    

    【讨论】:

      【解决方案3】:
      <TextView  
      android:layout_height="1dp"  
      android:layout_width="fill_parent"/>
      

      【讨论】:

      • 它会画水平线。因为我的文字不固定。我必须在每个新行下添加水平线。但我不知道如何在不同的屏幕上跟踪每一行。
      猜你喜欢
      • 2012-03-14
      • 2013-05-18
      • 2010-09-18
      • 2017-09-21
      • 2017-05-16
      • 1970-01-01
      • 2019-10-14
      • 2017-09-23
      • 2014-02-13
      相关资源
      最近更新 更多