Android:以编程方式在FrameLayout中设置边距 - 不起作用

Avi*_*i C 14 android android-layout android-framelayout

这是代码 -

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);
Run Code Online (Sandbox Code Playgroud)

无论如何,从xml开始工作 -

android:layout_marginLeft="135dp"
Run Code Online (Sandbox Code Playgroud)

可能是什么原因?我错过了什么!

-thnx

小智 16

试试这个:

params.gravity = Gravity.TOP;
Run Code Online (Sandbox Code Playgroud)

  • 甚至:params.gravity = Gravity.NO_GRAVITY; (3认同)

she*_*pya 9

我有一个RelativeLayout的FrameLayout子项,所以框架试图将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);
Run Code Online (Sandbox Code Playgroud)


hov*_*yan 5

我认为您缺少的是,当您以编程方式设置元素的参数时,这些参数实际上会提供给父视图,以便它知道如何定位该元素。参数不会设置回元素本身。考虑以下代码示例。另请注意,布局参数是父级的类型。

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);
Run Code Online (Sandbox Code Playgroud)