您的位置:首页 > 移动开发 > Android开发

一步一步学android之事件篇——单击事件(示例:改变屏幕显示方向)

2013-08-23 11:57 411 查看
昨天学习了单击事件,今天就来用一下,其实是想介绍下onConfigurationChanged()这个方法---->监听系统设置是否改变(改变则调用此方法内的处理逻辑)。下面用一个例子来仔细说明:

运行效果如下:





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"去掉。

这个例子就说到这里了。




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: