我正在尝试在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();
答案 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然后它自动输入新行....