2

Ich habe ein LinearLayout in dem ich ein anderes Layout einfüge. So etwas wie diesesWie man den Rand eines "included" -Layouts programmatisch ändert

<LinearLayout 
        android:id="@+id/linear_layout" 
        android:layout_width="match_parent" 
        android:layout_height="20dp" 
        android:visibility="gone" 
        tools:visibility="visible"> 

        <include 
         layout="@layout/new_layout" 
         android:layout_width="0dp" 
         android:layout_height="match_parent" 
         android:layout_marginBottom="4dp" 
         android:layout_marginLeft="4dp" 
         android:layout_marginStart="4dp" 
         android:layout_weight="1"/> 

</LinearLayout> 

Nun, was ich möchte, ist zu tun, um programmatisch die „Margin“ ändern des mitgelieferten Layouts (new_layout). Wie kann ich das machen?

Ich habe versucht, verschiedene LayoutParams anzurufen und versucht, die Marge zu ändern, aber nicht sicher, ob es der richtige Ansatz ist. Jede Hilfe sehr geschätzt.

Dank

Antwort

1

die Sie interessieren .. Machen Sie das Linear Layout Ihre ID mit

LinearLayout ll =(LinearLayout) findViewById(R.id.linear_layout); 

    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.MATCH_PARENT, 20); 

    layoutParams.setMargins(left,top,right,bottom); 

wo Sie den Wert in setMargins passieren kann

und wenn Sie in dp Eingangswert wollen .. versuchen Sie, diese

public void setMargin(Context con,ViewGroup.LayoutParams params,int dp) { 

    final float scale = con.getResources().getDisplayMetrics().density; 
    // convert the DP into pixel 
    int pixel = (int)(dp * scale + 0.5f); 

    ViewGroup.MarginLayoutParams s =(ViewGroup.MarginLayoutParams)params; 
    s.setMargins(pixel,pixel,pixel,pixel); 

    yourView.setLayoutParams(params); 
} 

, wo Sie Ihr Layout params passieren kann

0

Ich denke, dieser Code nützlich ...

include.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:gravity="center"> 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/ic_launcher" > 
</ImageView> 

</LinearLayout> 

activity_main.xml

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

<include 
    android:id="@+id/include_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginLeft="4dp" 
    android:layout_marginStart="4dp" 
    layout="@layout/include" /> 

</LinearLayout> 

MainActivity

package com.example.stackdemo; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.LinearLayout; 


public class MainActivity extends Activity { 

LinearLayout include_layout; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    include_layout = (LinearLayout) findViewById(R.id.include_layout); 

    @SuppressWarnings("deprecation") 
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.FILL_PARENT, 
      LinearLayout.LayoutParams.MATCH_PARENT); 

    layoutParams.setMargins(0, 0, 0, 100); 
    include_layout.setLayoutParams(layoutParams); 
} 

    } 
+0

das ist, was ich dachte auch, obwohl ein kleiner Unterschied, dass ich in meinem Code haben, ist ‚enthalten.xml 'ist ein RelativeLayout. Und wenn ich versuche, LayoutParams mit RelativeLayout zu bekommen, bekomme ich ClassCastException. Also habe ich es auf LinearLayout gestellt und es stürzt ab mit Kann ViewGroup nicht auf LinearLayout werfen. Alle möglichen seltsamen Fehler: / – user2453055

0

include.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:paddingBottom="10dp" 
android:paddingTop="10dp" 
android:id="@+id/include_layout"> 

<ImageView android:layout_width="90dp" 
    android:layout_height="90dp" 
    android:src="@drawable/cross" /> 

</LinearLayout> 

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:gravity="center_horizontal"> 

<include layout="@layout/include"/> 

<TextView android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Hello" 
    android:padding="10dp" /> 

</LinearLayout> 

MainActivity.class

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_test); 

    LinearLayout included=(LinearLayout)findViewById(R.id.include_layout); 
    LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); 
    params.setMargins(Math.round(10), Math.round(10), Math.round(10), Math.round(10)); 

    //set margin... 
    included.setLayoutParams(params); 
} 
} 
0

Sie nicht direkt sollten im <include> Tag ändern oder modifizieren Margen. Dieses Tag fügt nur die Layout-Ressource in der aktuellen Ansichtshierarchie hinzu, ohne einen zusätzlichen übergeordneten Ansichtscontainer hinzuzufügen.

Also im Wesentlichen, was Sie tun möchten, ist die Ränder auf den Stammansicht Container des "inkludierten Layouts". Das heißt, Sie direkt findViewById() für die Stammansicht aufrufen sollte, und alle Ihre Margen setzen auf sie grammatisch Pro und als die Eltern enthalten Ansicht ein Linear-layout ist, sollten Sie

LinerLayout.LayoutParams params = (LinerLayout.LayoutParams) includedRootView.getLayoutParams(); 
    params.setMargins(); 
    includedViewRoot.setLayoutParams(params);` 
0

verwenden Sie können es nach Abmessungen ändern auch

res/values/dimens.xml  
res/values-small/dimens.xml  
res/values-normal/dimens.xml  
res/values-xlarge/dimens.xml 

enter image description here