Android 螢幕旋轉(configuration)
螢幕是在configuration這個類中,
其包含設備上的鍵盤keyboard、touchscreen等
如果希望監聽系統設定的變化
例如按下什麼鍵、螢幕旋轉等,需要:
現在3.0以上要加上screenSize:
如此才可以實現監聽。
本案相當簡單,不過我在操作螢幕旋轉的變化用了2個方法:
的螢幕長寬相同,那就怎麼也抓不到(不過應該不會有正方型的手機…)
其包含設備上的鍵盤keyboard、touchscreen等
如果希望監聽系統設定的變化
例如按下什麼鍵、螢幕旋轉等,需要:
- 要Override onConfigurationChanged這個方法
- 在AndroidManifest.xml中宣告Activity處理的類型
<activity ... android:configChanges="orientation">
現在3.0以上要加上screenSize:
<activity ... android:configChanges="orientation|screenSize">
如此才可以實現監聽。
本案相當簡單,不過我在操作螢幕旋轉的變化用了2個方法:
- 原始的偵測,抓出現在螢幕的狀態
如果現在是直的,那就轉橫,或著相反 - 另一個是抓出現在螢幕的大小,如果X軸大於Y軸
表示現在是橫的,那就轉直,如果不是就相反
的螢幕長寬相同,那就怎麼也抓不到(不過應該不會有正方型的手機…)
程式碼:
public static class PlaceholderFragment extends Fragment { EditText et; public PlaceholderFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); et = (EditText) rootView.findViewById(R.id.editText1); Button btn =(Button) rootView.findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(getActivity().getRequestedOrientation() == -1){ //抓不到,提示訊息 Toast.makeText(getActivity(), "無法取得目前系統螢幕方向", Toast.LENGTH_SHORT).show(); }else{ /* if(getActivity().getRequestedOrientation()== //如果現在狀態是平的 ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){ getActivity().setRequestedOrientation( //就改成直的 ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }else if(getActivity().getRequestedOrientation()== //如果現在狀態是直的 ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){ getActivity().setRequestedOrientation( //就改成正的 ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } */ //取得目前螢幕的大小 Display display = getActivity().getWindowManager().getDefaultDisplay(); Point point = new Point(); display.getSize(point); //如果X>Y, if(point.x > point.y){ //表示目前是橫的,就改成直 getActivity().setRequestedOrientation( ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }else{ //如果不是表示目前是直的,就改成橫 getActivity().setRequestedOrientation( ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } } } }); return rootView; } //要監聽務必要覆寫onConfigurationChanged這個方法 @Override public void onConfigurationChanged(Configuration newConfig) { Toast.makeText(getActivity(), "系統螢幕發生變化", Toast.LENGTH_SHORT).show(); updateEditText(); super.onConfigurationChanged(newConfig); } public void updateEditText(){ switch (getActivity().getRequestedOrientation()) { case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE: et.setText("目前狀態:LANDSCAPE"); break; case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT: et.setText("目前狀態:PORTRAIT"); break; } } }
AndroidManifest
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/> <!-- 要加uses-permission中的 CHANGE_CONFIGURATION--> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.sample_12_1.MainActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:configChanges="orientation|screenSize"> <!-- configChanges中除了原本的orientation要加上screenSize--> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
留言
張貼留言