2014-01-29 124 views
1

頂部我有這樣的佈局:頂部關閉該LinearLayout動態添加的TextView上的LinearLayout動態

<RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_margin="10dp" 
      android:background="@drawable/rect" 
      android:id="@+id/searchRelativeLayout"> 
     <LinearLayout 
       android:id="@+id/linearLayoutProc" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" 
       android:weightSum="1" 
       android:layout_alignParentRight="false" 
       android:gravity="center" 
       android:layout_marginLeft="8dp" 
       android:layout_marginTop="8dp" 
       android:layout_marginRight="8dp" 
       android:layout_marginBottom="2dp"> 
      <EditText 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:id="@+id/inputQuery" 
        android:inputType="text" 
        android:ellipsize="middle" 
        android:hint="@string/search_hint" 
        style="@style/AutoCompleteTextViewOrangeAutoComplete"/> 
     </LinearLayout> 
</RelativeLayout> 

我想補充,沒有成功,一個TextView,這是在年底, LinearLayout應低於添加TextView

這是我的代碼:

 RelativeLayout compareLayout = (RelativeLayout) layoutToShow.findViewById(R.id.searchRelativeLayout); 
     TextView compareItemOneMessage = new TextView(mContext); 
     RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 

     compareItemOneMessage.setLayoutParams(lp); 
     compareItemOneMessage.setTextAppearance(mContext, android.R.style.TextAppearance_Large); 
     compareItemOneMessage.setGravity(Gravity.CENTER); 
     compareItemOneMessage.setTypeface(fontBold); 
     compareItemOneMessage.setTextColor(mContext.getResources().getColor(R.color.orange)); 
     compareItemOneMessage.setText("test"); 
     compareLayout.addView(compareItemOneMessage); 

TextView被添加,但它與EditText的內容重疊

任何想法?

回答

0

您需要添加一個規則,以保持它在頂部

compareItemOneMessage.addRule(RelativeLayout.ALIGN_PARENT_TOP); 

,你也需要添加規則的LinearLayout愛不釋手。

LinearLayout l =(LinearLayout) findViewById(R.id.linearLayoutProc); 
RelativeLayout.LayoutParams params = l.getLayoutParams(); 
l.addRule(RelativeLayout.BELOW, your_text_view_id); 
+0

你好。謝謝,但它不起作用 – Favolas

+0

因爲LinearLayout應該標記爲RelativeLayout。你也需要layout.addView(view,params); – easycheese

+0

@easycheese不,如果你的意思是以上的解決方案,它不應該是RelativeLayout。我們將一個規則添加到relativelayout中的linearlayout,並且不必再次添加linearlayout視圖,因爲它已經添加了。這就是爲什麼我在那裏使用「getLayoutParams()」的原因。 –

0

我會做財產以後這樣的:

// Create the textView here 


compareLayout.addView(compareItemOneMessage); 
List<View> views = new ArrayList<View>(); 
views.add(compareItemOneMessage); 
for(int i=0; i<compareLayout.getChildCount(); ++i) 
{ 
    views.add(compareLayout.getChildAt(i)); 
    compareLayout.removeView(compareLayout.getChildAt(i)); 
} 

for (int i=0; i<views.size(); i++) compareLayout.addView(views.get(i)); 

這應該做的工作。我沒有測試過,因爲我不在開發桌面上。

ViewGroup parent = (ViewGroup) view.getParent(); 
LayoutParams layoutParams = view.getLayoutParams(); 
parent.addViewInLayout(compareItemOneMessage, 0, layoutParams); 
+0

謝謝,但我得到這個'由...引發:java.lang.IllegalStateException:指定的孩子已經有一個父。你必須首先調用孩子父母的removeView()# – Favolas

+0

只需要給我一分鐘;) – Manitoba

+0

我已經更新了我的答案。 – Manitoba

0

我無法想象它是如何看起來以及你得到什麼樣的重疊(也許你應該提供一個圖像)。 但是爲什麼您使用RelativeLayout而不是LinearLayout作爲根?在大多數情況下,LinearLayout的效果更好。

您可以嘗試paddingmargin來修復重疊。

它也可能是因爲的Layout

orientationIllegalStateException問題就可以解決了這個方式(但請只重用東西,這樣,如果你知道你的觀點的一生什麼是最後父)

ViewGroup vg = (ViewGroup) view.getParent(); 
vg.removeView(view); 
//then do the stuff that adds the view - whatever failed before 
linearLayout.add(view);