2016-12-08 5 views
0

私はノートパッドのような線でカスタムのedittextを作ろうとしています。最大の問題は、それが線を壊し、それを適切に描画しないことになりました。メモ帳のようなラインデザインのAndroidカスタムedittext

public class NoteEditText extends EditText { 
     private final int heightpixels; 
     private Paint mPaint; 
     private Rect mRect; 
     private Canvas canvas; 


     public NoteEditText(Context context, AttributeSet attrs) { 
      super(context, attrs); 
      TypedArray a = context.getTheme().obtainStyledAttributes(
        attrs, 
        R.styleable.NoteEditText, 
        0, 0); 

      this.heightpixels = getContext().getResources().getDisplayMetrics().heightPixels; 
      this.mRect = new Rect(); 
      this.mPaint = new Paint(); 
      this.mPaint.setStyle(Paint.Style.STROKE); 
      try { 
       mPaint.setColor(Color.parseColor(a.getString(R.styleable.NoteEditText_lineColor))); 
      } catch (NullPointerException e) { 
       mPaint.setColor(Color.parseColor("#ffffff")); 
      } 
     } 

     public NoteEditText(Context context) { 
      super(context); 
      this.heightpixels = getContext().getResources().getDisplayMetrics().heightPixels; 
      this.mRect = new Rect(); 
      this.mPaint = new Paint(); 
      this.mPaint.setStyle(Paint.Style.STROKE); 
      mPaint.setColor(Color.parseColor("#ffffff")); 
     } 

     protected void onDraw(Canvas canvas) { 
      int count; 
      this.canvas = canvas; 
      int lineheight = getLineHeight(); 
      if (TextUtils.isEmpty(getText())) { 
       count = (this.heightpixels/lineheight) + 2; 
      } else { 
       count = getLineCount(); 
      } 
      Rect r = this.mRect; 
      Paint paint = this.mPaint; 
      int baseline = getLineBounds(0, r); 
      for (int i = 0; i < count; i++) { 
       canvas.drawLine((float) r.left, (float) (baseline + 1), (float) r.right, (float) (baseline + 1), paint); 
       baseline += lineheight; 
      } 
      super.onDraw(canvas); 
     } 

    @Override 
    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { 
     super.onTextChanged(text, start, lengthBefore, lengthAfter); 
    } 

    @Override 
    public void onDrawForeground(Canvas canvas) { 
     super.onDrawForeground(canvas); 
    } 
} 

これは、新しい行にテキストを追加して削除しようとするとよく発生します。ここで example

XMLも

<com.example.dev.customedittext.NoteEditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@null" 
    android:ems="10" 
    android:gravity="top" 
    android:textColor="@android:color/black" 
    android:textColorHint="#AAAAAA" 
    android:textSize="12sp" 
    app:lineColor="#000000" 
    /> 

でこの問題を解決するためにどのように何か提案はありますか?

+0

をテキストが次々ラインを描画されていないというエラーですか?だから、描画されたテキストの間にスペースを入れたくないのですか?テキストを描画するキャンバスを選んだ理由を教えてください。いくつかの書式設定コントロールで画面上にテキストを表示したいのであれば、複数行のEditTextウィジェット – Grendel

答えて

2

この使用:我々はもう少し知りたいかもしれない助けるために

<com.testing.remon.LineEditText 
android:id="@+id/edit1" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_margin="20dp" 
android:background="@null" 
android:inputType="textMultiLine|textNoSuggestions" 
android:minLines="10" 
android:singleLine="false" 
android:imeOptions="actionNone" 
/>