动态添加的TextView的宽度和高度为零

时间:2016-10-05 17:20:34

标签: android view textview relativelayout

我有一个以编程方式创建的RelativeLayout,如下面的代码所示。 RelativeLayout具有EditText的相同宽度和高度,位于EditText之上。我以一定的宽度和高度添加一个以编程方式创建的TextView。

overlay = new RelativeLayout(context);
overlay.setBackgroundColor(Color.TRANSPARENT); //NO I18N
viewGroup.addView(overlay);
overlay.bringToFront();
RelativeLayout.LayoutParams lp = ((RelativeLayout.LayoutParams) overlay.getLayoutParams());
lp.width = getMeasuredWidth();
lp.height = getMeasuredHeight();
Log.d(TAG, "initOverlay: width " + lp.width + " height " + lp.height);
lp.addRule(RelativeLayout.ALIGN_BOTTOM, R.id.formulaView);
lp.addRule(RelativeLayout.RIGHT_OF, R.id.fxImg);
lp.setMargins(0, ((int) Util.dptopx(context, 1) + getTotalPaddingTop()), 0, ((int) Util.dptopx(context, 1) + getTotalPaddingBottom()));
overlay.setLayoutParams(lp);
setOverScrollMode(OVER_SCROLL_NEVER);
overlay.setOverScrollMode(OVER_SCROLL_NEVER);
overlay.requestLayout();

第一次添加TextView时,视图将以指定的宽度和高度显示。但是当我从RelativeLayout中删除TextView并再次添加一个新的TextView时,TextView没有显示。虽然我设置了宽度和高度,但它的宽度和高度都是零。可能是什么问题?

TextView

textview = new CustomTextView(edittext.getContext());
Editable editable = edittext.getEditableText();
String spantext = editable.subSequence(startidx, endidx).toString();
float[] location = Util.determineTextViewLocation(startidx, endidx);
textview.setText(spantext);
textview.setTextSize(TypedValue.COMPLEX_UNIT_PX, edittext.getTextSize());
textview.setX(location[0]);
textview.setY(location[1]);
textview.setLayoutParams(new ViewGroup.LayoutParams((int) location[2], (int) location[3]));
textview.setPadding(0, ((int) location[4]), 0, 0);
overlay.addView(textview);
Log.d(TAG, "width "+textview.getWidth()+" height "+textview.getHeight()+" view"+textview);

编辑:TextView的onMeasure()方法永远不会被调用。

2 个答案:

答案 0 :(得分:0)

尝试以下代码:

     XTextView textView= new XTextView(this);
     textView.setLayoutParams(new RelativeLayout.LayoutParams(100,500));
     textview.setText("Sample");
     textview.setX(location[0]);
     textview.setY(location[1]);
     textview.setLayoutParams(lp);
     overlay.addView(textview);
     textview.requestLayout();

另外,对于叠加,请不要使用getLayoutParams()方法。使用

    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)

答案 1 :(得分:0)

我遇到了同样的问题。为我修复的是首先将textview添加到其父级,然后使用

将runnable发布到文本视图
textView.post(new Runnable() { ... })

然后在该runnable中设置布局参数

我知道这个问题是超级老问题,以防万一其他人遇到这个问题:)