studio programacion herramientas crear con avanzado aplicaciones android android-layout android-activity layoutparams

programacion - Agregar diseño con parámetros programáticamente Android



manual de android en pdf (2)

En lugar de crear un nuevo LayoutParams, debe modificar el existente.

Cambia tu código a:

button.setImageResource(R.drawable.plus_yellow); m = myMap.addMarker(new MarkerOptions().position(myMap.getCameraPosition().target).draggable(true)); LinearLayout linLayout = (LinearLayout)findViewById(R.id.lay); LinearLayout.LayoutParams lp = linLayout.getLayoutParams(); final int left_margin = whatever; final int top_margin = 0; final int right_margin = whatevermore; final int bottom_margin = 0; lp.setMargins(left_margin, top_margin, right_margin, bottom_margin); lp.width = (w*2)/3; linLayout.setLayoutParams(lp); t = (TextView)findViewById(R.id.locinfo); linLayout.setVisibility(View.VISIBLE); t.setVisibility(View.VISIBLE); bIcon = true;

Hola tengo una pantalla principal.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <fragment android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.SupportMapFragment"/> <ImageButton android:id="@+id/imageButton1" android:layout_width="55dp" android:layout_height="50dp" android:layout_alignParentTop="true" android:layout_marginTop="10dp" android:layout_toLeftOf="@+id/toggleButton1" android:background="@android:drawable/btn_default" android:contentDescription="@string/app_name" android:scaleType="centerCrop" android:src="@drawable/plus_grey" /> <LinearLayout android:id="@+id/lay" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_marginEnd="0dp" android:background="#A0FFFFFF" android:orientation="horizontal" android:visibility="invisible" > <TextView android:id="@+id/locinfo" android:layout_width="match_parent" android:layout_height="60dp" android:textColor="@color/cherniy" android:textSize="20sp" android:visibility="visible" /> </LinearLayout> </RelativeLayout>

Y hay un imageButton

button = (ImageButton) findViewById(R.id.imageButton1); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if (bIcon == false) { button.setImageResource(R.drawable.plus_yellow); m = myMap.addMarker(new MarkerOptions().position(myMap.getCameraPosition().target).draggable(true)); LinearLayout linLayout = (LinearLayout)findViewById(R.id.lay); t = (TextView)findViewById(R.id.locinfo); linLayout.setVisibility(View.VISIBLE); t.setVisibility(View.VISIBLE); bIcon = true; } else { button.setImageResource(R.drawable.plus_grey); m.remove(); LinearLayout linLayout = (LinearLayout)findViewById(R.id.lay); t.setVisibility(View.INVISIBLE); linLayout.setVisibility(View.INVISIBLE); bIcon = false; } } });

Quiero agregar programáticamente

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams((w*2)/3, LayoutParams.WRAP_CONTENT);

donde w

display = getWindowManager().getDefaultDisplay(); @SuppressWarnings("deprecation") w = display.getWidth();

Pero cuando me gusta esto

button.setImageResource(R.drawable.plus_yellow); m = myMap.addMarker(new MarkerOptions().position(myMap.getCameraPosition().target).draggable(true)); LinearLayout linLayout = (LinearLayout)findViewById(R.id.lay); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams((w*2)/3, LayoutParams.WRAP_CONTENT); linLayout.setLayoutParams(lp); t = (TextView)findViewById(R.id.locinfo); linLayout.setVisibility(View.VISIBLE); t.setVisibility(View.VISIBLE); bIcon = true;

Mi aplicación falla. ¿Puede decirme cómo crear programáticamente con mis parámetros (vinculado con el ancho y alto de la pantalla del dispositivo)? Tomaré cualquier sugerencia. Gracias.


LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( (w*2)/3, LayoutParams.WRAP_CONTENT ); linLayout.setLayoutParams(lp);

Esto arrojará un error porque LinearLayout es el elemento secundario del diseño relativo, por lo que debe establecer RelativeLayoutParams para eso.

En cambio, usa esto

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams( (w*2)/3, RelativeLayout.LayoutParams.WRAP_CONTENT ); linLayout.setLayoutParams(lp);

o En lugar de crear nuevos LayoutParams , puede reutilizar los LayoutParams existentes de la vista como se muestra a continuación.

RelativeLayout.LayoutParams lp = linLayout.getLayoutParams(); lp.width = (w*2)/3; lp.height = RelativeLayout.LayoutParams.WRAP_CONTENT; linLayout.setLayoutParams(lp);