내 Android 앱에서 일부 뷰에 대해 가로 모드를 비활성화하려면 어떻게해야합니까?
내 Android 앱에서 일부 뷰에 대해 가로 모드를 비활성화하려면 어떻게해야합니까?
답변:
android:screenOrientation="portrait"
AndroidManifest.xml의 활동에 추가하십시오 . 예를 들면 다음과 같습니다.
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" />
편집 : 이것은 매우 인기있는 답변이되었으므로 초상화를 강요하는 것이 자주 적용되는 문제에 대한 올바른 해결책이 거의 없기 때문에 매우 죄책감을 느낍니다.
강제 인물 사진의 주요 경고 사항 :
retainInstance
조각 을 사용하는 법을 배웁니다 .따라서 대부분의 앱은 휴대 전화 센서, 소프트웨어 및 물리적 구성이 사용자가 앱과 상호 작용하려는 방식에 대한 자체 결정을 내릴 수 있도록해야합니다. 그러나 sensor
사용 사례에서 기본 방향 동작에 만족하지 않는 경우 몇 가지 경우를 계속 생각할 수 있습니다.
nosensor
방향은 사용 하는 것이 좋습니다. 이렇게하면 대부분의 태블릿에서 가로 및 세로로 표시되지만 대부분의 "일반"앱에서는 권장하지 않습니다 (일부 사용자는 전화기에서 가로 소프트 키보드를 입력하고 많은 태블릿 사용자는 세로로 읽습니다). 당신이 그들을 보자).sensorPortrait
보다 나은 수 있습니다 portrait
안드로이드 2.3에 대한; 이렇게하면 거꾸로 된 인물 사진을 볼 수 있으며 태블릿 사용시 일반적입니다.AndroidManifest.xml
이 게시물을 읽을 때까지 파일 스위치를 알지 못했기 때문에 내 앱에서 대신 이것을 사용했습니다.
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Fixed Portrait orientation
다음 android:screenOrientation="portrait"
과 같이 활동을 선언하는 매니페스트 파일에 이것을 추가하십시오.
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
자바 코드를 사용하려면
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
문의하기 전에 setContentView
당신의 활동 방법을 onCreate()
.
이 도움이 되길 바랍니다.
여기에 많은 답변이 "portrait"
AndroidManifest.xml 파일에서 사용하도록 제안 합니다. 이것은 좋은 솔루션처럼 보일 수 있지만 설명서에서 언급했듯이 가로 만있는 장치를 싱킹하고 있습니다. 또한 올바른 방향이 아닌 특정 장치 (가로에서 가장 잘 작동하는)가 세로로 들어가도록 강요하고 있습니다.
내 제안은 "nosensor"
대신 사용하는 것입니다. 그러면 기기가 기본 선호 방향을 사용하고 Google Play의 구매 / 다운로드를 차단하지 않으며 센서가 (내 경우에는 NDK) 게임을 망칠 수 없습니다.
매니페스트에 다음과 같이이 라인을 추가하십시오.
android : screenOrientation = "세로"
<manifest
package="com.example.speedtest"
android:versionCode="1"
android:versionName="1.0" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="ComparisionActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" >
</activity>
</application>
</manifest>
모든 활동을 공통 기본 클래스로 확장하지 않고도 전체 애플리케이션에 대해이를 수행 할 수 있습니다.
트릭은 먼저 프로젝트에 Application 서브 클래스를 포함시켜야합니다. 앱이 처음 시작될 때 호출되는 onCreate ()에서 ActivityLifecycle 이벤트 알림을 수신하기 위해 ActivityLifecycleCallbacks 객체 (API 레벨 14+)를 등록합니다.
이를 통해 앱의 활동이 시작 (또는 중지, 재개 또는 기타) 될 때마다 자신의 코드를 실행할 수 있습니다. 이 시점에서 새로 작성된 활동에 대해 setRequestedOrientation ()을 호출 할 수 있습니다.
매니페스트 파일에 app : name = ". MyApp"을 추가하는 것을 잊지 마십시오.
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);
}
....
});
}
}
활동의 각 매니페스트 항목에 방향을 추가하는 번거 로움을 피하고 싶지 않은 경우 'Activity'대신 'Activity'또는 'AppCompatActivity'를 상속하는 BaseActivity 클래스를 만듭니다. '또는'AppCompatActivity '를 선택하고 BaseActivity에 다음 코드를 추가하십시오.
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// rest of your code......
}
사용 중지 Landscape mode for your android app
(또는 단일 활동) 를 사용 중지 하려면 추가,
android:screenOrientation="portrait"
AndroidManifest.xml
파일 의 활동 태그에 .
처럼:
<activity android:name="YourActivityName"
android:icon="@drawable/ic_launcher"
android:label="Your App Name"
android:screenOrientation="portrait">
또 다른 방법은 프로그래밍 방식입니다.
프로그래밍 방식으로이 작업을 수행하려는 경우 Java 코드를 사용합니다. 가로 모드로 표시하지 않으려는 활동의 Java 클래스에 아래 코드를 추가하면됩니다.
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
자세한 내용은 여기 에 링크 설명을 입력하십시오.
android:screenOrientation="nosensor">
일부보기에서 방향을 변경하는 방법
전체 활동의 방향을 잠그는 대신이 클래스를 사용하여 실제적으로 모든 뷰에서 방향을 동적으로 잠글 수 있습니다.
당신의 풍경을 조경하십시오
OrientationUtils.lockOrientationLandscape(mActivity);
세로 보기
OrientationUtils.lockOrientationPortrait(mActivity);
방향 잠금 해제
OrientationUtils.unlockOrientation(mActivity);
오리엔테이션 활용 수업
import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Build;
import android.view.Surface;
import android.view.WindowManager;
/* * This class is used to lock orientation of android app in nay android devices
*/
public class OrientationUtils {
private OrientationUtils() {
}
/** Locks the device window in landscape mode. */
public static void lockOrientationLandscape(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
/** Locks the device window in portrait mode. */
public static void lockOrientationPortrait(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
/** Locks the device window in actual screen mode. */
public static void lockOrientation(Activity activity) {
final int orientation = activity.getResources().getConfiguration().orientation;
final int rotation = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
.getRotation();
// Copied from Android docs, since we don't have these values in Froyo
// 2.2
int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;
// Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO
if (!(Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)) {
SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) {
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
} else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) {
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
} else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
}
}
/** Unlocks the device window in user defined screen mode. */
public static void unlockOrientation(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
}
}
각 활동의 방향을 설정해야합니다.
<activity
android:name="com.example.SplashScreen2"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.example.Registration"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.example.Verification"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.example.WelcomeAlmostDone"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.example.PasswordRegistration"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
manifest.xml에이를 작성하여 특정 활동이 항상 세로 모드로 유지되도록 할 수 있습니다.
<activity android:name=".MainActivity"
android:screenOrientation="portrait"></activity>
활동의 onCreate () 메소드에 다음 줄을 작성하여 활동이 postrait 모드로 유지되도록 할 수도 있습니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
<android . . . >
. . .
<manifest . . . >
. . .
<application>
<activity android:name=".MyActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation">
</activity>
</application>
</manifest>
</android>
프로젝트에 아래 표창을 추가하십시오.
npm 설치
npm 나는 반응 지향적 방향 로커
그런 다음 React_Native (프로젝트 폴더) / android / app / src / main / AndroidManifest.xml 과 같은 매니페스트 클래스를 사용합니다.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:allowBackup="false"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
감사합니다!
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="in.co.nurture.bajajfinserv">
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
속성 또는 android : screenOrientation을 사용하여 세로 또는 가로 모드에서 활동을 제한 할 수 있습니다.
내 프로그램에 둘 이상의 활동이있는 경우 어떤 모드에서든 활동 중 하나를 제한 할 수 있으며 원하지 않는 다른 활동에는 영향을 미치지 않습니다.
다른 사람을 돕기 위해 AndroidManifest.xml의 ACTIVITY에 대한 다음 속성 만 있으면됩니다.
android : configChanges = "동향"
따라서 전체 활동 노드 :
<activity android:name="Activity1"
android:icon="@drawable/icon"
android:label="App Name"
android:configChanges="orientation">
그것은 나를 위해 일했다 .AndroidManifest 파일 에이 코드를 추가하십시오.
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:screenOrientation="portrait"
android:theme="@style/AppTheme">
....
....
</application>
활동이 첫 번째 장치 방향 상태와 관련된 경우 onCreate
방법 에서 현재 장치 방향을 가져온 다음 영구적으로 수정하십시오.
int deviceRotation = ((WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getOrientation();
if(deviceRotation == Surface.ROTATION_0) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else if(deviceRotation == Surface.ROTATION_180)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
}
else if(deviceRotation == Surface.ROTATION_90)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
else if(deviceRotation == Surface.ROTATION_270)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}