2011-10-26 14 views
9

El problema aquí no obtener el mismo resultado vista de salida en estos dos casos, yo quiero arreglar el caso 1 para obtener mismo resultado de salida como el caso 2:TextView y LinearLayout programación

  1. Inflar y TextView linearlayout, y luego agregar textview a linearlayout programmatically.
  2. Agregue textview a linearlayout en xml.

Código y de salida para el caso 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" 
/> 

método onCreate en LayoutTestActivity.java

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); 
} 

vista de salida (no correcta)

enter image description here

Código y salida para el Caso 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> 

método onCreate en LayoutTestActivity.java

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

vista de salida (correcta)

enter image description here

Respuesta

0

usted tiene que fijar los LayoutParams en el primer caso. En el segundo, esto se hace automáticamente ya que TextView está en el xml. ¡Espero que esto ayude!

+0

Creo que sucede en el primer caso automáticamente también porque él infla una vista desde un xml donde están configurados los formatos. – Raz

+0

Dimitris Makris, su respuesta es el trabajo, pero como Raz dijo que debería suceder automáticamente. Espero que haya otra solución. Gracias a los dos. – thalsharif

14

no estoy seguro de si hace alguna diferencia - pero mi sugerencia es la siguiente:

ofrecen los -tag android:id="@+id/linearLayout" para la LinearLayout en su main.xml.

Luego de hacer esto:

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); 
} 

También puede ser que desee probar si hay una diferencia entre el suministro de null o su LinearLayout lt como segundo parámetro al inflar el TextView por ejemplo:

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

Intento su solución pero no da la misma salida que el caso 2. Gracias por intentarlo. – thalsharif

+0

Intente publicar imágenes de la diferencia en los diseños: podría revelar cuál es el problema. – kaspermoerch

+0

Publiqué imágenes a medida que preguntas, espero que esto sea útil. Gracias. – thalsharif

0

I piense en primer lugar que debe establecer el diseño principal en el método setContentView() directamente y luego hacer el inflado.

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); 

Creo que esta manera debería funcionar. Para mantener los parámetros de diseño xml, debe pasar los dos últimos parámetros al método inflate().

Cuestiones relacionadas