一步一步学android之事件篇——单击事件(示例:改变屏幕显示方向)
2013-08-23 11:57
411 查看
昨天学习了单击事件,今天就来用一下,其实是想介绍下onConfigurationChanged()这个方法---->监听系统设置是否改变(改变则调用此方法内的处理逻辑)。下面用一个例子来仔细说明:
运行效果如下:
![](http://img.blog.csdn.net/20130823113217265)
![](http://img.blog.csdn.net/20130823113232203)
main.xml:
MainActivity.java:
onConfigurationChanged()这个方法比较特殊,想要监听系统设置改变这个事件需要在AndroidMainFest.xml这个配置文件中添加几个配置,AndroidMainFest.xml:
主要加了:
这里还有个要注意的地方,一般新建的默认工程中的AndroidMainFest.xml中会有这么一句 android:targetSdkVersion="15"
我这里去掉了,如果不去掉就不能成功调用onConfigurationChanged这个方法,这是为什么呢,因为在Android 3.2开始,屏幕旋转的时候屏幕大小也跟着改变,如果想要在API LEVEL 13或者以上的设备上监听成功,必须加上|screenSize(加载keyBoardHidden后面),然后项目改成Android 3.2的(直接修改project.properties这个文件,将target=android-10 改成 target=android-13)。这样就能成功监听,我这里就直接将android:targetSdkVersion="15"去掉。
这个例子就说到这里了。
运行效果如下:
main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/top" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/top"/> <ImageView android:id="@+id/under" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/img_1"/> </LinearLayout>
MainActivity.java:
import android.os.Bundle; import android.app.Activity; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.view.View.OnClickListener; import android.view.*; import android.widget.*; public class MainActivity extends Activity { private Button change = null; private ImageView img = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } //初始化 private void initView(){ this.change = (Button)super.findViewById(R.id.top); this.img = (ImageView)super.findViewById(R.id.under); this.change.setOnClickListener(new MyOnClickListener()); } //监听按钮 private class MyOnClickListener implements OnClickListener { public void onClick(View v) { if(MainActivity.this.getRequestedOrientation()==ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) { MainActivity.this.change.setText("错误,无法改变屏幕方向!"); } else { //当前为横屏的时候 if(MainActivity.this.getRequestedOrientation()==ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { //设置为竖屏显示 MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } //当前为竖屏的时候 else if(MainActivity.this.getRequestedOrientation()==ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) { //设置为横屏显示 MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } } } } //系统设置改变时触发 public void onConfigurationChanged(Configuration newConfig) { //当前为横屏的时候 if(MainActivity.this.getRequestedOrientation()==ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){ MainActivity.this.change.setText("改变屏幕方向为竖屏显示(当前为横屏显示)"); MainActivity.this.img.setImageResource(R.drawable.img_2); } //当前为竖屏的时候 else if(MainActivity.this.getRequestedOrientation()==ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){ MainActivity.this.change.setText("改变屏幕方向为横屏显示(当前为竖屏显示)"); MainActivity.this.img.setImageResource(R.drawable.img_1); } super.onConfigurationChanged(newConfig); } }
onConfigurationChanged()这个方法比较特殊,想要监听系统设置改变这个事件需要在AndroidMainFest.xml这个配置文件中添加几个配置,AndroidMainFest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.example6_3" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" android:configChanges="orientation|keyboardHidden" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/> </manifest>
主要加了:
android:configChanges="orientation|keyboardHidden" android:screenOrientation="portrait"这个是一定要配置的,否则onConfigurationChanged不会起作用的。
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>这个也不能少,这个是配置操作权限,权限在Android中很重要,以后拨号,访问网络这些操作都要添加权限。
这里还有个要注意的地方,一般新建的默认工程中的AndroidMainFest.xml中会有这么一句 android:targetSdkVersion="15"
我这里去掉了,如果不去掉就不能成功调用onConfigurationChanged这个方法,这是为什么呢,因为在Android 3.2开始,屏幕旋转的时候屏幕大小也跟着改变,如果想要在API LEVEL 13或者以上的设备上监听成功,必须加上|screenSize(加载keyBoardHidden后面),然后项目改成Android 3.2的(直接修改project.properties这个文件,将target=android-10 改成 target=android-13)。这样就能成功监听,我这里就直接将android:targetSdkVersion="15"去掉。
这个例子就说到这里了。
相关文章推荐
- Android之屏幕方向改变以及onConfigurationChanged事件
- android改变屏幕显示方向
- android之屏幕方向改变以及onConfigurationChanged事件
- android改变屏幕显示方向
- android改变屏幕显示方向
- Android之屏幕方向改变以及onConfigurationChanged事件
- 【Android 开发教程】屏幕方向的改变
- Android 程式开发:(八)处理屏幕方向的变化 —— 8.4控制Activity的显示方向
- Android中Activity运行时屏幕方向与显示方式详解
- Android ListView从SQLLite中读取数据并显示,响应单击事件
- [Android界面] 屏幕方向改变资源处理问题 [
- android_Activity运行时屏幕方向与显示方式
- Android之屏幕方向|显示方式|Activity重建问题|横竖屏切换不同的布局
- Android开发: 通过修改数据库改变屏幕旋转方向screen rotation
- android:screenOrientation的说明 固定屏幕显示方向
- Android 横屏启动activity,点击屏幕的单击、双击和长按事件
- Android中Activity运行时屏幕方向与显示方式详解
- android之屏幕方向改变以及onConfigurationChanged事件
- ANDROID中ACTIVITY运行时屏幕方向与显示方式详解
- Android 屏幕双击事件的捕获简单示例