2014-05-09 4 views
0

Android 애플리케이션에 대해 Drag and drop 동작을 코딩했습니다. 지금까지 내 HTC One 및 내 Samsung S3에 완벽하게 작동합니다. 기본적으로보기에서 leftMargintopMargin을 이동하도록 설정합니다.Android 세트 LeftMargin이 일부 기기에서 작동하지 않습니다.

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

내가 leftMargin, display.widthPixelsviewWidth의 값을 표시하는 경우

, 내가 좋아 보이는 뭔가있어. (예 : leftMargin = -100에서 600 사이의 값 widthPixels = 480 및 viewWidth = 316).

Xperia에 문제가 있습니까? 아니면 내 코드에 오류가 있습니까?

귀하의 소중한 도움에 감사드립니다.

편집 : 솔루션은 4.4 안드로이드

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(); 
+0

여백 넘침 옵션이 있습니까? 그렇다면 시도해보십시오. – kupsef

+0

무엇을 의미합니까? 'view'는'height'와'width' 둘 다에 대해'wrap_content'를 가진 간단한'LinearLayout'입니다. 패딩이없고 요소가 화면 너비의 25 % 만 차지하는 것을 볼 수 있습니다. 어느 것이 매우 disapointing인지, 그것은 내 HTC에서 완벽하게 작동하지만 내 Xperia에서는 그렇지 않습니다. – Manitoba

+0

invalidate()를 호출하여 명시 적으로보기를 무효화하고 있습니까 –

답변

2

소니 엑스 페리아 아크 S-Android 2.3

HTC 하나-Android 4.1

안드로이드 이전 버전의 레이아웃 설정에 문제가 있습니다.

게시물 확인 : android-setting-left-right-margin-doesnt-work.

+0

내 호 S가 Android 4.0.4 (공식 ROM)를 실행 중입니다. – Manitoba

+0

게시 해 주신 링크가 솔루션이었습니다. – Manitoba

0

레이아웃 여백 몇 가지 문제가있다 (VED 프라 카쉬 포스트에 대해서)이었다. 그래서 더 시도 :

view.setPadding(left, top, right, bottom); 
관련 문제