在edittext中绘制多行

时间:2016-01-22 20:28:46

标签: android android-edittext

我正在尝试在edittext中绘制线条。我有一个scrollview里面是editText。当editText中的行数少于可以在视图中容纳的总行数时,我仍然想在editText中存在的文本的已绘制行之后绘制左行。

例如假设如果edittext中的行数为3,则只绘制3行。但是我想在整个视图中绘制线条。

我已经写了下面的代码,但它只是绘制线到文本的高度不超过它。如果有人可以帮助它将是一个很大的帮助。

public class DisplayActivity extends AppCompatActivity { 

  @Override
  protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display);

    final TextView textView_header = (TextView) findViewById(R.id.header);

    final String randomText = getIntent().getExtras().getString("Data");
    int index = Integer.parseInt(randomText);
    int pos = MainActivity.keyList.get(index);

    final String text = MainActivity.settings.getString("data" + pos, "");
    final String text_2 = MainActivity.settings_2.getString("data" + pos,
            "");

    textView_header.setText(text);

    LayoutParams textViewLayoutParams = new LayoutParams(
            LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

    LinearLayout ll = (LinearLayout) findViewById(R.id.editText_layout);

    ScrollView sv = new ScrollView(this);

    sv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.MATCH_PARENT));

    LinedEditText et = new LinedEditText(this, null);

    et.setLayoutParams(textViewLayoutParams);

    et.setText(text_2);

    et.setKeyListener(null);

    et.setEnabled(false);

    et.setTextColor(Color.BLACK);

    et.setBackgroundColor(Color.TRANSPARENT);

    sv.addView(et);

    ll.addView(sv);

}

public class LinedEditText extends EditText {

    private Rect mRect;

    private Paint mPaint;

    public LinedEditText(Context context, AttributeSet attrs) {

        super(context, attrs);

        mRect = new Rect();

        mPaint = new Paint();

        mPaint.setStyle(Paint.Style.STROKE);

        mPaint.setColor(Color.GRAY);
    }

    @Override
    protected void onDraw(Canvas canvas) {

        int height = getHeight();

        int line_height = getLineHeight();

        int count = height / line_height;

        if (getLineCount() > count)
            count = getLineCount();// for long text with scrolling

        Rect r = mRect;
        Paint paint = mPaint;
        int baseline = getLineBounds(0, r);// first line

        for (int i = 0; i < count; i++) {

            canvas.drawLine(r.left, baseline + 1, r.right, baseline + 1,
                    paint);
            baseline += getLineHeight();// next line
        }

        super.onDraw(canvas);
    }
  }
}

这是我的活动的xml布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/page2"
    tools:context="com.example.writenote.DisplayActivity" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="140px" />

    <LinearLayout
        android:id="@+id/editText_layout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:layout_below="@+id/line"
        android:layout_marginTop="0px"
        android:orientation="vertical" />

    <TextView
        android:id="@+id/line"
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:layout_below="@+id/header"
        android:layout_marginLeft="20px"
        android:layout_marginRight="5px"
        android:layout_marginTop="10dp"
        android:background="#a9a9a9" />

    <TextView
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView"
        android:layout_marginLeft="30px"
        android:layout_marginRight="25px"
        android:layout_marginTop="30px"
        android:text="hello"
        android:textColor="#000"
        android:textSize="60px" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="260px"
        android:layout_height="260px"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:src="@drawable/circleedit" />

</RelativeLayout>

我认为问题出在onDraw中的getHeight()中。它是返回由三行组成的editext的高度。有没有办法提供包含edittext的linearlayout的高度?我尝试在onDraw方法中提供linearlayout的高度,但没有效果它仍然绘制3行。 我尝试在onDraw方法

中执行此操作
 //ll is linearLayout
 int height = ll.getHeight();

2 个答案:

答案 0 :(得分:0)

您的问题来自ScrollView,此ViewGroup包含可变内容大小,如果此内容大于布局中提供的空间,则添加滚动条,因此您无法使用match_parent ScrollView内的配置(您的EditText将自动设置为wrap_content的高度。

sv.fillViewPort(true);中所述,您只需在onCreate中致电ScrollView即可展开小于<service android:name="com.parse.PushService" /> <receiver android:name="com.parse.ParsePushBroadcastReceiver" android:exported="false"> <intent-filter> <action android:name="com.parse.push.intent.RECEIVE" /> <action android:name="com.parse.push.intent.DELETE" /> <action android:name="com.parse.push.intent.OPEN" /> </intent-filter> </receiver> 高度的内容。

答案 1 :(得分:0)

<EditText
 android:id="@+id/editText"
 android:width="wrap_content"
 android:height="wrap_content"
 android:maxLines="2"/> 

maxLines number是您需要的行数;

你想要编辑文本中的多行....设置编辑文本宽度是固定的,高度是warap_content然后它自动输入新行....