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" />