2016-10-05 86 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添加到其母公司,然後再發佈一個可運行的文本視圖與

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

,然後內的可運行

設置佈局PARAMS我知道這個問題是超舊的,但以防萬一誰遇到這個問題:)