2011-10-26 45 views
9

這裏的問題我不明白在這兩種情況下相同的輸出視圖的結果,我想解決的情況下1得到相同的輸出結果的情況下2:膨化的TextView和LinearLayout中編程

  1. TextView的充氣和linearlayout,然後以編程方式將textview添加到linearlayout。
  2. 將textview添加到xml中的linearlayout。

代碼和輸出對於情況1:

main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
</LinearLayout> 

text_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:textColor="#000000" 
    android:text="1" 
    android:textSize="20sp" 
    android:background="#AAAAAA" 
    android:gravity="center" 
    android:layout_width="50dp" 
    android:layout_height="50dp" 
    android:layout_marginTop="2dp" 
    android:layout_marginRight="2dp" 
/> 

在LayoutTestActivity.java

onCreate方法
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    LinearLayout lt = (LinearLayout) getLayoutInflater().inflate(R.layout.main, null); 
    TextView tv = (TextView) getLayoutInflater().inflate(R.layout.text_view, null); 
    lt.addView(tv); 
    setContentView(lt); 
} 

輸出視圖(不正確)

enter image description here

代碼和輸出對於情況2:

main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    <TextView 
     android:textColor="#000000" 
     android:text="1" 
     android:textSize="20sp" 
     android:background="#AAAAAA" 
     android:gravity="center" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:layout_marginTop="2dp" 
     android:layout_marginRight="2dp" 
    /> 
</LinearLayout> 

在LayoutTestActivity.java

onCreate方法
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 

輸出視圖(正確)

enter image description here

回答

0

你要設置的LayoutParams在第一種情況。第二,這是自動完成的,因爲TextView在xml中。希望這可以幫助!

+0

我認爲它會自動發生在第一個案例中,因爲他從設置了layoutparams的xml中擴充視圖。 – Raz

+0

Dimitris Makris,你的答案是工作,但拉茲說,它應該會自動發生。我希望有另一種解決方案。謝謝你們。 – thalsharif

14

我不知道這有什麼差別 - 但我的建議是這樣的:

main.xml提供的android:id="@+id/linearLayout" -tag的LinearLayout

那麼做到這一點:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    LinearLayout lt = (LinearLayout) findViewById(R.id.linearLayout); 
    TextView tv = (TextView) getLayoutInflater().inflate(R.layout.text_view, null); 
    lt.addView(tv); 
} 

你可能也想測試是否有膨脹的TextView例如,當供應null或您LinearLayout lt作爲第二個參數之間的差異:

TextView tv = (TextView) getLayoutInflater().inflate(R.layout.text_view, lt); 
+0

我嘗試你的解決方案,但它不會給出與案例2相同的輸出。感謝您的嘗試。 – thalsharif

+0

嘗試在佈局中張貼差異圖片 - 它可能會揭示問題所在。 – kaspermoerch

+0

我張貼圖片,你問,我希望這會有所幫助。謝謝。 – thalsharif

0

我首先想想你必須直接在setContentView()方法中設置主佈局,然後再進行膨脹。

setContentView(R.layout.main); 
    LinearLayout mainLayout = (Linearlayout) findViewbyId(R.id.mainLayoutId); 

    TextView tv = (TextView) getLayoutInflater().inflate(R.layout.text_view, mainLayout, false); 
    mainLayout.addView(tv); 

我認爲這種方式它應該工作。 要保留xml佈局參數,您必須將最後兩個參數傳遞給inflate()方法。