[英]Set margin of a LinearLayout inside a RealtiveLayout programmatically- not working
[英]Android: Set margins in a FrameLayout programmatically- not working
这是代码-
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
尝试这个:
params.gravity = Gravity.TOP;
我有一个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);
我认为您所缺少的是,当您以编程方式设置元素的参数时,这些参数实际上提供给了父视图,因此它知道如何定位元素。 参数未设置回元素本身。 考虑下面的代码示例。 还要注意,布局参数是父级的类型。
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);
你可以试试这个
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);
简单的解决方案-
searchPin = (ImageView) findViewById(R.id.waypts_search_pin);
searchPin.setPadding(135, 176, 0, 0);
只需使用LayoutParams而不是FrameLayout.LayoutParams
LayoutParams params = (LayoutParams) searchPin.getLayoutParams();
params.setMargins(135, 176, 0, 0);
searchPin.setLayoutParams(params);
这对我有用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.