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()方法就会被回调。

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

  • 相关阅读:
    codeforces 814B An express train to reveries
    codeforces 814A An abandoned sentiment from past
    codeforces 785D D. Anton and School
    codeforces 785C Anton and Fairy Tale
    codeforces 791C Bear and Different Names
    AOP详解
    Spring集成JUnit测试
    Spring整合web开发
    IOC装配Bean(注解方式)
    IOC装配Bean(XML方式)
  • 原文地址:https://www.cnblogs.com/wolipengbo/p/3409214.html
Copyright © 2011-2022 走看看