Android: устанавливать поля в FrameLayout программно - не работает - PullRequest
13 голосов
/ 12 ноября 2011

вот код -

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

Где когда-нибудь, из xml его работает -

android:layout_marginLeft="135dp"

в чем может быть причина?я что-то упустил!

-thnx

Ответы [ 6 ]

16 голосов
/ 05 июля 2012

Попробуйте это:

params.gravity = Gravity.TOP;
8 голосов
/ 06 августа 2012

У меня был дочерний элемент FrameLayout от RelativeLayout, поэтому среда пыталась преобразовать параметры FrameLayout в RelativeLayout, я решил таким образом

FrameLayout mylayout = (FrameLayout) view.findViewById(R.id.mylayout);
ViewGroup.MarginLayoutParams params = (MarginLayoutParams) mylayout.getLayoutParams();
params.setMargins(1, 2, 3, 4);
mylayout.setLayoutParams(params);
3 голосов
/ 12 ноября 2011

Я думаю, что вам не хватает того, что когда вы программно устанавливаете параметры для элемента, эти параметры фактически предоставляются родительскому представлению, чтобы он знал, как позиционировать элемент.Параметры не возвращаются к самому элементу.Рассмотрим следующий пример кода.Также обратите внимание, что параметры макета относятся к типу родительского элемента.

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);
2 голосов
/ 21 января 2014

Вы можете попробовать это

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);
2 голосов
/ 12 ноября 2011

простое решение -

searchPin = (ImageView) findViewById(R.id.waypts_search_pin);
searchPin.setPadding(135, 176, 0, 0);
0 голосов
/ 03 июля 2012

Просто используйте LayoutParams вместо FrameLayout.LayoutParams

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

это сработало для меня

...