2011-12-12 2 views
1

나는 relativelayout에보기를 추가하려고합니다. 이보기는 지정된 위치에 추가되어야합니다.relativelayout 런타임의 위치보기

int x = ...; 
    int y = ...; 
    button.setOnTouchListener(new OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      int x = (int) event.getRawX(); 
      int y = (int) event.getRawY(); 
      v.layout(x, y, x + v.getWidth(), y + v.getHeight()); 
      return true; 
     } 
    }); 
    relativelayout.addView(button); 
    button.layout(x, y, x + button.getWidth(), y + button.getHeight()); 

ontouchlistener .. 뷰가 내 손가락을 유지 좋은 작품 :

는 난이 있습니다. 그러나 startpostion은 항상 0, 0 ... 내 x와 y가 무엇인지는 중요하지 않습니다.

누구나?

답변

6

해결 방법이 있습니다.

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
lp.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
lp.leftMargin = x; 
lp.topMargin = y; 
relativelayout.addView(tmpTextButtonView, lp); 

부동 뷰를 배치 할 때 여백을 사용하는 것은 좋지 않습니다. 그러나 그것은 나를 위해 작동합니다.

+0

그것은 해결되지 않습니다. 그것은 두 가지 정상적인 방법 중 하나입니다. 다른 하나는 getLayoutParams를 변경하고 변경 한 다음 다시 설정하는 것입니다. .layout()은 ViewsGroup의 자체 디 센더를 만드는 경우 필요한 일부 서비스 기능입니다. – Gangnus

1

버튼을 부모보기에 추가하기 전에 위치를 설정하려고 할 수 있습니다. 그러니이 두 라인을 교체 :

relativelayout.addView(button); 
button.layout(x, y, x + button.getWidth(), y + button.getHeight()); 

이를 수 :

button.layout(x, y, x + button.getWidth(), y + button.getHeight()); 
relativelayout.addView(button);