2016-10-05 25 views
2

以下のコードに示すように、プログラムで作成された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

はコードの下に試してみてください。

 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) 
+0

まだ0の幅と高さを持っています – Siva

+0

更新された回答を参照してください – Sanjeet

+0

私の必要条件ではありません。オーバーレイは、 EditText。 EditTextの正確な測定値を持つ必要があります。 – Siva

0

私は同じ問題がありました。何私のためにそれを修正することは

textView.post(new Runnable() { ... }) 

とテキストビューに実行可能を投稿し、そのRunnable

内レイアウトのparamsを設定し、私はこの質問はスーパーで知って、その後、最初の親にのTextViewを追加しました古いですが、他の誰かがこの問題に遭遇した場合に備えて:

関連する問題