以下のコードに示すように、プログラムで作成されたRelativeLayoutがあります。 RelativeLayoutはEditTextと同じ幅と高さを持ち、EditTextの上にあります。私はプログラム的に作成されたTextViewを特定の幅と高さで追加します。動的に追加された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()メソッドが呼び出されていないばかりありません。
まだ0の幅と高さを持っています – Siva
更新された回答を参照してください – Sanjeet
私の必要条件ではありません。オーバーレイは、 EditText。 EditTextの正確な測定値を持つ必要があります。 – Siva