搜尋

首頁  >  問答  >  主體

android - 安卓怎么固定屏幕两个方向旋转?

我现在做的应用屏幕左侧旋转的时候 程序有问题,会崩溃,所以想只允许用户可以向左侧和上方两个方向上旋转屏幕,想问一下大家有知道怎么实现吗?网上查到的资料都是怎么去固定一个方向的,没有找到这方面资料,希望了解的朋友告知一声,谢谢!

怪我咯怪我咯2771 天前659

全部回覆(2)我來回復

  • PHPz

    PHPz2017-04-17 17:22:37

    你需要了解以下幾點

    1.設定

    節點的android:screenOrientation屬性可以完成這個任務,範例程式碼如下:

    <activity android:name=".EX01"
        android:label="@string/app_name"
        android:screenOrientation="portrait"> 
       //值为portrait时强制为竖屏, 值为landscape时强制为横屏
    </activity>

    2.強制開啟螢幕旋轉效果

    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);

    3.监听屏幕旋转

    ①调用当前的Activity的onSaveInstanceState(Bundle outState)去保存应用中的一些数据,你可以重写这个方法

    ②然后调用onDestroy()销毁当前的Activity

    ③重新调用onCreate()或onRestoreInstanceState()方法去重新创建一个Activity(也就是说,程序会重新将onCreate中的代码在执行一遍)

    除此之外,还要说明的一点是onSaveInstanceState(Bundle outState)到底怎么用:当屏幕发生旋转的时候会调用这个方法,这里的参数Bundle,就是让我们来封装在屏幕 未旋转前时想要保存的数据的,之后调用onDestroy()销毁当前的Activity,最后重新调用onCreate(Bundle savedInstanceState),这时outState就会赋给savedInstanceState,这样的话,我们在onCreate中重新创建Activity的时候,可以用之前保存的数据来初始化重新创建的Activity,这很重要,因为一个应用程序在整个运行过程中,不论在横屏和竖屏,数据的变化都要有一致性,不能因为屏幕发生改变,就让用户从头开始重新操作一遍

    除此之外,由于屏幕旋转时,一定会触发onSaveInstanceState(Bundle outState)方法,那么我们完全可以将这个方法作为屏幕旋转的监听器

    下面就举一个例子:

    *注意判断横屏和竖屏并不是简单的事,因为Android中规定,只有是完全竖和横才能够返回ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE、ActivityInfo.SCREEN_ORIENTATION_PORTRAIT 而这在实际中几乎无法存在这样的情况


    这里是方法:

    第一:权限声明:

    <uses-permission Android:name="android.permission.CHANGE_CONFIGURATION"></uses-permission>

    3.監聽螢幕旋轉

    ①呼叫目前的Activity的onSaveInstanceState(Bundle outState)去保存應用程式中的一些數據,你可以重寫這個方法

    ②然後呼叫onDestroy()銷毀目前的Activity

    ③重新呼叫onCreate()或onRestoreInstanceState()方法去重新建立一個Activity(也就是說,程式會重新將onCreate中的程式碼在執行一遍)

    除此之外,還要說明的一點是onSaveInstanceState(Bundle outState)到底怎麼用:當螢幕發生旋轉的時候會呼叫這個方法,這裡的參數Bundle,就是讓我們來封裝在螢幕未旋轉前時想要保存的資料的,之後呼叫onDestroy()銷毀目前的Activity,最後重新呼叫onCreate(Bundle savedInstanceState),這時outState就會賦給savedInstanceState,這樣的話,我們在onCreate中重新創建Activity的時候,可以用之前保存的資料來初始化重新創建的Activity,這很重要,因為一個應用程式在整個運行過程中,不論在橫屏和豎屏,資料的變化都要有一致性,不能因為螢幕改變,就讓使用者從頭開始重新操作一遍

    除此之外,由於螢幕旋轉時,一定會觸發onSaveInstanceState(Bundle outState)方法,那麼我們完全可以將這個方法作為螢幕旋轉的監聽器🎜 🎜下面就舉一個例子:🎜 🎜*注意判斷橫屏和豎屏並不是簡單的事,因為Android中規定,只有是完全豎和橫才能夠返回ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE、ActivityInfo.SCREEN_ORIENTATION_PORTRAIT 而這在實際中幾乎無法存在這樣的情況🎜

    🎜這裡是方法:🎜 🎜第一:權限聲明:🎜 🎜🎜 🎜第二:聲明activity要擷取的事件類型,🎜
    <activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="orientation|keyboard">  
                <intent-filter>  
                    <action android:name="android.intent.action.MAIN" />  
                    <category android:name="android.intent.category.LAUNCHER" />  
                </intent-filter>  
    </activity>
    🎜這裡一定要聲明Android:configChanges屬性,該屬性規定了我們可以在程式中捕獲的事件類型,多個事件類型用|分隔。 🎜 🎜如果這裡沒有orientation,那麼我們再程式中是無法捕捉到螢幕改變的事件的。 🎜 🎜第三:重寫Activity中的onConfigurationChanged方法🎜
    /** 
         * 屏幕旋转时调用此方法 
         */  
        @Override  
        public void onConfigurationChanged(Configuration newConfig) {  
            super.onConfigurationChanged(newConfig);  
            //newConfig.orientation获得当前屏幕状态是横向或者竖向  
            //Configuration.ORIENTATION_PORTRAIT 表示竖向  
            //Configuration.ORIENTATION_LANDSCAPE 表示横屏  
            if(newConfig.orientation==Configuration.ORIENTATION_PORTRAIT){  
                Toast.makeText(MainActivity.this, "现在是竖屏", Toast.LENGTH_SHORT).show();  
            }  
            if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){  
                Toast.makeText(MainActivity.this, "现在是横屏", Toast.LENGTH_SHORT).show();  
            }  
        }  
    
    🎜實在不會可以站內聯絡我,我可以幫你看一下,大家共同進步🎜

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 17:22:37

    雖然沒有直接回答我的問題,但是你說的這些內容我今天用到了,非常感謝。

    回覆
    0
  • 取消回覆