강제 "자화" 방향 모드
애플리케이션이 절대적으로 "경관" 모드를 위해 설계되지 않았기 때문에 애플리케이션에 "초상" 모드를 강제로 적용하려고 합니다.
몇 가지 포럼을 읽은 후 매니페스트 파일에 다음 행을 추가했습니다.
<application
android:debuggable="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:screenOrientation="portrait">
하지만 제 단말기(HTC Desire)에서는 작동하지 않습니다.매니페스트 파일의 행을 무시하고 "portrait" lo "landscape"에서 전환합니다.
더 많은 포럼을 읽은 후 매니페스트 파일에 이 내용을 추가하려고 했습니다.
<application
android:debuggable="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:configChanges="orientation"
android:screenOrientation="portrait">
그리고 제 활동 시간에 이 기능이 있습니다.
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
하지만 다시 말하지만, 운이 없습니다.
응용프로그램 요소에 방향을 적용하지 말고, 활동 요소에 속성을 적용해야 하며, 또한 설정해야 합니다.configChanges
아래에서 지적하는 바와 같이
예:
<activity
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden">
</activity>
매니페스트 파일에 적용됩니다.AndroidManifest.xml
.
참고:
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden"
매니페스트 파일에 추가됩니다. 여기서 액티비티가 정의됩니다.
만약 당신이 나와 같은 많은 활동을 하고 있다면, 당신의 어플리케이션에서 또는 매니페스트의 각 활동 태그에 대한 코드를 입력하고 싶지 않다면 당신은 이것을 할 수 있습니다.
Application Base 클래스에서 라이프사이클 콜백을 받습니다.
그래서 기본적으로 여기서 애플리케이션 클래스에서 생성된 on create를 트리거할 때 각 활동에 대해 수행되는 것이 코드입니다.
public class MyApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
activity.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// for each activity this function is called and so it is set to portrait mode
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});
}
도움이 되었으면 좋겠습니다.
생각합니다android:screenOrientation="portrait"
개인 활동에 사용할 수 있습니다.따라서 해당 속성을 사용합니다.<activity>
그:
<activity android:name=".<Activity Name>"
android:label="@string/app_name"
android:screenOrientation="portrait">
...
</activity>
강제 세로 모드 또는 가로 모드를 설정하고 각각 선을 추가합니다.
아래 줄로 가져오기:
import android.content.pm.ActivityInfo;
바로 위에 아래 줄 추가setContentView(R.layout.activity_main);
초상화용:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//Set Portrait
조경용:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//Set Landscape
이것은 틀림없이 효과가 있을 것입니다.
Android의 문서에 따르면, 당신은 또한 종종 다음을 포함해야 합니다.screenSize
변경 가능한 구성 변경 사항입니다.
android:configChanges="orientation|screenSize"
응용 프로그램이 minSdkVersion 및 targetSdkVersion 특성에 의해 선언된 대로 API 레벨 13 이상을 대상으로 하는 경우 장치가 세로 방향과 가로 방향을 전환할 때도 변경되므로 "screenSize" 구성을 선언해야 합니다.
또한 여러분 모두가 가치를 포함한다면keyboardHidden
당신의 예에서, 당신은 또한 고려해야 하지 않습니까?locale
,mcc
,fontScale
,keyboard
다른 사람들은?
AndroidManifest.xml에 이 줄이 있었습니다.
<activity
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
android:label="@string/app_name" android:name="Project Name"
android:theme="@android:style/Theme.Black.NoTitleBar">
제가 변경한 내용(그냥 추가됨)android:screenOrientation="portrait"
)
<activity
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
android:label="@string/app_name" android:name="Project Name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar">
이것은 나를 위해 고쳐준 것입니다.
보완할 점:최근에 앱을 업데이트했는데 이전에는 가로 모드와 세로 모드가 모두 작동하고 있었고 업데이트된 버전이 세로 모드에서 작동했으면 해서 추가했습니다.
android:screenOrientation="portrait"
업데이트를 테스트했을 때 충돌했습니다.그 다음에 덧붙였어요.
android:configChanges="orientation|keyboardHidden"
그것도 효과가 있습니다
다른 오리엔테이션을 지원하고 싶은 경우debug
그리고.release
builds, write so(https://developer.android.com/studio/build/gradle-tips#share-properties-with-the-manifest) 참조).
build.gradle
당신의app
폴더 쓰기:
android {
...
buildTypes {
debug {
applicationIdSuffix '.debug'
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// Creates a placeholder property to use in the manifest.
manifestPlaceholders = [orientation: "fullSensor"]
}
release {
debuggable true
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// Creates a placeholder property to use in the manifest.
manifestPlaceholders = [orientation: "portrait"]
}
}
}
그다음에AndroidManifest
당신은 이 변수 "방향"을 어떤 곳에서도 사용할 수 있습니다.Activity
:
<activity
android:name=".LoginActivity"
android:screenOrientation="${orientation}" />
추가할 수 있습니다.android:configChanges
:
manifestPlaceholders = [configChanges: "", orientation: "fullSensor"]
디버그 및 디버그에서manifestPlaceholders = [configChanges: "keyboardHidden|orientation|screenSize", orientation: "portrait"]
석방된 상태에서
<activity
android:name=".LoginActivity"
android:configChanges="${configChanges}"
android:screenOrientation="${orientation}" />
내 생각엔 당신이 추가하고 싶은 것 같아요.android:configChanges="orientation|keyboardHidden"
당신의 활동에?그렇지 않으면 config-change에서 활동이 다시 시작됩니다.onConfigurationChanged
그때는 불리지 않을 것이고, 오직.onCreate
전체 앱을 완전한 세로 모드 또는 완전한 가로 모드에서 실행하려면 매우 간단한 작업을 수행해야 합니다.
- 앱의 매니페스트 폴더로 이동
- intent-filter가 정의된 활동을 봅니다.기본적으로 앱이 실행되면 열리는 첫 번째 활동입니다.
- 이 활동 안에 추가
android:screenOrientation="portrait"
이렇게 하면 전체 앱이 세로 모드에서 실행되거나 가로 모드에서 실행되도록 설정할 수도 있습니다.
단답형:하지 마요.
세로 모드와 가로 모드 모두에서 실행할 수 있도록 앱을 다시 디자인합니다.초상화와 풍경화 모두에서 작동하도록 설계할 수 없는 UI는 없습니다. 게으르거나 상상력이 부족한 개발자들 뿐입니다.
그 이유는 좀 간단합니다.당신은 당신의 앱을 가능한 많은 다양한 기기에서 가능한 한 많은 청중들이 사용하기를 원합니다.특정 화면 방향을 강제로 설정하면 해당 방향을 지원하지 않는 장치에서 앱이 실행되는 것을 방지하고 다른 방향을 선호하는 잠재적 고객을 좌절시키고 소외시킵니다.
:세로 모드를 강제로 적용하도록 앱을 설계합니다.고객이 주로 랜드스케이프 모드에서 사용하는 2-in-1 장치에서 앱을 다운로드합니다.
결과 1: 앱을 사용할 수 없게 되거나, 고객은 어쩔 수 없이 기기의 도킹을 해제하고 회전시킨 후 익숙지 않거나 편안하지 않은 방향으로 사용해야 합니다.
결과 2: 고객은 앱의 직관적이지 않은 디자인에 좌절하고 대안을 찾거나 앱을 완전히 도려냅니다.
저는 지금 앱으로 이것과 싸우고 있는데 소비자이자 개발자로서 정말 싫어요.앱이 유용하기는 하지만, 그 기능이 제공하는 환상적이기는 하지만, 저는 그 앱이 제 장치를 사용하는 모든 다른 방식과 반대되는 방향을 사용하도록 강요하기 때문에 그 앱을 절대적으로 싫어합니다.
고객이 앱을 싫어하는 것을 원하지 않을 것입니다.
이것이 질문에 직접적으로 답하는 것은 아니라는 것을 알고 있기 때문에 궁금하신 분들을 위해 조금 더 자세히 설명해드리고 싶습니다.
개발자들은 코드를 정말 잘 쓰고 디자인은 정말 못하는 경향이 있습니다.이 질문은 코드 질문처럼 들리고 질문하는 사람은 확실히 코드 질문처럼 느껴지지만 실제로 디자인 질문입니다.
정말 문제는 "앱에서 화면 방향을 잠글까요?" 입니다.질문자는 UI가 세로 모드에서만 기능하고 잘 보이도록 디자인하는 것을 선택했습니다.개발 시간을 절약하기 위한 것이었거나, 앱의 워크플로우가 특히 세로 레이아웃(모바일 게임의 경우 일반적)에 도움이 되기 때문이 아닐까 생각합니다.하지만 그러한 이유들은 적절한 디자인에 동기를 부여하는 모든 진짜 중요한 요소들을 무시합니다.
고객 참여 - 고객이 앱에서 밀려나지 않고 앱에 끌리는 느낌을 받기를 원합니다.앱은 고객이 앱을 열기 전에 하던 일에서 순조롭게 전환되어야 합니다. (이것이 대부분의 플랫폼이 일관된 설계 원칙을 가지고 있기 때문에 대부분의 앱은 그럴 필요가 없지만 어느 정도 비슷해 보입니다.)
고객 반응 - 고객이 앱에 긍정적으로 반응하기를 원합니다.그들은 그것을 즐겨 사용해야 합니다.업무용 급여 앱이라고 해도, 그들이 그것을 열고 시간을 보내는 것은 기쁜 일일 것입니다.앱은 고객의 시간을 절약하고 대안에 대한 좌절감을 줄여줄 것입니다. (사용자를 짜증나게 하는 앱은 당신의 앱에 대한 분노를 형성하고 당신의 브랜드에 대한 분노로 발전합니다.)
고객 전환 - 고객이 브라우징에서 상호 작용으로 빠르고 쉽게 이동할 수 있기를 원합니다.이것이 인상을 수익으로 전환하는 모든 앱의 궁극적인 목표입니다.(수익을 창출하지 못하는 애플리케이션은 비즈니스 관점에서 구축하는 데 시간 낭비입니다.)
제대로 설계되지 않은 UI는 고객 참여와 반응을 감소시켜 결국 수익을 감소시킵니다.모바일 중심의 세계에서 (특히 초상화/경관 디스플레이 모드를 주제로 한) 반응형 웹 디자인이 그렇게 중요한 이유를 설명해 줍니다.Walmart Canada는 2013년 11월 웹사이트에 반응형 디자인을 도입했으며 고객 전환율이 20% 증가했습니다.오닐 의류는 반응형 웹 디자인을 구현했으며 iOS 기기를 사용하는 고객의 매출은 101.25%, 안드로이드 기기를 사용하는 고객의 매출은 591.42% 증가했습니다.
또한 개발자들은 특정 솔루션(예: 디스플레이 방향 잠금) 구현에 집중하는 경향이 있으며, 이 사이트의 대부분의 개발자들은 이 솔루션이 문제에 대한 최선의 해결책인지 의문을 갖지 않고 솔루션 구현을 지원하는 데 매우 기뻐할 것입니다.
화면 방향을 잠그는 것은 두-휴 루프를 구현하는 것과 동등한 UI 디자인입니다.정말 그런 식으로 하고 싶으신가요, 아니면 더 좋은 대안이 있나요?
앱을 단일 디스플레이 모드로 강제 전환하지 마십시오.대응할 수 있도록 추가 시간과 노력을 투자합니다.
언급URL : https://stackoverflow.com/questions/4885620/force-portrait-orientation-mode
'programing' 카테고리의 다른 글
jQuery.val() vs.attr("value") (0) | 2023.10.21 |
---|---|
spring boot application에서 탄력적인 검색 쿼리를 표시하는 방법 (0) | 2023.10.21 |
.gitignore & .hgignore & svn에 따라 rsync 제외: --filter=:C와 같은 ignore (0) | 2023.10.21 |
MySQL 보기 및 인덱스 사용 (0) | 2023.10.21 |
XAMPP 및 워드프레스 - 느린 로딩 (0) | 2023.10.21 |