`
haouziwefe
  • 浏览: 127274 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

系统设更改时间onConfigurationChanged

    博客分类:
  • java
阅读更多
    在前一个例子中我们看到了屏幕方向的更改,事实上,当屏幕方向改变是,就会发生onconfigurationchanged()事件;虽然可以在更改方向是显示要更改的方向,但是并无法取得更改后的宽高或更改后的结果,此时,就必须通过onconfigurationchanged()的心事事件进行处理。
onconfigurationchanged()方法是当系统发生系统设置改变之后所触发的事件,其中唯一的传入参数为configuration对象,出来可以捕捉屏幕设置更改事件之外,也可扑捉其他系统设置更改事件,如隐藏键盘或打开键盘等。
public class ex05_23 extends activity{  private textview mtextview01;  private button mbutton01;    /* 屏幕宽高 */  private int intscreenh,intscreenw;    /** called when the activity is first created. */  @override  public void oncreate(bundle savedinstancestate)  {    super.oncreate(savedinstancestate);    setcontentview(r.layout.main);        /* 声明display对象,以取得屏幕宽高 */    final display defaultdisplay = getwindow().getwindowmanager().getdefaultdisplay();    intscreenh= defaultdisplay.getheight();    intscreenw = defaultdisplay.getwidth();        mbutton01 = (button)findviewbyid(r.id.mybutton1);     mtextview01 = (textview)findviewbyid(r.id.mytextview1);    mtextview01.settext(integer.tostring(intscreenw)+"x"+integer.tostring(intscreenh));        /* 当宽>高,表示为横式显示 */    if(intscreenw > intscreenh)    {      /* landscape */      mbutton01.settext(r.string.str_button2);    }    else    {      /* portrait */      mbutton01.settext(r.string.str_button1);    }        /* 按钮事件处理切换宽高 */    mbutton01.setonclicklistener(new button.onclicklistener()    {      @override      public void onclick(view v)      {        // todo auto-generated method stub        intscreenh= defaultdisplay.getheight();        intscreenw = defaultdisplay.getwidth();                /* 如果为landscape */        if(intscreenw > intscreenh)        {          /* landscape => portrait */          setrequestedorientation(activityinfo.screen_orientation_portrait);        }        else        {          /* portrait => landscape */          setrequestedorientation(activityinfo.screen_orientation_landscape);        }                /* 再一次取得屏幕宽高 */        intscreenh= defaultdisplay.getheight();        intscreenw = defaultdisplay.getwidth();        mtextview01.settext(integer.tostring(intscreenw)+"x"+integer.tostring(intscreenh));      }    });  }      @override  public void onconfigurationchanged(configuration newconfig)  {    // todo auto-generated method stub        /* 覆写onconfigurationchanged事件,捕捉当设定之后的值 */    if (newconfig.orientation == configuration.orientation_landscape)    {      /* 趁着事件发生之后,变更按钮上的文字 */      mbutton01.settext(r.string.str_button2);      mmaketexttoast      (        getresources().gettext(r.string.str_onconf_landscape).tostring(),        false      );    }        /* 须设定configchanges属性才能捕捉onconfigurationchanged */    if (newconfig.orientation == configuration.orientation_portrait)    {      mbutton01.settext(r.string.str_button1);      mmaketexttoast      (        getresources().gettext(r.string.str_onconf_portrait).tostring(),        false      );    }        if (newconfig.keyboardhidden == configuration.keyboardhidden_no)    {         }    super.onconfigurationchanged(newconfig);  }    public void mmaketexttoast(string str, boolean islong)  {    if(islong==true)    {      toast.maketext(ex05_23.this, str, toast.length_long).show();    }    else    {      toast.maketext(ex05_23.this, str, toast.length_short).show();    }  }}
 必须要在activity里设置configchanges属性,以作为系统设置更改时要扑捉的事件,除此之外,还需要获得系统设置更改的权限(<uses-permission android:name="android.permission.change_configuration"></uses-permission>)
<application    android:icon="@drawable/icon"    android:label="@string/app_name">    <!-- 必須設定activity的configchanges屬性 -->    <activity      android:name=".ex05_23"      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>  </application>  <uses-sdk android:minsdkversion="8" />  <!-- 必須設定change configuration權限 -->  <uses-permission android:name="android.permission.change_configuration"></uses-permission>
 
 
0
0
分享到:
评论

相关推荐

    系统设置更改事件onConfigurationChanged 信息处理

    在Android开发中,`...系统会默认重新创建活动(Activity),但可以通过在AndroidManifest.xml中对应的Activity标签中添加`android:configChanges`属性,并指定需要监听的配置变化,来避免Activity被重建,而是调用`...

    Android笔记之:onConfigurationChanged详解

    首先,`onConfigurationChanged` 方法是 `Activity` 类的一个回调方法,当设备的配置发生改变时,如屏幕方向的切换(横屏到竖屏或反之)、系统语言的更改、键盘的展开或收起等,系统会调用这个方法,而不是重新创建 ...

    android设置系统语言

    更改系统语言涉及修改`Configuration`对象并更新系统设置。这通常需要具有系统级别的权限,因此在普通应用中是不允许的。但可以通过创建自定义的系统设置界面或使用第三方库来模拟此操作。例如,可以使用以下代码...

    java for android

    12. **最新技术趋势**:虽然书籍出版时间较早,但可能会涉及到当时的一些新技术和最佳实践,比如Android Jetpack组件,这是一套可以简化开发的库集合。 书中提供的epub和pdf版本提供了电子阅读的便利,而Readme.png...

    Android屏幕旋转

    这样,当配置变化时,系统不会默认销毁Activity,而是调用`onConfigurationChanged(Configuration newConfig)`方法,让开发者自行处理配置变化。 5. **自定义屏幕旋转处理**: 在`onConfigurationChanged()`方法中...

    Android 系统语言切换监听和设置实例代码

    当系统配置更改时,如屏幕方向、语言等,该方法会被调用。通过在`AndroidManifest.xml`文件中为对应的`Activity`设置`android:configChanges`属性,可以避免`Activity`被重新创建,而是调用`onConfigurationChanged`...

    android应用内和系统设置两种设置多语言国际化

    - 当用户在系统设置中更改语言时,Android会自动应用到所有应用。无需开发者进行额外处理,只要你的应用遵循了正确的资源结构,Android系统就能正确加载对应的语言资源。 - 不过,为了确保应用在语言切换后能够...

    随意调节你的activity的大小,activity 自定义窗口大小

    当Activity的大小发生变化时,系统会调用`onConfigurationChanged()`方法。在这里,需要更新界面元素的大小和位置,以适应新的尺寸。确保在`AndroidManifest.xml`中声明`android:configChanges="screenSize|...

    app内部修改语言

    如果不想手动处理`onConfigurationChanged()`,可以使用`recreate()`方法强制重启Activity,让系统自动处理资源更新。 6. **测试语言切换**: 在真机或模拟器上测试语言切换,可以通过设置系统偏好来快速改变设备...

    Android Zxing 源码修改

    这可以通过重写`onConfigurationChanged()`方法并处理相关逻辑来实现,或者在AndroidManifest.xml中为对应的Activity设置`android:configChanges="orientation|screenSize"`,避免系统默认的Activity销毁和重建。...

    Android实现应用内置语言切换功能

    接下来,为了确保应用能够正确地根据选择的语言加载资源,我们需要在代码中动态地更改应用程序的配置。通常,这会在`SharedPreferences`中保存用户的语言选择,然后在启动时读取这个选择来设置应用的语言。以下是一...

    屏幕方向锁定后自动旋转.zip

    在源码中,还可能有对AndroidManifest.xml的修改,尤其是`&lt;activity&gt;`标签内的`android:configChanges`属性,它定义了哪些配置更改应由应用程序自己处理,而不是默认地重新创建活动: ```xml android:name=".Your...

    Android自定义一个属于自己的时间钟表

    首先,自定义视图是Android开发中的一个重要概念,它允许开发者扩展系统提供的基本视图类,以满足特定需求。Android提供了View和ViewGroup两个基类,分别用于创建可绘制的元素和视图容器。在这里,我们需要从View类...

    安卓开发更改皮肤功能,全局皮肤

    这可以通过修改`AndroidManifest.xml`中的`android:configChanges`属性,添加`uiMode`,并重写`onConfigurationChanged()`方法来实现。在`onConfigurationChanged()`中,根据用户选择的皮肤类型加载相应的资源。 3....

    android横竖屏切换[文].pdf

    这样,当屏幕方向改变时,系统会调用`onConfigurationChanged()`方法,而不是重新创建Activity。 - 在`onCreate()`方法中,依然可以根据当前屏幕方向加载布局,同时在`onConfigurationChanged()`中处理布局变化,...

    【Android每周专题】横竖屏切换

    1. **屏幕配置更改**: Android系统通过`Resources`对象来获取设备的配置信息,包括屏幕方向。当这些配置发生变化时,系统会通知应用。开发者可以在`AndroidManifest.xml`中针对特定的`configChanges`进行处理,...

    Android代码-MyRotation.zip

    不使用此属性或者将其设为`android:configChanges="orientation|screenSize"`则会让系统默认处理屏幕旋转,销毁并重建Activity。 ```xml android:name=".YourActivity" android:configChanges="orientation|...

    Android应用源码之(横竖屏切换处理-IT计算机-毕业设计.zip

    2. **自定义处理**:设置`android:configChanges="orientation"`或`android:configChanges="screenOrientation"`,当屏幕方向改变时,系统会调用`onConfigurationChanged(Configuration newConfig)`方法,让你在不...

    android动态更改字体大小.zip

    为了防止不必要的Activity重建,我们通常会在`onConfigurationChanged()`回调中处理字体大小的改变。 此外,还可以通过监听系统字体大小变化,如在`SharedPreferences`中保存用户的偏好设置,当用户调整系统字体...

Global site tag (gtag.js) - Google Analytics