我在Android: Ruled/horizonal lines in Textview问了一个名为“Android:TextView中的统治/水平线”的问题。但我没有得到必要的答案。所以我想通过java在TextView上绘制线来实现这一点。有没有办法在TextView中绘制Line?或者如果我从java代码中获得结束,那么我将能够为每一行添加textview。任何帮助将受到高度赞赏。
答案 0 :(得分:21)
我正在使用 EditText 中每行文字之间绘制线条的技巧,然后通过设置 setKeyListener(我将使 EditText 不可编辑) null)到自定义EditText对象,以便EditText就像 TextView :)
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 并使其不可编辑。
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);
答案 1 :(得分:1)
我不知道你为什么要在textview中找到一条线。如果你想绘制一条水平单行,只需将这段代码放在你从db中读取的textviews之间,显然在你的layout xml文件中:
<View android:background="#colorYouWant" android:layout_width = "fill_parent" android:layout_height="1dip" android:id="+@id/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);
左,上,右,下参数是您必须更改的参数。