widgets studio programacion poner para pantalla móviles inicio desarrollo curso clima celulares aplicaciones android android-layout android-widget android-view

studio - cómo establecer el ancho que es igual a otro widget en Android



widgets android (7)

Depende de tu caso de uso. Si planea modificar las cosas en el diseño dinámicamente y que también tengan el mismo tamaño que el TextView, puede envolverlas en una vista principal juntas. Si se trata de algo único, use RelativeLayout como lo sugiere la otra respuesta aquí.

<LinearLayout android:orientation="vertical" ... > <!-- layout parameters as appropriate--> <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="28dp" android:text="PopUpWindow" android:textAppearance="?android:attr/textAppearanceLarge" /> <View android:id="@+id/separator" android:layout_width="match_parent" android:layout_height="0.3dp" android:layout_below="@+id/textView1" android:background="#ffffff" /> </LinearLayout>

Necesito dibujar una línea horizontal debajo de un campo de texto de modo que el ancho de la línea sea igual al ancho del texto (no el ancho de la pantalla completa).

En mi aplicación, tengo una vista de texto debajo de una vista (línea horizontal). El ancho de la vista de línea debe ser igual al ancho de la vista de texto . Intenté con Android: layout_width = "wrap_content" y "match_parent", que no resuelve el problema.

Esta es la muestra de codificación xml:

...... <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="28dp" android:text="PopUpWindow" android:textAppearance="?android:attr/textAppearanceLarge" /> <View android:id="@+id/separator" android:layout_width="wrap_content" android:layout_height="0.3dp" android:layout_below="@+id/textView1" android:background="#ffffff" /> ......

imagen de la pantalla es:

por favor, ayúdame.


Lo que Jave dijo es correcto, y lo más fácil, pero ¿qué pasa si no estás usando RelativeLayout para contener las vistas?

Si está personalizando su UI dentro de onCreate (), entonces encontrará que obtener el ancho de otro widget le dará un resultado incorrecto. Eso es porque la interfaz de usuario aún no se ha configurado.

Pero aún puede configurar su UI en onCreate ... simplemente ejecute el código que se ejecuta después de configurar la UI. Esto se logra mediante el uso del comando View.post() .

El XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:gravity="center"> <Button android:id="@+id/button_one" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:text="short string" /> <Button android:id="@+id/button_two" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="this is a longer string" /> </LinearLayout> </RelativeLayout>

Código Java:

private Button mButtonOne; private Button mButtonTwo; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // inflate UI setContentView(R.layout.activity_example); // get references to UI elements mButtonOne = (Button)findViewById(R.id.button_one); mButtonTwo = (Button)findViewById(R.id.button_two); // Make buttons the same size (i.e. Button1.width = Button2.width) if ((mButtonOne != null) && (mButtonTwo != null)) { mButtonOne.post(new Runnable() { @Override public void run() { mButtonOne.setWidth(mButtonTwo.getWidth()); } }); } }

El resultado es que el ancho de button_one coincidirá con el ancho de button_two . Este es un aspecto más agradable cuando la cantidad de texto varía mucho entre las dos vistas.


Si está utilizando un diseño que no sea RelativeLayout, puede hacer coincidir el ancho de sus widgets programáticamente, como en este ejemplo:

layout.xml:

<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Here''s some text" /> <TextView android:id="@+id/text2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Some more text" /> </LinearLayout>

Observe que ambos campos de texto están configurados en wrap_content.

Main.java:

TextView tv1 = (TextView) findViewById(R.id.text1); TextView tv2 = (TextView) findViewById(R.id.text2); if(tv1.getWidth() < tv2.getWidth()) tv1.setWidth(tv2.getWidth()); else tv2.setWidth(tv1.getWidth());

Si tiene varios widgets que desea que tengan un ancho uniforme, simplemente repita el código anterior para el nuevo elemento. Por ejemplo, digamos que había un botón al que quería ajustar el ancho para que coincida con los otros elementos:

if(tv2.getWidth() < button) tv2.setWidth(button.getWidth()); else button.setWidth(tv2.getWidth());


Si no desea utilizar RelativeLayout, puede establecer el ancho de los padres para ajustar el contenido y el ancho de los padres se convertirá en el más grande. Luego puede establecer el ancho del niño pequeño para match_parent y coincidirá con el ancho de la vista requerida.

<LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical|left" android:orientation="vertical" android:layout_gravity="center_vertical" android:padding="5dp"> <TextView android:id="@+id/navHeaderName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/profile_progress_bar" android:text="This is a large text" android:textAppearance="@style/TextAppearance.AppCompat.Body1" /> <ProgressBar android:id="@id/profile_progress_bar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:max="100" android:progress="45" /> </LinearLayout>


Si usa un RelativeLayout , puede usar los atributos de align :

<View android:id="@+id/separator" android:layout_width="0dp" android:layout_height="0.3dp" android:layout_below="@+id/textView1" android:layout_alignLeft="@+id/textView1" android:layout_alignRight="@+id/textView1" android:background="#ffffff" />


Usa RelativeLayout y usa estos dos atributos en la vista de líneas horizontales

android:layout_alignLeft="@+id/textView1" android:layout_alignRight="@+id/textView1" <RelativeLayout android:id="@+id/relativeLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1.23" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="67dp" android:text="this is TextView" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="10dp" android:layout_alignLeft="@+id/textView1" android:layout_alignRight="@+id/textView1" android:layout_below="@+id/textView1" android:background="#FF0000" android:text="" /> </RelativeLayout>


use el siguiente atributo de ancho.

<TextView android:id="@+id/textView1" android:layout_width="150dp" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="28dp" android:text="PopUpWindow" android:textAppearance="?android:attr/textAppearanceLarge" /> <View android:id="@+id/separator" android:layout_width="150dp" android:layout_height="0.3dp" android:layout_below="@+id/textView1" android:background="#ffffff" />