내 Android 애플리케이션에서 기기를 회전 (키보드를 슬라이드)하면 내Activity
다시 시작됩니다 (onCreate
호출됩니다). 자, 이것이 아마 어떻게 될지는 모르겠지만, 나는 초기에 많은 설정을했습니다.onCreate
메서드가 필요하므로 다음 중 하나가 필요합니다.
onCreate
다시 호출되지 않고 레이아웃이 조정되거나onCreate
호출되지 않습니다.
응용 프로그램 클래스 사용
초기화시 수행중인 작업에 따라 확장하는 새 클래스를 만들 수 있습니다.Application
초기화 코드를 오버라이드 (override)로 옮기는 것onCreate
메서드를 호출합니다.
public class MyApplicationClass extends Application {
@Override
public void onCreate() {
super.onCreate();
// TODO Put your application initialization code here.
}
}
그만큼onCreate
응용 프로그램 클래스의 응용 프로그램 클래스는 응용 프로그램이 모두 만들어 질 때만 호출되므로 오리엔테이션 또는 키보드 가시성 변경시 작업이 다시 시작 되어도 트리거되지 않습니다.
이 클래스의 인스턴스를 싱글 톤으로 노출하고 getter 및 setter를 사용하여 초기화하는 응용 프로그램 변수를 노출하는 것이 좋습니다.
참고 : 매니페스트에 등록하고 사용하려면 새 Application 클래스의 이름을 지정해야합니다.
<application
android:name="com.you.yourapp.MyApplicationClass"
구성 변경에 반응 [업데이트 : API 13 이후에는 사용되지 않습니다.권장 대체품보기]
또 다른 대안으로, 응용 프로그램에서 재시작 방향 및 키보드 가시성 변경과 같은 이벤트를 수신하도록하고 작업 내에서이를 처리하도록 할 수 있습니다.
다음을 추가하여 시작하십시오.android:configChanges
노드를 활동의 매니페스트 노드에 추가
android:configChanges="keyboardHidden|orientation"
또는을 위해Android 3.2 (API 수준 13) 이상:
android:configChanges="keyboardHidden|orientation|screenSize"
그런 다음 활동 내에서onConfigurationChanged
방법 및 전화setContentView
새로운 방향에서 GUI 레이아웃을 다시 수행하도록 강제합니다.
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.myLayout);
}
android:configChanges
)는 피하고 최후의 수단으로 만 사용해야합니다. 구성 변경으로 인해 재시작을 올바르게 처리하는 방법에 대한 자세한 내용은 런타임 변경 처리를 참조하십시오.대신 회전 이벤트에서 데이터를 유지하기 위해onSaveInstanceState Bundle
; 또는 @ Jon-O보증,onRetainNonConfigurationInstance
. - JeffroonRetainNonConfigurationChanges
내결함성이 뛰어나고 솔직합니다. - Bananeweizen
Android 3.2 이상용 업데이트 :
주의: Android 3.2 (API 레벨 13)부터 시작하여"화면 크기"도 변경됩니다.장치가 가로 및 세로 방향으로 전환 할 때 따라서 API 수준 13 이상 (minSdkVersion 및 targetSdkVersion 속성에 의해 선언 된대로)을 개발할 때 방향 변경으로 인해 런타임이 다시 시작되는 것을 방지하려면
"screenSize"
가치 이외에"orientation"
값. 즉, 선언해야합니다.android:configChanges="orientation|screenSize"
. 그러나 애플리케이션이 API 레벨 12 이하를 목표로하는 경우 활동이 항상이 구성 변경을 처리합니다 (이 구성 변경으로 인해 Android 3.2 이상 기기에서 실행되는 경우에도 활동이 다시 시작되지 않음).
Fragments
과setRetainInstance
대신. - Simon ForsbergscreenSize
안드로이드 3.2 이상, 그게 내 문제를 해결, 감사합니다! - fantouch
그 (것)들을 멈추는 대신에onCreate()
모두 해고되는 것을 막기 위해Bundle
savedInstanceState
그 이벤트가 null인지 아닌지를 확인하기 위해서 이벤트에 건네받습니다.
예를 들어, 어떤 논리가 실행되어야 할 때Activity
모든 오리엔테이션 변화가 아니라 진정한 의미로 만들어졌습니다.onCreate()
오직savedInstanceState
null
그렇지 않으면 레이아웃을 위해 레이아웃을 다시 그리기를 원합니다.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game_list);
if(savedInstanceState == null){
setupCloudMessaging();
}
}
이것이 궁극적 인 대답인지 확실하지 않지만 그것이 나를 위해 일합니다.
Intent serverintent = new Intent(MainActivity.this, MessageListener.class);
과startService(serverintent);
만드는 방법serverSocket = new ServerSocket(0xcff2);
과Socket client = serverSocket.accept();
~와BufferedReader(new InputStreamReader(client.getInputStream()));
내 안드로이드를 회전시키고 클라이언트 / 서버 연결을 활성 상태로 유지하면서 GUI를 회전시킬 수 있습니다. 설명서에 따르면 마지막 활동이 종료되면 savedInstanceState가 초기화됩니다. - Fred F
제가 한...
매니페스트에서 활동 섹션에 추가됨 :
android:configChanges="keyboardHidden|orientation"
구현 된 코드에서
//used in onCreate() and onConfigurationChanged() to set up the UI elements
public void InitializeUI()
{
//get views from ID's
this.textViewHeaderMainMessage = (TextView) this.findViewById(R.id.TextViewHeaderMainMessage);
//etc... hook up click listeners, whatever you need from the Views
}
//Called when the activity is first created.
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
InitializeUI();
}
//this is called when the screen rotates.
// (onCreate is no longer called when screen rotates due to manifest, see: android:configChanges)
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
setContentView(R.layout.main);
InitializeUI();
}
Fragments
과setRetainInstance
대신. - Simon Forsberg
당신이 설명하는 것은 기본 동작입니다. 다음을 추가하여 이러한 이벤트를 직접 감지하고 처리해야합니다.
android:configChanges
매니페스트에 추가 한 다음 변경하려는 내용을 처리합니다. 따라서 오리엔테이션에서는 다음을 사용합니다.
android:configChanges="orientation"
그리고 키보드를 열거 나 닫을 때는 다음을 사용하십시오 :
android:configChanges="keyboardHidden"
두 가지를 모두 처리하려면 다음과 같은 pipe 명령으로 구분할 수 있습니다.
android:configChanges="keyboardHidden|orientation"
이것은 당신이 호출 한 Activity에서 onConfigurationChanged 메소드를 트리거합니다. 메서드를 재정의하면 새 값을 전달할 수 있습니다.
희망이 도움이됩니다.
android:configChanges="orientation"
최소한 안드로이드 2.1에서는 에뮬레이터에서 버그를 일으키는 것 같다. - Liudvikas BukysFragments
과setRetainInstance
대신. - Simon Forsberg
방금이 지식을 발견했습니다.
오리엔테이션 변경을 통해 활동을 유지하고onConfigurationChanged
,문서과위 코드 샘플매니페스트 파일에 다음을 제안하십시오.
android:configChanges="keyboardHidden|orientation"
항상 효과가 있다는 이점이 있습니다.
보너스 지식은keyboardHidden
논리적 인 것처럼 보일지 모르지만, 에뮬레이터에서 오류를 발생시킵니다 (최소한 Android 2.1의 경우) : 지정 만orientation
에뮬레이터에서 둘 다 호출하게합니다.OnCreate
과onConfigurationChanged
때때로, 그리고 오직OnCreate
다른 시간.
장치에서 오류를 보지 못했지만 다른 장치에서 실패한 에뮬레이터에 대해 들었습니다. 따라서 문서화 할 가치가 있습니다.
Fragments
과setRetainInstance
대신. - Simon Forsberg
Android 플랫폼의 방향 변경에 따른 데이터 지속 방식의 사용을 고려해 볼 수도 있습니다.onRetainNonConfigurationInstance()
과getLastNonConfigurationInstance()
.
이렇게하면 서버 가져 오기에서 얻은 정보 나 계산 된 정보와 같은 구성 변경을 통해 데이터를 유지할 수 있습니다.onCreate
또는 Android를 다시 레이아웃 할 수있게하는 동안Activity
현재 사용중인 방향에 대해 xml 파일을 사용합니다.
이러한 메소드는 이제는 권장되지 않지만 (위의 솔루션 대부분이 제시하는 방향 변경을 처리하는 것보다 훨씬 유연하지만) 모든 사용자가Fragments
대신에setRetainInstance(true)
각각에Fragment
당신은 유지하고 싶습니다.
이 접근법은 유용하지만 Fragments를 사용할 때는 불완전합니다.
프래그먼트는 일반적으로 구성 변경시 다시 생성됩니다. 이 일이 발생하기를 원하지 않으면
setRetainInstance(true);
조각의 생성자에서
이로 인해 구성 변경 중에 조각이 유지됩니다.
http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)
setRetainInstance()
메소드 @Abdo 언급했다. - brianmearns
방금 추가했습니다.
android:configChanges="keyboard|keyboardHidden|orientation"
매니페스트 파일에서추가하지 않았다.어떤onConfigurationChanged
내 활동의 방법.
키보드가 미끄러지거나 아무 일도 일어나지 않을 때마다.
<application ...android:configChanges="keyboard|keyboardHidden|orientation">
작동하고 있습니다. build.gradle의 내 설정 :minSdkVersion 15, compileSdkVersion 23, buildToolsVersion "23.0.2"
- Junior M
onConfigurationChanged is called when the screen rotates. (onCreate is no longer called when screen rotates due to manifest, see: android:configChanges)
매니페스트의 어느 부분에 "전화하지 마세요.onCreate()
"?
또한,
Google의 문서는 사용하지 말라고 말합니다.android:configChanges
(최후의 수단을 제외하고는) .... 그러나 그 다음에 그들이 제안하는 다른 방법들해야 할 것용도android:configChanges
.
에뮬레이터가 항상 호출하는 것은 제 경험이었습니다.onCreate()
회전시.
하지만 동일한 코드를 실행하는 1-2 개의 장치는 ...하지 마십시오.
왜 어떤 차이가 있는지 확신 할 수 없습니다.
매니페스트에 다음 행을 추가하십시오.
android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout|uiMode"
활동에 대한이 스 니펫 :
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
그만큼onCreate
메서드를 변경하더라도 여전히 메서드가 호출됩니다.orientation
android의 따라서이 무거운 기능을이 방법으로 옮기는 것은 도움이되지 않습니다.
아래에 코드를 넣으십시오.<activity>
~에Manifest.xml
:
android:configChanges="screenLayout|screenSize|orientation"
Android 매니페스트의 변경 사항은 다음과 같습니다.
android:configChanges="keyboardHidden|orientation"
활동 내에서 이루어질 수있는 추가 사항은 다음과 같습니다.
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();
}
}
다음 단계를 수행하는 것은 매우 간단합니다.
<activity
android:name=".Test"
android:configChanges="orientation|screenSize"
android:screenOrientation="landscape" >
</activity>
이것은 나를 위해 작동합니다 :
노트 :오리엔테이션은 당신의 요구에 달려 있습니다.
이를 수행하는 방법에는 여러 가지가 있습니다.
활동 상태를에 저장 할 수 있습니다.onSaveInstanceState
.
@Override
public void onSaveInstanceState(Bundle outState) {
/*Save your data to be restored here
Example : outState.putLong("time_state", time); , time is a long variable*/
super.onSaveInstanceState(outState);
}
그런 다음bundle
상태를 복원합니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState!= null){
/*When rotation occurs
Example : time = savedInstanceState.getLong("time_state", 0); */
} else {
//When onCreate is called for the first time
}
}
또 다른 대안은 직접 오리엔테이션 변경을 처리하는 것입니다. 그러나 이것은 좋은 연습으로 간주되지 않습니다.
매니페스트 파일에 추가하십시오.
android:configChanges="keyboardHidden|orientation"
Android 3.2 이상 :
android:configChanges="keyboardHidden|orientation|screenSize"
@Override
public void onConfigurationChanged(Configuration config) {
super.onConfigurationChanged(config);
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
//Handle rotation from landscape to portarit mode here
} else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
//Handle rotation from portrait to landscape mode here
}
}
회전을 피하기 위해 액티비티를 세로 또는 가로 모드로 제한 할 수도 있습니다.
매니페스트 파일의 액티비티 태그에 다음을 추가합니다.
android:screenOrientation="portrait"
또는 귀하의 활동에 프로그래밍 방식으로 구현하십시오.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
이 작업을 수행 한 방법은onRestoreInstanceState
그리고onSaveInstanceState
이벤트를 저장하려면Bundle
(비록 당신이 어떤 변수를 저장하지 않아도된다면, 거기에 뭔가를 넣으십시오.Bundle
비어 있지 않습니다). 그런 다음onCreate
메소드가Bundle
비어 있고, 그렇다면 초기화를 수행하고 그렇지 않으면 초기화하십시오.
"안드로이드 방식"이 아니지만 방향 변경을 직접 처리하고 변경된 방향을 고려하기 위해 위젯의 위치를 간단히 변경하여 매우 좋은 결과를 얻었습니다. 뷰를 저장하고 복원 할 필요가 없으므로 다른 어떤 방법보다 빠릅니다. 또한 재배치 된 위젯은 정확히 동일한 위젯과 이동 및 크기 조정을하기 때문에 사용자에게보다 매끄러운 환경을 제공합니다. 모델 상태뿐 아니라 뷰 상태도 이러한 방식으로 보존 될 수 있습니다.
RelativeLayout
때로는 방향을 재조정해야하는 관점에서 좋은 선택이 될 수 있습니다. 각 하위 위젯에 대해 서로 다른 상대 위치 지정 규칙을 사용하여 일련의 세로 레이아웃 매개 변수 세트와 조경 된 레이아웃 매개 변수 세트를 제공하기 만하면됩니다. 그런 다음onConfigurationChanged()
메소드를 호출하면 적절한 메소드를setLayoutParams()
각 어린이에게 전화하십시오. 자식 컨트롤 자체가 필요하면내부적으로다시 방향을 바꾼다면, 그 아이에 대한 방 법을 호출하여 재배 향을 수행 할 수 있습니다. 그 자식은 비슷하게 메소드를 호출합니다.그...내부 재배치가 필요한 하위 컨트롤 등이 있습니다.
노트 :나는 미래의 누군가가 나와 같은 문제에 직면하면이 대답을 게시합니다. 나를 위해 다음 줄은 충분하지 않았습니다.
android:configChanges="orientation"
화면을 회전 시켰을 때`onConfigurationChanged (Configuration newConfig) 메소드가 호출되지 않았습니다.
해결책:문제가 오리엔테이션과 관련이있는 경우에도 "screenSize"를 추가해야했습니다. 따라서 AndroidManifest.xml - 파일에 다음을 추가합니다.
android:configChanges="keyboardHidden|orientation|screenSize"
그런 다음 메서드를 구현합니다.onConfigurationChanged(Configuration newConfig)
onSavedInstanceState 메서드를 사용하여 모든 값을 해당 매개 변수에 저장해야합니다.
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
outPersistentState.putBoolean("key",value);
}
사용
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
savedInstanceState.getBoolean("key");
}
개체를보기 위해 검색 및 값 설정 화면 회전을 처리합니다.
화면이 회전 할 때마다 열린 활동이 끝나고 onCreate ()가 다시 호출됩니다.
1 . 화면이 회전 될 때 활동 상태를 저장하는 한 가지 작업을 수행 할 수 있으므로 활동의 onCreate ()가 다시 호출 될 때 모든 오래된 항목을 복구 할 수 있습니다. 부치다이링크
2. 활동을 다시 시작하지 않으려면 manifest.xml 파일에 다음 행을 추가하면됩니다.
<activity android:name=".Youractivity"
android:configChanges="orientation|screenSize"/>
의 활동 섹션에서manifest
, 추가 :
android:configChanges="keyboardHidden|orientation"
매니페스트에 다음 줄을 추가하십시오.
android:configChanges="orientation|screenSize"
사람들은 당신이 사용해야한다고 말하고 있습니다.
android:configChanges="keyboardHidden|orientation"
그러나 Android에서 회전을 처리하는 가장 효과적이고 가장 전문적인 방법은 Loader 클래스를 사용하는 것입니다. 그것은 유명한 클래스가 아닙니다. (왜 그런지 모르겠지만) AsyncTask보다 훨씬 낫습니다. 자세한 내용은 Udacity의 Android 교육 과정에있는 Android 자습서를 참조하십시오.
물론 다른 방법으로 onSaveInstanceState를 사용하여 값이나 뷰를 저장하고 onRestoreInstanceState를 사용하여 값을 읽을 수 있습니다. 그것은 당신에게 달려 있습니다.
시행 착오를 거친 후 나는 대부분의 상황에서 나의 필요에 맞는 해결책을 발견했다. 코드는 다음과 같습니다.
매니페스트 구성 :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.pepperonas.myapplication">
<application
android:name=".App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
MainActivity :
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "MainActivity";
private Fragment mFragment;
private int mSelected = -1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate " + "");
// null check not realy needed - but just in case...
if (savedInstanceState == null) {
initUi();
// get an instance of FragmentTransaction from your Activity
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
/*IMPORTANT: Do the INITIAL(!) transaction only once!
* If we call this everytime the layout changes orientation,
* we will end with a messy, half-working UI.
* */
mFragment = FragmentOne.newInstance(mSelected = 0);
fragmentTransaction.add(R.id.frame, mFragment);
fragmentTransaction.commit();
}
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.d(TAG, "onConfigurationChanged " +
(newConfig.orientation
== Configuration.ORIENTATION_LANDSCAPE
? "landscape" : "portrait"));
initUi();
Log.i(TAG, "onConfigurationChanged - last selected: " + mSelected);
makeFragmentTransaction(mSelected);
}
/**
* Called from {@link #onCreate} and {@link #onConfigurationChanged}
*/
private void initUi() {
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate instanceState == null / reinitializing..." + "");
Button btnFragmentOne = (Button) findViewById(R.id.btn_fragment_one);
Button btnFragmentTwo = (Button) findViewById(R.id.btn_fragment_two);
btnFragmentOne.setOnClickListener(this);
btnFragmentTwo.setOnClickListener(this);
}
/**
* Not invoked (just for testing)...
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.d(TAG, "onSaveInstanceState " + "YOU WON'T SEE ME!!!");
}
/**
* Not invoked (just for testing)...
*/
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.d(TAG, "onSaveInstanceState " + "YOU WON'T SEE ME, AS WELL!!!");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume " + "");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause " + "");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy " + "");
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_fragment_one:
Log.d(TAG, "onClick btn_fragment_one " + "");
makeFragmentTransaction(0);
break;
case R.id.btn_fragment_two:
Log.d(TAG, "onClick btn_fragment_two " + "");
makeFragmentTransaction(1);
break;
default:
Log.d(TAG, "onClick null - wtf?!" + "");
}
}
/**
* We replace the current Fragment with the selected one.
* Note: It's called from {@link #onConfigurationChanged} as well.
*/
private void makeFragmentTransaction(int selection) {
switch (selection) {
case 0:
mFragment = FragmentOne.newInstance(mSelected = 0);
break;
case 1:
mFragment = FragmentTwo.newInstance(mSelected = 1);
break;
}
// Create new transaction
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.frame, mFragment);
/*This would add the Fragment to the backstack...
* But right now we comment it out.*/
// transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
}
}
샘플 조각 :
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* @author Martin Pfeffer (pepperonas)
*/
public class FragmentOne extends Fragment {
private static final String TAG = "FragmentOne";
public static Fragment newInstance(int i) {
Fragment fragment = new FragmentOne();
Bundle args = new Bundle();
args.putInt("the_id", i);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d(TAG, "onCreateView " + "");
return inflater.inflate(R.layout.fragment_one, container, false);
}
}
에서 찾을 수 있습니다.기둥.
용도orientation
다른 방향으로 다른 작업을 수행 할 수 있습니다.
@Override
public void onConfigurationChanged(Configuration myConfig)
{
super.onConfigurationChanged(myConfig);
int orient = getResources().getConfiguration().orientation;
switch(orient)
{
case Configuration.ORIENTATION_LANDSCAPE:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
break;
case Configuration.ORIENTATION_PORTRAIT:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
break;
default:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
}
이 코드를 아래에 넣으십시오.Activity
...에서Android Manifest
.
android:configChanges="orientation"
오리엔테이션을 변경하면 활동이 다시 시작되지 않습니다.
화면 방향 (가로 또는 세로) 고정AndroidManifest.xml
android:screenOrientation="portrait"
또는android:screenOrientation="landscape"
이것을 위해onResume()
메서드가 호출되지 않습니다.
이 코드를 사용하여 화면의 현재 방향으로 고정시킬 수 있습니다 ...
int currentOrientation =context.getResources().getConfiguration().orientation;
if (currentOrientation == Configuration.ORIENTATION_PORTRAIT) {
((Activity) context).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else {
((Activity) context). setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
액티비티에서 ViewModel 객체를 사용할 수 있습니다.
ViewModel 객체는 구성 변경 중에 자동으로 유지되므로 보유하고있는 데이터를 다음 액티비티 또는 프래그먼트 인스턴스에서 즉시 사용할 수 있습니다. 더 읽기 :
https://developer.android.com/topic/libraries/architecture/viewmodel