2013-09-04 8 views
0

기본 액티비티에는 두 개의 버튼이 있으며, 눌렀을 때 레이아웃이 180 도로 회전 된 동일한 액티비티 exept를 호출하려고합니다. 이 작업을 수행 할 수있는 방법이 있습니까 (예 : 기본 활동에서 전달 된 추가 작업을 기반으로 회전). 각각의 Java 파일에서 실질적으로 동일한 코드로 두 가지 다른 활동을 실제로 작성해야합니까?동적 xml 레이아웃 회전

편집 : 내가 똑같은 활동을 할 때 나는 메인과 같은 것을 의미하지는 않습니다. 두 버튼에 대해서만 동일합니다 ...

+0

'Activity'에서'setRequestedOrientation (int requestedOrientation)'을 가지고 놀았습니까? 회전이 현재 방향에 적용되어야하는지 (즉, 가로 및 세로를 모두 지원하는지 또는 특정 방향으로 고정되어 있는지 여부) 확실하지 않으므로 적절한 'inverse '. API 레벨 9 이상을 목표로한다고 가정 해 봅시다 * * * 앱이 세로로 고정 된 다음, 예를 들어'setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT')을 시도해보십시오. 참고 사항 : * 귀하의 활동을 파괴하고 다시 만듭니다. –

+0

@MH이 답변이 올바른 것 같지만 지금까지는 아무 것도하지 않는 것 같습니다. 나는 조금 더 고마워 할 것이다. 고마워. onCreate btw에서 setRequestedOrientation을 호출하고 있습니다. 이것이 무한 루프를 생성 할 가능성이 있습니까? – Billakosama

답변

0

나는 당신을위한 해결책을 찾았다 고 생각합니다. 사용자 정의 역방향보기를 래퍼로 사용하여 전체 레이아웃을 뒤집습니다.

아래 예제 코드를 실행 해보십시오.

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     int layoutId = R.layout.main; 
     View content = getLayoutInflater().inflate(layoutId, null); 

     ReverseView wraper = new ReverseView(this); 
     wraper.addView(content); 
     setContentView(wraper); 
    } 

    public class ReverseView extends FrameLayout { 

     public ReverseView(Context context) { 
      super(context); 
     } 

     @Override 
     protected void dispatchDraw(Canvas canvas) { 
      canvas.save(); 
      int px = getWidth()/2; 
      int py = getHeight()/2; 
      canvas.rotate(180, px, py); 
      super.dispatchDraw(canvas); 
      canvas.restore(); 
     } 
    } 
} 
+0

흠,이 버튼에 대해 잘 작동하지만 어떻게 거기에 전체 XML 레이아웃을 추가합니까? 나는 각 요소에 대해 그것을 seperately해야만 하는가? – Billakosama

+0

@Billakosama 안녕하세요, 전체 레이아웃을 추가하는 방법을 보여줄 코드를 편집합니다. – faylon

+0

이것이 저에게 효과적 이었지만 고맙겠 습니다만,이 구현은 버튼의 실제 위치가 아니라 이미지를 반전시킵니다. 예를 들어 버튼이 위쪽에 있으면 이제 아래쪽에 표시됩니다. 그러나 당신은 그것을 클릭하기 위해 위쪽을 탭해야합니다 ... – Billakosama

0

다음 코드를 추가하여 활동 방향을 변경할 수 있습니다.

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

는 그리고 당신은 또한 레이아웃 토지/새로운 레이아웃 XML을 생성 할 수 있습니다, 당신의 활동이 가로 모드를 입력 할 때, 그것은 다른 레이아웃을로드하려고합니다.

+0

나는 풍경 모드로 들어가려고하고 있지 않다. 나는 완전한 반전을 원한다. 아직도 MH가 주석을 달았 기 때문에 이것이 필요한 기능 일 수 있습니다 ... – Billakosama