zoukankan      html  css  js  c++  java
  • 响应的系统设置的事件——重写onConfigurationChanged响应系统设置更改

          如果程序需要监听系统设置的更改,则可以考虑重写Activity的onConfigurationChanged(Configuration newConfig)方法,该方法是一个基于回调的事件处理方法;当系统设置发生改变时,该方法会被自动触发。

          为了在程序中动态地更改系统设置,我们可调用Activity的setRequestedOrientation(int)方法来修改屏幕方向。

          实例:监听屏幕方向改变

          该实例的界面布局很简单,该界面中仅包含一个普通按钮。其界面布局文件如下:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <Button
        android:id="@+id/bn"  
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="更改屏幕方向"
        />
    </LinearLayout>

    该程序的Java代码主要会调用Activity的setRequestedOrientation(int)方法来动态更改屏幕方向。除此之外,我们还重写Activity的onConfigurationChanged(Configuration newConfig)方法,该方法可用于监听系统设置的更改。程序代码如下。

    package com.example.studyevent;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.pm.ActivityInfo;
    import android.content.res.Configuration;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    
    public class ChangeCfg extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_change_cfg);
            Button bn=(Button)findViewById(R.id.bn);
            //为按钮绑定事件监听器
            bn.setOnClickListener(new OnClickListener(){
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Configuration config=getResources().getConfiguration();
                    //如果当前是横屏
                    if(config.orientation==Configuration.ORIENTATION_LANDSCAPE)
                    {
                        //设为竖屏
                        ChangeCfg.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                    }
                    //如果当前是竖屏
                    if(config.orientation==Configuration.ORIENTATION_PORTRAIT)
                    {
                        //设为横屏
                        ChangeCfg.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                        
                    }
                }});
        }
         //重写该方法,用于监听系统设置的更改,主要是监控屏幕方向的更改
        @Override
        public void onConfigurationChanged(Configuration newConfig)
        {
            super.onConfigurationChanged(newConfig);
            String screen=newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE?"横向屏幕":"竖向屏幕";
            Toast.makeText(this,"系统的屏幕方向发生改变"+"
    修改后的屏幕方向为"+screen,Toast.LENGTH_LONG).show();
            
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.change_cfg, menu);
            return true;
        }
    
    }

           上面的程序中前面两行粗体字代码用于动态地修改手机屏幕的方向,接下来的粗体字代码重写了Activity的onConfigurationChanged(Configuration newConfig)方法,当系统设置发生更改时,该方法将会被自动回调。

           除此之外,为了让该Activity能监听屏幕方向更改的事件,需要在配置该Activity时指定android:configChanges属性,该属性可以支持mcc、mnc、locale、touchscreen、keyboard、keyboardHidden、navigation、orientation、screenLayout、uiMode、screenSize、smallestScreenSize、fontScale属性值,其中orientation属性值指定该Activity可以监听屏幕方向改变的事件。

          因此将应用的AndroidManifest.xml文件改为如下形式。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.studyevent"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-permission android:name="android.permission.SEND_SMS" />
        <uses-permission android:name="android.permission.RECEIVE_SMS" />
       <uses-permission android:name="android.permission.INTERNET" />
       
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="12" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <!-- 设置Activity可以监听屏幕方向改变的事件 -->
            <activity
                android:name="com.example.studyevent.ChangeCfg"
                android:configChanges="orientation"
                android:label="@string/title_activity_change_cfg" >
                <intent-filter>
                     <action android:name="android.intent.action.MAIN" /> 
                     <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>

          上面的粗体字配置代码指定了该Activity可以监听屏幕方向改变的事件,这样当程序改变手机屏幕方向时,Activity的onConfigurationChanged()方法就会被回调。

          提供上面的程序和设置之后,运行该程序,单击应用程序中“更改屏幕方向”按钮,将可以看到如图所示界面。

  • 相关阅读:
    拦截器
    Ajax
    JSON
    数据处理及跳转
    RestFul和控制器
    第一个MVC程序
    什么是SpringMVC
    回顾MVC
    声明式事务
    微软最强 Python 自动化工具开源了!不用写一行代码!
  • 原文地址:https://www.cnblogs.com/wolipengbo/p/3409214.html
Copyright © 2011-2022 走看看