【问题标题】:Android set LeftMargin doesn't work on some devicesAndroid set LeftMargin 在某些设备上不起作用
【发布时间】:2014-06-27 00:31:03
【问题描述】:

我为我的Android 应用程序编写了Drag and drop 行为。到目前为止,它在我的HTC One 和我的Samsung 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();

【问题讨论】:

  • 是否在边距上填充选项?如果是的话,你可以试试。
  • 什么意思? view 是一个简单的LinearLayoutwrap_content 用于heightwidth。没有填充,我可以看到元素只占屏幕宽度的 25%。非常令人失望的是,它在我的 HTC 上完美运行,但在我的 Xperia 上却不行。
  • 您是否通过调用 invalidate() 显式地使视图无效

标签: android layoutparams


【解决方案1】:

索尼 Xperia Arc S - Android 2.3

HTC One - Android 4.1

用旧版本的android设置布局有问题。

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

【讨论】:

  • 我的 Arc S 运行的是 android 4.0.4 (official rom)。
  • 非常感谢您发布的链接是解决方案
【解决方案2】:

Android 4.4 的布局边距有一些问题。所以最好试试:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 2015-03-11
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多