2011-11-12 28 views
10

đây là số-Android: Set lề trong một FrameLayout programmatically- không làm việc

FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) searchPin.getLayoutParams(); 
params.setMargins(135, 176, 0, 0); 
//params.leftMargin = 135; // also not worked 
//params.topMargin = 376; 
searchPin.setLayoutParams(params); 

đâu bao giờ hết, từ xml làm việc nặng nhọc của mình

android:layout_marginLeft="135dp" 

những gì có thể là lý do? tui bỏ lỡ điều gì vậy!

-thnx

+0

http: // stackoverflow. com/questions/5401952/framelayout-margin-not-working – mathheadinclouds

Trả lời

17

Hãy thử điều này:

params.gravity = Gravity.TOP; 
+2

hoặc thậm chí: params.gravity = Gravity.NO_GRAVITY; –

3

Tôi nghĩ rằng những gì bạn đang thiếu là rằng, khi bạn thiết lập trình các thông số cho một phần tử, những thông số được cung cấp thực sự cho phụ huynh View, để nó biết làm thế nào để xác định vị trí nguyên tố này. Các tham số không được đặt trở lại chính phần tử đó. Hãy xem xét ví dụ mã sau đây. Cũng lưu ý rằng các tham số bố trí là kiểu của cha/mẹ.

LinearLayout linearLayout = new LinearLayout(this); 

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
    LinearLayout.LayoutParams.FILL_PARENT, 
    LinearLayout.LayoutParams.WRAP_CONTENT); 

layoutParams.setMargins(6,6,6,6); 

Button someButton=new Button(this); 
someButton.setText("some text"); 

linearLayout.addView(someButton, layoutParams); 
+0

thì tôi nên làm gì cho phần tử con? Thay vào đó, tôi cần phải thêm đệm cho cha mẹ - để đặt đúng con! –

+0

thnx man, padding đã làm việc với phần tử con. câu trả lời đã được thêm. –

+0

không, bạn không phải đặt padding cho phần tử con, như đệm cho phụ huynh. Ý tưởng là giống như, bạn cung cấp cả hai (tham số phần tử con + tham số phần tử con) cho parent- như trong dòng addView. – hovanessyan

2

đơn giản solution-

searchPin = (ImageView) findViewById(R.id.waypts_search_pin); 
searchPin.setPadding(135, 176, 0, 0); 
+8

Điều này không thực sự giúp người khác đang tìm kiếm câu trả lời cho câu hỏi của bạn, Padding không di chuyển nền trên khung, chỉ là nội dung. – htafoya

-1

Chỉ cần sử dụng LayoutParams thay vì FrameLayout.LayoutParams

LayoutParams params = (LayoutParams) searchPin.getLayoutParams(); 
params.setMargins(135, 176, 0, 0); 
searchPin.setLayoutParams(params); 

này làm việc cho tôi

+1

LayoutParams không có phương thức setMargins. Bạn vừa nhập android.widget.FrameLayout.LayoutParams – roarster

7

Tôi có một đứa con FrameLayout của một RelativeLayout nên khuôn khổ đã cố gắng để cast FrameLayout params để RelativeLayout, tôi giải quyết theo cách này

FrameLayout mylayout = (FrameLayout) view.findViewById(R.id.mylayout); 
ViewGroup.MarginLayoutParams params = (MarginLayoutParams) mylayout.getLayoutParams(); 
params.setMargins(1, 2, 3, 4); 
mylayout.setLayoutParams(params); 
+0

nếu FrameLayout của bạn là con của RelativeLayout. bạn đã thiết lập RelativeLayout.LayoutParams thành FrameLayout –

+0

Nhận xét trên phải là câu trả lời được chấp nhận. – Magicode

+0

đồng ý w/Roman Black: Đây là giải pháp phù hợp với tôi. Bạn cần phải đặt các thông số với loại của phụ huynh. – mtbomb

0

Bạn có thể thử này

FrameLayout.LayoutParams srcLp = (FrameLayout.LayoutParams)searchPin.getLayoutParams(); 
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(srcLp.width, srcLp.height, srcLp.gravity); 

lp.setMargins(srcLp.leftMargin, srcLp.topMargin, srcLp.rightMargin, srcLp.bottomMargin); 

searchPin.setLayoutParams(lp); 
Các vấn đề liên quan