Android设置LeftMargin并不适用于某些设备

时间:2014-05-09 09:56:56

标签: android layoutparams

我为Drag and drop应用程序编写了Android行为。到目前为止,它完全适用于我的HTC OneSamsung S3。基本上,它只是将视图上的leftMargintopMargin设置为移动。

当我在Xperia Arc S上尝试时,我可以设置topMargin并垂直移动视图而不会有任何问题。但是一旦我尝试移动它(设置leftMargin),它就不起作用了。我甚至无法以编程方式设置leftMargin

我有一个非常简单的代码,但是我无法找到Xperia上出现的问题以及为什么它可以在我得到的其他设备上运行。

params.topMargin = (int) event.getRawY() - view.getHeight();
params.leftMargin = (int) event.getRawX() - (view.getWidth() / 2);

// Set bounds
if (params.topMargin < 0) params.topMargin = 0;
if (params.topMargin + viewHeight * 3/2 > display.heightPixels) params.topMargin = display.heightPixels - viewHeight * 3/2;
if (params.leftMargin < 0) params.leftMargin = 0;
if (params.leftMargin + viewWidth > display.widthPixels) params.leftMargin = display.widthPixels - viewWidth;

view.setLayoutParams(params);

如果我显示leftMargindisplay.widthPixelsviewWidth的值,我会看到一些看起来不错的东西。 (例如。leftMargin =介于-100到600之间的任何内容。widthPixels = 480,此时viewWidth = 316)。

Xperia是否有问题或我的代码中是否有错误?

感谢您的宝贵帮助。

编辑:解决方案是(关于Ved Prakash发布)

FrameLayout.LayoutParams paramsOld = (FrameLayout.LayoutParams) view.getLayoutParams();
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(paramsOld.width, paramsOld.height, Gravity.TOP);

params.topMargin = (int) event.getRawY() - view.getHeight();
params.leftMargin = (int) event.getRawX() - (view.getWidth() / 2);

// Set bounds
if (params.topMargin < 0) params.topMargin = 0;
if (params.topMargin + viewHeight * 3/2 > display.heightPixels) params.topMargin = display.heightPixels - viewHeight * 3/2;
if (params.leftMargin < 0) params.leftMargin = 0;
if (params.leftMargin + viewWidth > display.widthPixels) params.leftMargin = display.widthPixels - viewWidth;

view.setLayoutParams(params);

view.invalidate();

2 个答案:

答案 0 :(得分:2)

Sony Xperia Arc S - Android 2.3

HTC One - Android 4.1

使用旧版本的android设置布局时出现问题。

查看帖子:android-setting-left-right-margin-doesnt-work

答案 1 :(得分:0)

Android 4.4在布局边距方面存在一些问题。所以最好试试:

view.setPadding(left, top, right, bottom);