studio programacion herramientas fundamentos con avanzado aplicaciones android android-layout android-linearlayout

programacion - Cambiar el diseño lineal margen superior programáticamente android



manual de android en pdf (6)

Esto actualiza el margen superior sin la necesidad de actualizar los otros valores de margen.

LinearLayout layout = (LinearLayout) findViewById(R.id.your_linear_layout); LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) layout.getLayoutParams(); layoutParams.topMargin = 200; layout.setLayoutParams(layoutParams);

Tengo dos diseños lineales en un diseño de marco.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="left" android:orientation="vertical"> <FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/image12"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <LinearLayout android:id="@+id/layoutbtnlinear_aboutme" android:layout_width="fill_parent" android:layout_height="55dp" android:gravity="bottom" android:layout_marginTop="10dp" android:background="#b2b2b2" android:orientation="horizontal" > <ImageView android:id="@+id/imgShare_layout_aboutme" android:layout_width="wrap_content" android:layout_height="55dp" android:layout_gravity="right|center|end" android:layout_weight="1.63" android:src="@drawable/ic_share" /> <TextView android:id="@+id/txtTitle_layout_aboutme" android:layout_width="wrap_content" android:layout_height="55dp" android:layout_gravity="left" android:layout_weight="0.3" android:fontFamily="Times New Roman" android:text="About Me" android:textColor="@android:color/black" android:textSize="35sp" android:textStyle="italic" /> </LinearLayout> <LinearLayout android:id="@+id/content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <ImageButton android:id="@+id/btnSlidingDrawerHandler_layout_aboutme" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/ic_1_navigation_collapse" /> <ListView android:id="@+id/listView_layout_aboutme" android:layout_width="fill_parent" android:layout_height="match_parent" android:footerDividersEnabled="true" android:dividerHeight="4px" android:isScrollContainer="true" android:scrollbarAlwaysDrawVerticalTrack="true" android:scrollbarStyle="outsideInset" android:scrollbars="vertical"> </ListView> </LinearLayout> </LinearLayout> </FrameLayout> </LinearLayout>

Aquí estoy configurando el top margin del diseño lineal con id layoutbtnlinear_aboutme a 10dp pero en el código quiero cambiar este 10dp a 50dp en alguna condición, ¿cómo puedo cambiar este margen superior programáticamente?


He configurado los márgenes directamente usando el siguiente código (intenté usar LinearLayout.LayoutParams pero no funcionaba para mí)

LinearLayout layout = (LinearLayout)findViewById(R.id.yourrelative_layout); LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT); params.setMargins(3, 300, 3, 3); layout.setLayoutParams(params);

Solo esto aquí es observar que LayoutParams se debe importar para el siguiente paquete android.widget.RelativeLayout.LayoutParams menos que se produzca un error.


Utilice este método para establecer el margen en dp

private void setMargins (View view, int left, int top, int right, int bottom) { if (view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) { ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); final float scale = getBaseContext().getResources().getDisplayMetrics().density; // convert the DP into pixel int l = (int)(left * scale + 0.5f); int r = (int)(right * scale + 0.5f); int t = (int)(top * scale + 0.5f); int b = (int)(bottom * scale + 0.5f); p.setMargins(l, t, r, b); view.requestLayout(); } }

Llama al método:

setMargins(linearLayout,0,0,5,0);

https://.com/a/50951911/8523391


utilizar esta

layout = (LinearLayout) findViewById(R.id.layuout); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); layoutParams.setMargins(30, 20, 30, 0); layout.setLayoutParams(layoutParams );


LayaoutParams generalmente crea confusión al establecer el margen debido a su diseño principal ... Entonces, este MarginLayoutParams es muy útil.

MarginLayoutParams params = (MarginLayoutParams) view.getLayoutParams(); params.width = 200; params.leftMargin = 100; params.topMargin = 200;


layout = (LinearLayout) findViewById(R.id.layoutbtnlinear_aboutme); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)layout.getLayoutParams(); params.setMargins(0, 50, 0, 0); layout.setLayoutParams(params);