2013-06-18 32 views
22

tôi có hai bố cục tuyến tính trong một bố cục khung.Thay đổi lề trên cùng của bố cục tuyến tính lập trình 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> 

Ở đây tôi đang seting top margin của bố trí tuyến tính với id layoutbtnlinear_aboutme để 10dp nhưng trong mã tôi muốn thay đổi điều này 10dp để 50dp trên một số điều kiện như thế nào tôi có thể thay đổi lề trên này programatically?

+0

hãy xem trên google, có rất nhiều câu hỏi khác tương tự như sau, như http://stackoverflow.com/questions/9678785/android-setting-layoutparams-programmatically – bogdan

Trả lời

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

cảm ơn ... nó hoạt động :) – user2064024

+0

lý do tại sao ?? chỉ cần nhấp vào nút bên phải hoặc nhấp vào nút lên. – Riser

3

sử dụng này

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

nhờ nhưng trong mã này đang ở đâu chúng tôi sẽ chỉ định id của bố cục tuyến tính. mà trên đó bố trí chúng tôi phải thiết lập lề – user2064024

+0

tôi đã chỉnh sửa mã của tôi xin vui lòng kiểm tra xem nó – abhi

1

Tôi đã thiết lập lề sử dụng trực tiếp bên dưới mã (tôi đã cố gắng sử dụng LinearLayout.LayoutParams nhưng đã không làm việc cho tôi)

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

Chỉ ở đây là để lưu ý rằng LayoutParams nên được nhập cho gói sau android.widget.RelativeLayout.LayoutParams trừ khi bạn sẽ gặp lỗi.

2

Điều này cập nhật lề trên mà không cần cập nhật các giá trị ký quỹ khác.

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

LayaoutParams thường gây nhầm lẫn trong khi thiết lề vì bố trí cha mẹ của họ ... Vì vậy MarginLayoutParams này là rất hữu ích.

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

Đây là giải pháp tốt nhất vì nó cho phép bạn thiết lập các lề riêng lẻ một cách chính xác. Ví dụ: nếu bạn chỉ phải đặt topMargin, chỉ cần sử dụng params.topMargin = yourValue. Bằng cách đó, các lợi nhuận khác sẽ KHÔNG bị ảnh hưởng. Nếu bạn sử dụng giải pháp của Riser, bạn sẽ phải sử dụng setMargins() yêu cầu bạn đặt tất cả 4 lề. – Tiago

+0

Bạn có thể phải gọi 'view.invalidate()' và 'view.requestLayout()' sau khi thay đổi các giá trị này. –