2011-02-03 87 views
220

我试图强制“肖像”模式为我的应用程序,因为我的应用程序绝对不是设计为“风景”模式。强制“肖像”方向模式

阅读一些论坛上后,我在清单文件中添加这些行:

<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); 
} 

但同样,没有运气。

回答

430

方向不适用于应用元素,相反,你应该应用属性的活动元素,还必须设置configChanges如下所述。

实施例:

<activity 
    android:screenOrientation="portrait" 
    android:configChanges="orientation|keyboardHidden"> 
</activity> 

这在清单文件AndroidManifest.xml施加。

+1

谢谢!那是我的错! – thomaus 2011-02-03 11:51:40

+12

什么是configChanges? – Dror 2012-10-23 20:05:31

+45

@Orchestrator,configChanges表示配置更改由活动本身处理。没有它,如果方向改变,活动将重新开始。你可能会问,如果你已经指定方向是“肖像”,它将如何改变?如果您启动另一项改变方向的活动,那么该活动可能会更改,然后该新活动即会退出,并将您返回到活动状态。例如,三星Galaxy S3上的默认图像捕获目的是在某些方向上进行的。 – 2013-01-08 00:12:39

9

我认为android:screenOrientation="portrait"可以用于个人活动。因此,使用该属性在<activity>标签,如:

<activity android:name=".<Activity Name>" 
    android:label="@string/app_name" 
    android:screenOrientation="portrait"> 
    ...   
</activity> 
1

我想你想添加android:configChanges="orientation|keyboardHidden"到你的活动?否则,该活动将在config-change上重新启动。该onConfigurationChanged就不叫那么,只有onCreate

15

注意

android:screenOrientation="portrait"  
android:configChanges="orientation|keyboardHidden" 

在清单文件中添加 - 在活动定义。

2

我在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"> 

这种固定的东西对我来说。

2

东西补充:我已经更新的应用程序最近,以前是在风景和肖像模式下工作,我想更新的版本应该在纵向模式下工作,所以我加了

android:screenOrientation="portrait" 

到相应的活动,并且当我测试更新时它就崩溃了。然后我加

android:configChanges="orientation|keyboardHidden" 

太,它的工作原理。

1

根据Android的文档,您通常还应该包含screenSize作为可能的配置更改。

android:configChanges="orientation|screenSize" 

如果您的应用程序的目标API级别13或更高版本(由 的minSdkVersion和targetSdkVersion属性的声明),那么你也应该 申报“屏幕尺寸”的配置,因为它也改变 设备时在纵向和横向之间切换。

另外,如果你所有的包括你的例子价值keyboardHidden,你不应该那么也如果你有像我这样的活动很多考虑localemccfontScalekeyboard和其他人?..

7

,在你的应用程序中或者如果你不想在清单中输入每个活动标签的代码,你可以这样做。

在你的应用基础类

你会得到一个生命周期回调

所以基本上是在创建时应用类上创建习惯这里引发的是代码为每项活动发生在..

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) { 

      } 
     }); 
} 

我希望这有帮助。

0

简短回答:不要这样做。

重新设计您的应用程序,以便它可以在纵向和横向模式下运行。没有像UI那样的设计不能在纵向和横向上工作的东西;只有懒惰或缺乏想象力的开发人员。

原因很简单。您希望您的应用尽可能在尽可能多的不同设备上尽可能广泛地被用户使用。通过强制特定的屏幕方向,您可以防止您的应用在不支持该方向的设备上运行(可用),并令您偏好和疏远喜欢不同方向的潜在客户。

示例:您将应用程序设计为强制纵向模式。客户在主要以横向模式使用的2合1设备上下载应用程序。
结果1:您的应用程序无法使用,或者您的客户被迫取消锁定设备,旋转设备,并以不熟悉或不舒服的方向使用设备。
后果2:客户因应用程序的非直观设计而感到沮丧,并找到替代品或完全摒弃该应用程序。

我现在正在与一个应用程序战斗,作为一个消费者和开发者,我讨厌它。与应用程序一样有用,它提供的功能非常棒,我绝对讨厌这款应用程序,因为它迫使我使用与我使用设备的其他方式相反的方向。

你不希望你的客户讨厌你的应用程序。


我知道这并不直接回答这个问题,所以我想解释一下对于那些谁是好奇,更详细一点。

这是开发人员是在编写代码非常好,在设计真的很可怕的趋势。这个问题虽然听起来像一个代码问题,提问者当然觉得它是一个代码问题,但这真的是一个设计问题。

真正的问题是“我应该如何设计我的UI?”提问者选择将UI设计为仅在肖像模式下才能正常工作。我怀疑这是为了节省开发时间,或者因为应用程序的工作流程特别有利于肖像布局。但是这些原因忽略了激励适当设计的所有真正重要因素。

  1. 客户互动 - 您希望您的客户感受到拉入您的应用,而不是被挤出。应用程序应该在打开应用程序之前顺利地从您的客户所做的任何事情转换而来(这是大多数平台具有一致设计原则的原因,所以大多数应用程序看起来或多或少都相似,但他们不必这样做。)

  2. 客户响应 - 您希望您的客户对您的应用程序做出积极响应。他们应该喜欢使用它。即使它是工作的工资单应用程序,他们也应该很高兴打开它并开始工作。该应用程序应该为您的客户节省时间并减少对其他选择的沮丧。 (应用程序可能会惹恼用户对您的应用程序产生怨恨,从而对您的品牌产生不满)。

  3. 客户转换 - 您希望您的客户能够快速轻松地从浏览移动到互动。这是任何应用的最终目标,可将印象转化为收入。 (不产生收入的应用程序是你的时间来建立,从业务的角度浪费。)

设计不当的UI减少了客户的参与和响应,最终导致较低的收入。在以移动为中心的世界中(特别是在纵向/横向显示模式方面),这就解释了响应式网页设计为何如此重要。 Walmart Canada introduced responsive design on their website in November 2013 and saw a 20% increase in customer conversion.奥尼尔服装实施响应式网页设计和revenue from customers using iOS devices increased 101.25%, and 591.42% from customers using Android devices

不要强迫你的应用程序到一个单一的显示模式。使其响应并使其变得漂亮。

相关问题