2013-06-18 18 views
22

Mam dwa układy liniowe w układzie jednej klatki.Programowo zmienia się górny margines w układzie liniowym. Android

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

Tutaj mam seting top margin w układzie liniowym z id layoutbtnlinear_aboutme do 10dp ale w kodzie Chcę zmienić ten 10dp do 50dp na jakimś stanie jak mogę programowo zmienić ten górny margines?

+0

spojrzeć na google, istnieje wiele innych pytań, podobne do tego, jak http://stackoverflow.com/questions/9678785/android-setting-layoutparams-programmatically – bogdan

Odpowiedz

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

dzięki ... to działa :) – user2064024

+0

dlaczego. ?? po prostu kliknij prawy przycisk lub kliknij przycisk w górę. – Riser

3

użycie tego

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

dzięki ale w tym kodzie, gdzie są określimy identyfikator układu liniowego. to, na którym układzie musimy ustawić margines – user2064024

+0

Mam edytować mój kod, sprawdź go – abhi

1

mam ustawić marginesy bezpośrednio za pomocą poniższego kodu (próbowałem za pomocą LinearLayout.LayoutParams ale nie działa dla mnie)

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

Tylko ta tutaj jest zauważenie, że LayoutParams powinny zostać zaimportowane do następnego pakietu android.widget.RelativeLayout.LayoutParams, chyba że uderzysz w błąd.

2

To aktualizuje górny margines bez potrzeby aktualizowania innych wartości marginesów.

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

LayaoutParams zazwyczaj tworzyć zamieszanie podczas ustawiania marginesu ponieważ ich układ dominującej ... Więc to MarginLayoutParams jest bardzo przydatna.

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

To najlepsze rozwiązanie, ponieważ pozwala na prawidłowe ustawienie poszczególnych marginesów. Na przykład, jeśli musisz ustawić tylko topMargin, po prostu użyj params.topMargin = yourValue. W ten sposób NIE wpłynie to na inne marginesy. Jeśli użyjesz rozwiązania Riser, będziesz musiał użyć funkcji setMargins(), która wymaga ustawienia WSZYSTKICH 4 marginesów. – Tiago

+0

Po zmianie tych wartości może być konieczne wywołanie funkcji 'view.invalidate()' i 'view.requestLayout()'. –

Powiązane problemy