방금 방향 변경 기능을 구현했습니다. 예를 들어 레이아웃이 세로에서 가로로 (또는 그 반대로) 변경 될 때. 방향 변경 이벤트가 언제 끝났는지 어떻게 알 수 있습니까?
은 OrientationEventListener
작동하지 않았다. 레이아웃 방향 변경 이벤트에 대한 알림을 받으려면 어떻게해야합니까?
답변
Activity 의 onConfigurationChanged 메소드를 사용하십시오 . 다음 코드를 참조하십시오.
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
또한 적절한 android : configChanges 를 포함 할 매니페스트 파일의 요소는
아래 코드를 참조하십시오.
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
참고 : Android 3.2 (API 레벨 13) 이상에서는 기기가 세로 방향과 가로 방향 사이를 전환 할 때 ‘화면 크기’도 변경됩니다. 따라서 API 레벨 13 이상으로 개발할 때 방향 변경으로 인한 런타임 재시작을 방지하려면 API 레벨 13 이상에 대해 android : configChanges = “orientation | screenSize”를 선언해야합니다 .
이것이 당신을 도울 것입니다 … 🙂
답변
에서 레이아웃로드를 들어 레이아웃 토지 폴더 수단을 당신은 두 개의 별도의 레이아웃을 가지고 당신은 확인해야합니다 setContentView
으로 onConfigurationChanged
하는 방법.
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
setContentView(R.layout.yourxmlinlayout-land);
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
setContentView(R.layout.yourxmlinlayoutfolder);
}
}
레이아웃이 하나만있는 경우이 메서드에서 setContentView를 만들 필요가 없습니다. 간단히
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
답변
onConfigurationChanged 후 모든 번들을 저장하는 방법을 보여주고 싶었습니다.
수업 직후 새 번들을 만듭니다.
public class MainActivity extends Activity {
Bundle newBundy = new Bundle();
다음으로 “protected void onCreate”후에 다음을 추가하십시오.
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
onSaveInstanceState(newBundy);
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
onSaveInstanceState(newBundy);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBundle("newBundy", newBundy);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
savedInstanceState.getBundle("newBundy");
}
이것을 추가하면 생성 된 모든 클래스가 MainActivity에 저장됩니다.
그러나 가장 좋은 방법은 AndroidManifest에 다음을 추가하는 것입니다.
<activity name= ".MainActivity" android:configChanges="orientation|screenSize"/>
답변
이 방법을 사용
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
{
Toast.makeText(getActivity(),"PORTRAIT",Toast.LENGTH_LONG).show();
//add your code what you want to do when screen on PORTRAIT MODE
}
else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
Toast.makeText(getActivity(),"LANDSCAPE",Toast.LENGTH_LONG).show();
//add your code what you want to do when screen on LANDSCAPE MODE
}
}
그리고 이것을 Androidmainfest.xml에 추가하는 것을 잊지 마십시오.
android:configChanges="orientation|screenSize"
이렇게
<activity android:name=".MainActivity"
android:theme="@style/Theme.AppCompat.NoActionBar"
android:configChanges="orientation|screenSize">
</activity>
답변
활동의 메서드 onConfigurationChanged 재정의
답변
위에서 설명한대로 여러분 중 일부와 관련된 또 다른 대안을 제안하고 싶습니다.
android:configChanges="orientation|keyboardHidden"
주입 할 레이아웃을 명시 적으로 선언했음을 의미합니다.
레이아웃 랜드 및 레이아웃 폴더 덕분에 자동 주입을 유지하려는 경우. onCreate에 추가하기 만하면됩니다.
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
getSupportActionBar().hide();
} else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
getSupportActionBar().show();
}
여기에서 전화기의 방향에 따라 액션 바를 표시하거나 표시하지 않습니다.
답변
OrientationEventListener
클래스 의 인스턴스를 만들고 활성화합니다.
OrientationEventListener mOrientationEventListener = new OrientationEventListener(YourActivity.this) {
@Override
public void onOrientationChanged(int orientation) {
Log.d(TAG,"orientation = " + orientation);
}
};
if (mOrientationEventListener.canDetectOrientation())
mOrientationEventListener.enable();