답변:
android:screenOrientation="portrait"manifest.xml 파일에서 각 활동에 대해 지정할 수 있습니다 . application태그 에는이 옵션을 지정할 수 없습니다 .
다른 옵션은 프로그래밍 방식으로 수행하는 것입니다 (예 Activity: 기본 클래스).
@Override
public void onCreate(Bundle savedInstanceState) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
마지막 옵션은 Android 4.0 (API 14+) 이후에만 사용할 수있는 활동 라이프 사이클 리스너로 수행하는 것입니다. 모든 것은 커스텀 Application클래스 에서 발생합니다 :
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
@Override
public void onActivityCreated(Activity a, Bundle savedInstanceState) {
a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
});
}
ActivityLifecycleAdapter는 빈 구현이 될 생성해야 할 도우미 클래스 일뿐입니다 ActivityLifecycleCallbacks(따라서 단순히 인터페이스 중 하나가 필요할 때 해당 인터페이스의 모든 메소드를 재정의 할 필요는 없습니다).
예, 프로그래밍 방식과 모든 활동 모두 에서이 작업을 수행하여 모든 활동이 확장되는 AbstractActivity를 만들 수 있습니다.
public abstract class AbstractActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
이 추상 활동은 글로벌 메뉴에도 사용할 수 있습니다.
ActivityInfo.SCREEN_ORIENTATION_NOSENSOR일부 장치에는 세로 방향이 없으므로 장치를 기본 상태로 유지하기 때문에 더 나은 대답이어야 한다고 생각합니다 . 그러나 'nosensor'는 저에게 효과적이지 않으므로 @arcone의 대답이 저를 의미합니다.
모든 활동을 공통 기본 클래스로 확장 하지 않고도 전체 애플리케이션에 대해이를 수행 할 수 있습니다 .
트릭은 먼저 Application프로젝트에 서브 클래스 를 포함시키는 것 입니다. 에서 onCreate()앱이 처음 시작될 때 호출되는 ActivityLifecycleCallbacks활동 수명주기 이벤트 알림을 수신 하도록 객체 (API 레벨 14+)를 등록 합니다.
이렇게하면 때마다 자신의 코드를 실행할 수있는 기회를 제공합니다 모든 앱에서 활동이 시작 (또는 중지 또는 재개, 또는 무엇이든)됩니다. 이 시점 setRequestedOrientation()에서 새로 생성 된 활동을 호출 할 수 있습니다 .
class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
// register to be informed of activities starting up
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity,
Bundle savedInstanceState) {
// new activity created; force its orientation to portrait
activity.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
....
});
}
}
매니페스트 파일에서이를 설정할 수 있습니다.
android:name=".your launching activity name"
android:screenOrientation="portrait"
클래스 파일에 다음과 같이 코드를 작성하여 동일하게 달성 할 수도 있습니다.
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
안드로이드 개발자 가이드에서와 같이 :
"방향"화면 방향이 변경되었습니다. 사용자가 장치를 회전했습니다. 참고 : 애플리케이션이 API 레벨 13 이상 (minSdkVersion 및 targetSdkVersion 속성으로 선언 된대로)을 대상으로하는 경우 장치가 세로 방향과 가로 방향간에 전환 될 때도 변경되므로 "screenSize"구성도 선언해야합니다.
"screenSize"사용 가능한 현재 화면 크기가 변경되었습니다. 이것은 현재 종횡비를 기준으로 현재 사용 가능한 크기의 변화를 나타내므로 사용자가 가로와 세로를 전환 할 때 변경됩니다. 그러나 애플리케이션이 API 레벨 12 이하를 대상으로하는 경우 활동은 항상이 구성 변경을 처리합니다 (이 구성 변경은 Android 3.2 이상 디바이스에서 실행중인 경우에도 활동을 다시 시작하지 않습니다). API 레벨 13에 추가되었습니다.
따라서 AndroidManifest.xml 파일에서 다음을 넣을 수 있습니다.
<activity
android:name=".activities.role_activity.GeneralViewPagerActivity"
android:label="@string/title_activity_general_view_pager"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden|screenSize"
>
</activity>
추가 <preference name="orientation" value="portrait" />아래에 <widget>내 config.xml에이 나를 위해 일에.
(다른 솔루션은 내 장치에서 작동하지 않았거나 빌드 중에 덮어 쓰여졌거나 빌드 프로세스 중에 사용 중단 오류가 발생했습니다.)
"세로" 에 사용하려는 활동을 매니페스트 파일 에서 활동 태그에이 코드를 작성해야합니다.
android:screenOrientation="portrait"
이처럼
android:icon="@drawable/icon"
android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity"
android:screenOrientation="portrait" >
하지만 가로로 화면을 원하면이 코드를 사용하십시오
android:screenOrientation="landscape"
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//setting screen orientation locked so it will be acting as potrait
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
}
궁금한 점이 있다면 Kotlin 에서 모든 활동을 공통 기본 클래스로 확장하지 않고도 전체 응용 프로그램 에서이 작업을 수행 할 수있는 방법 은 아래 예를 참조하십시오.
class InteractiveStoryApplication: Application() {
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(object: ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
override fun onActivityPaused(activity: Activity?) {
}
override fun onActivityResumed(activity: Activity?) {
}
override fun onActivityDestroyed(activity: Activity?) {
}
override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
}
override fun onActivityStarted(activity: Activity?) {
}
override fun onActivityStopped(activity: Activity?) {
}
})
}
}
그런 다음 AndroidManifest에 공통 기본 클래스를 추가해야합니다.
<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"
Graham Borland 답변과 비슷하지만 원하지 않는 경우 응용 프로그램 클래스를 만들 필요가없는 것 같습니다 ... 프로젝트에서 기본 활동을 만드십시오.
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Potrait 모드를 사용하려는 AppCompatActivity 대신이 클래스를 확장하십시오.
public class your_activity extends BaseActivity {}
매니페스트에 다음을 입력하십시오.
<activity
android:screenOrientation="portrait"
<!--- Rest of your application information ---!>
</activity>