2014-10-04 2 views
0

내 앱에서 onConfigurationChanged을 구현합니다. 여기에서 버튼을 사용하여 위치를 변경하고 imageView을 새로운 구성과 일치시킵니다.레이아웃 매개 변수가 변경된 후 레이아웃 기능이 작동하지 않습니다.

가로 모드로 변경하면 버튼이 작동하지 않습니다. 즉, onClickListener이 작동하지 않습니다.

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    System.out.println("changed!"); 
    if (PackageBuilder.popupW!=null) 
     if (PackageBuilder.popupW.isShowing()) { 
      if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 

       RelativeLayout.LayoutParams imageviewp = (RelativeLayout.LayoutParams) (PackageBuilder.popUpView.findViewById(R.id.mImageView)).getLayoutParams(); 
       imageviewp.topMargin=(int)((screenHeight)/(4.15));    
       imageviewp.height=(int)((screenHeight)*(0.25)); //250 
       imageviewp.width=(int)((screenWidth)*(0.3125)); //200 

       RelativeLayout.LayoutParams a=(RelativeLayout.LayoutParams) (PackageBuilder.popUpView.findViewById(R.id.imageViewR)).getLayoutParams(); 
       a.height=(int)((screenHeight)*(0.25)); 
       a.width=(int)((screenWidth)*(0.3125)); 
      } 

      else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 

       RelativeLayout.LayoutParams imageviewp = (RelativeLayout.LayoutParams) (PackageBuilder.popUpView.findViewById(R.id.mImageView)).getLayoutParams(); 
       imageviewp.topMargin=(int)((screenHeight)/(2)); 
       imageviewp.height=((int) ((screenHeight)*(0.15))); //120 
       imageviewp.width=((int) ((screenWidth)*(0.145))); //70 

       RelativeLayout.LayoutParams a=(RelativeLayout.LayoutParams) (PackageBuilder.popUpView.findViewById(R.id.imageViewR)).getLayoutParams(); 
       a.height=((int) ((screenHeight)*(0.15))); 
       a.width=((int) ((screenWidth)*(0.145))); 
      } 
     } 
} 

콘텐츠 뷰를 변경하지 않고 있으며, 레이아웃 위젯에 대한 참조를 받고 레이아웃 매개 변수를 변경하기 만합니다.

답변

0

나는 스스로 런타임 변경을 처리하는 데 사용되는 동일한 문제가있었습니다. 개발자의 사이트에서

:

참고 : 구성을 직접 변경 처리하면 시스템이 자동으로 적용하지 않기 때문에 훨씬 더 어려운, 대체 자원을 사용할 수 있습니다. 이 기술은 구성 변경으로 인해 다시 시작하지 않아야하며 대부분의 응용 프로그램에는 권장되지 않는 최후의 수단으로 간주되어야합니다. 시스템을 수 있도록하기 위해

당신을위한 변화를 처리하고 그냥 가지의 레이아웃을 변경하려면 고해상도 내부 폴더를 레이아웃 땅 폴더를 만들고 그냥 같은과 새로운 .xml 파일을 넣어 이름은 그대로 레이아웃 폴더에 있습니다. 따라서 방향이 가로로 변경되면 레이아웃 랜드 폴더에서 xml을 찾습니다.

+0

메니 페스트에서 android : configChanges = "keyboardHidden | orientation | screenSize"를 사용해야합니까? 이 작업을 수행하려면 onConfigurationChanged를 구현해야합니까? – user2162550

+0

아니요, android : configChanges 및 neather implement onConfigurationChanged를 사용하면 안됩니다. 두 가지를 모두 꺼내서 새 레이아웃을 레이아웃 영역에 배치하십시오. 세로 방향에서는 레이아웃 폴더 내부의 XML이로드되고 가로 방향의 XML은 레이아웃 내부의 XML로로드됩니다. – tibuurcio

관련 문제