it-swarm.com.de

Ändern Sie den oberen Rand des linearen Layouts programmgesteuert mit Android

ich habe zwei lineare Layouts in einem Frame-Layout. 

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

Hier setze ich top margin des linearen Layouts mit der ID layoutbtnlinear_aboutme auf 10dp, aber im Code möchte ich diese 10dp unter bestimmten Bedingungen in 50dp ändern. Wie kann ich diesen oberen Rand programmgesteuert ändern?

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

LayaoutParams erzeugen normalerweise Verwirrung beim Einstellen des Randes aufgrund ihres übergeordneten Layouts ... Daher ist dieses MarginLayoutParams sehr nützlich.

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

benutze das

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

Dadurch wird der obere Rand aktualisiert, ohne dass die anderen Randwerte aktualisiert werden müssen.

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

Kotlin-Lösung:

fun LinearLayout.setMargins(left: Int? = null, top: Int? = null, right: Int? = null, bottom: Int? = null) {
    val params: LinearLayout.LayoutParams = this.layoutParams as LinearLayout.LayoutParams

    val left = left?.let { it } ?: params.leftMargin
    val top = top?.let { it } ?: params.topMargin
    val right = right?.let { it } ?: params.rightMargin
    val bottom = bottom?.let { it } ?: params.bottomMargin

    params.setMargins(left, top, right, bottom)
    this.requestLayout()
}

dann musst du nur:

layoutbtnlinear_aboutme.setMargins(top = 10)
1
Pedro Zaroni

Ich habe Ränder direkt mit dem folgenden Code eingerichtet (ich habe es mit LinearLayout versucht. LayoutParams, aber es hat nicht funktioniert)

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

Nur hier ist zu beachten, dass LayoutParams für das folgende Paket Android.widget.RelativeLayout.LayoutParams importiert werden sollte, es sei denn, Sie erhalten einen Fehler.

1
Janith

Verwenden Sie diese Methode, um den Rand in dp einzustellen

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

Rufen Sie die Methode auf:

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

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

1