Android: нарисуйте линию в текстовом представлении

Я задал вопрос, который ранее назывался «Android: линейчатые / горизонтальные линии в TextView». вAndroid: линейчатые / горизонтальные линии в Textview , Но я не получил требуемого ответа. Так что я планирую сделать это, рисуя линию в TextView с помощью Java. Есть ли способ нарисовать линию внутри TextView? или если я получу конец строки из кода Java, тогда я смогу добавить текстовое представление для каждой строки. Любая помощь будет высоко оценена.

Ответы на вопрос(2)

Решение Вопроса

EditText и тогда я сделаюEditText не редактируется настройкойsetKeyListener(null) к пользовательскому объекту EditText, так что EditText действует какTextView :)

A custom EditText that draws lines between each line of text that is displayed:
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);
    }
} 

Теперь используйте объектLinedEditText класс, где вам нужно вашеTextView и сделать его недоступным для редактирования.

An Example:
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.

The Output:

enter image description here

Issue with cursor:

Если вы используетеet.setKeyListener(null) только тогда он просто не слушает ключи, но Пользователь может видеть курсор на EditText. Если вам не нужен этот курсор, просто отключите EditText, добавив следующую строку:

 et.setEnabled(false);
 20 авг. 2013 г., 21:40
Что если бы я хотел сделать текстовое представление нарисованным холстом?
 31 мая 2014 г., 08:24
Отличное решение, братан! :) К вашему сведению, это работает наTextView тоже.

зачем вам строка внутри текстового представления. Если вы хотите нарисовать горизонтальную одиночную линию, просто поместите этот код между текстовыми представлениями, которые вы читаете из БД, очевидно, в вашем XML-файле макета:

<View android:background="#colorYouWant" android:layout_width = "fill_parent" android:layout_height="1dip" android:id="[email protected]/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);

Параметры left, top, right, bottom - это те, которые вы должны изменить.

Ваш ответ на вопрос