3

다음과 같은 문제가 있습니다. 휴대 전화를 세로에서 가로로 변경할 때 사라지는 이미지가 있습니다. 현재 활동을하고 오리엔테이션을 움직일 때 완벽하게 작동합니다. 또 다른 활동으로 돌아와서 돌아 오면 완벽하게 작동합니다. 그러나 문제는 내가 메인 페이지로 돌아간 후 onConfigurationChanged()가 방향을 처음 변경할 때 호출되지 않는다는 것입니다. 반환 할 때 이미지가 올바르게 표시되거나 표시되지 않지만 반환 된 후 처음으로 방향을 변경하면 onConfigurationChanged()가 호출되지 않고 두 번째로 방향을 변경할 때까지 이미지가 그대로 유지됩니다. 니가 가진 도움은 극명하게 평가 될거야! 여기 내 코드의 몇 가지 부분이 있습니다. 필자는 매니 페스트에 configChange- orientation 권한을 이미 설정 했으므로 문제가되지 않습니다.onConfigurationChanged가 다른 활동에서 처음으로 돌아올 때 호출되지 않습니다.

@Override 
    public void onConfigurationChanged(Configuration newConfig) {L.p("configList",5200184); 
     super.onConfigurationChanged(newConfig); 

     if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE&&isVertical==true) { 

      Logo.setVisibility(ImageView.GONE); 
      mainLogo.setVisibility(ImageView.GONE); 
      isHorizontal=true; 

     } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT&&isHorizontal==true){ 

      Logo.setVisibility(ImageView.VISIBLE); 
      mainLogo.setVisibility(ImageView.VISIBLE); 
      isVertical=true; 
     } 
     } 




    @Override 
    protected void onResume() {L.p("onResumeList", 5200113); 
     super.onResume(); 
     Context ctx = getApplicationContext(); 
    WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 

     if((display.getOrientation() == Surface.ROTATION_90) || (display.getOrientation() == Surface.ROTATION_270)) 
      {//Horizontal 
      L.p("you are resuming horizontal",5200124); 
      Logo.setVisibility(ImageView.INVISIBLE); 
    mainLogo.setVisibility(ImageView.INVISIBLE);  
    isHorizontal=true; 
    //isVertical=false; 
      } 
     else {//Vertical 
      L.p("you are resuming vertical",5200131); 
    Logo.setVisibility(ImageView.VISIBLE); 
    mainLogo.setVisibility(ImageView.VISIBLE); 
    isVertical=true; 
    // isHorizontal=false; 
    } 
     tracker.trackPageView("/deviceList"); 
    } 

고마워요!

+0

동일한 문제가 있습니다. 당신은 그것을 고칠 수 있었습니까? –

답변

0

방향 변경을 무시할 필요가 없습니다. layout-land 폴더에 이미지가 포함되지 않거나 이미지가 보이지 않거나 사라지는 새 레이아웃 파일을 선언하기 만하면됩니다. 오리엔테이션을 변경할 때, 액티비티는 onCreate에서 해당 레이아웃을로드합니다.

+0

나는 그게 나쁜 습관이라고 들었지만, 팁 주셔서 감사합니다. 나는 왜 다른 액티비티에서 돌아온 후에 오리엔테이션을 변경하면 처음 onConfigurationChanged()가 호출되지 않는지 알고 싶다. 수평에서 수직으로 이동하면 이미지가 사라집니다. 그런 다음 나는 수평으로 그리고 그 다음 수직으로 되돌아 간다. 그리고 그것이 가정되는 것처럼 나타난다. –

+1

저는 개인적으로 레이아웃 - * 폴더가 "나쁜 습관"이라고 들었습니다. 그런 이유로 간주되는 이유는 무엇입니까? – josephus

+0

@tdevoy configChange를 사용하여 해킹을 통해 별도의 레이아웃을 만드는 것이 훨씬 더 좋습니다. –

0

왜 isHorizontal과 isVertical을 확인합니까? 그 중 하나가 거짓이며 그것이 조건부 일 경우 실패 할 수 있습니까? 당신이 AndroidManifest.xml<activity>에서 각각의 특성을 선언하지 않는 한

+1

그 사람들이 올바르게 작동하지 않습니다. 나는 단지 이전의 방향을 정확하게 알고 있다는 onResume 후에 더블 체크를하기 위해서 여분의 가드로서 그들을 넣는다. 모든 것이 올바르게 작동합니다. 처음으로 액티비티로 돌아가서 전화 방향을 변경하면 방향 변경이 인식되지 않고 onConfigurationChanged가 호출되기 전에 방향을 두 번 변경해야합니다. 그래도 고마워, 다른 아이디어? –

0

메서드가 호출되지 않습니다 :

android:configChanges="orientation" 
+0

그래, 문제는 아니야. 문제는 내가 다른 액티비티에서 돌아 왔을 때, onConfigurationChanged()가 오리엔테이션을 처음 변경했을 때 호출되지 않지만 그 이후마다 호출된다는 것입니다. 그것에 대해 생각해 보시겠습니까? –

+0

이유는 확실하지 않지만 수동으로 활동 방향을 설정 했습니까? 그렇다면 메서드가 올바르게 호출되지 않습니다.새로운 Android 프로젝트를 만들고 onConfigurationChanged() 및 startActivity() 대신 코드를 삽입하지 말고 행동을 관찰 할 수 있도록 제안합니다. –

+0

절대로 가능하면 configChange를 사용하지 마십시오. https://plus.google.com/109306462100800920982/posts/LuYGURGdX7Q Adam의 훌륭한 의견을 확인하십시오. 안드로이드 개발자가이 작업을 중단 할 때까지 나는 쉬지 않을 것입니다. @VictorWong –

0

어딘가에 문제를 일으키는 아마 플래그가있다. 그리고 불행하게도 전체 코드를 보지 않고서도 문제가 무엇인지 알지 못할 것입니다.

하지만 configChange hacks를 사용하지 마십시오. (매우 희귀 한 경우에 대한 설명은 https://plus.google.com/109306462100800920982/posts/LuYGURGdX7Q입니다.)

대부분의 경우 onConfigurationChanged 메서드를 여기에서 모두 재정의 할 필요는 없습니다. 구성 변경시 활동이 다시 작성 될 때 다른 레이아웃을 만드십시오.