1

내 res/폴더에 layout-land라는 폴더를 만들 수 있으며 Android에서 자동으로 처리한다는 것을 알고 있습니다. 내 오리 엔테이션이 포틀랜드에서 랜드 스케이프로 바뀌면 새로운 활동을 불러 오려면 어떻게해야합니까? 내가 무엇을 가지고 :다른 방향의 새로운 활동 Android

  • 버튼과있는 ScrollView
  • , 여러 버튼, textviews를 포함하고 모두가 메인이라고
  • edittexts 풍경 XML 파일로 구성되어 세로위한 XML 파일. XML (그러나 그들의 존중 폴더) 된 setContentView (main.xml에)를 호출
  • 한 활동

이 활동은 그러나 모든하지만 초기화한다 톤, textviews 등,하지만 내가 다시 방향으로 방향을 변경할 때, 그 버튼이 XML 파일에 없기 때문에 그것은 강제로 닫습니다!

어떻게이 문제를 해결할 수 있습니까?

답변

1

현재 오리 엔테이션을 확인하려면 getResources().getConfiguration().orientation을 사용해보십시오. 장치를 기울이면 잘못된 자원을 부 풀릴 수 있습니다.

->http://developer.android.com/reference/android/content/res/Configuration.html#orientation

또 다른 (그러나 나쁜!) 땅 레이아웃이 사용되지 않습니다 및 틸팅 때 다른 활동을 밀어 수 있도록 onConfigurationChanged을 대체 할 방법이 될 수 있습니다. 그것의 모양 :

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    //push new activity via intent 
} 

그러나 나는 이것을 위해 당신을 추천하지 않을 것이다. 첫 번째 접근법을 시도해보고 이것이 효과가 있음을 말해줍니다. ;)

1

Thomas의 솔루션이 효과적 일뿐만 아니라 포트레이트 및 랜드 스케이프 모드에 공통된 버튼이 동일한 작업을 수행하는 경우 findViewByID (...)가 캐스팅을 시도하기 전에 null인지 간단히 확인할 수 있습니다./지정하십시오. findViewById를 (...)의 문서에서이 같은 The view if found or null otherwise. 뭔가 작동합니다 : 당신은 아직도 토마스의 솔루션으로 갈 것

Object x = findViewByID(R.id.something) != null; 
if(x != null) 
{ 
    //cast it to whatever it really is (textview, button, etc) 

    //Add whatever listeners you want 
} 

마음은 당신 만이 아닌, 하나 개의 속성을 확인해야하기 때문에 확인하는 데 레이아웃간에 다른 컨트롤의 각각에 대해서 null

관련 문제