- 浏览: 1384575 次
- 性别:
- 来自: 陕西.西安
文章分类
最新评论
-
dare_:
经过试验 设置之后反而更慢没有调用ensureCapacity ...
ensureCapacity()方法提高ArrayList的初始化速度 -
wangchao9053:
[flash=200,200][url][img][list] ...
Only the original thread that created a view hierarchy can touch its views的相关 -
cyb504:
考虑将rb文件代码隐藏:我先使用命令jrubyc将所有rb文件 ...
Ruby学习十 JRuby中调用java代码 -
4562xse3460:
大哥,您这个写反了,差点误导我,我觉得看着就不对。百度第一条就 ...
portrait表示纵向,landscape表示横向 -
yin138:
portrait是肖像画,即竖屏,landscape是风景画, ...
portrait表示纵向,landscape表示横向
LANDSCAPE与PORTRAIT
要如何通过程序控制Activity的显示方向?在Android中,若要通过程序改变屏幕显示的方向,必须要覆盖setRequestedOrientation()方法,而若要取得目前的屏幕方向,则需要访问getRequestedOrientation()方法。
本范例为求简要示范更改做法,设计了一个按钮,当单击按钮的同时,判断当下的屏幕方向,例如竖排(PORTRAIT),则将其更改为横排(LANDSCAPE);若为横排(LANDSCAPE),则将其更改为竖排(PORTRAIT),范例非常简单。图5-25所示是运行的结果。
本程序重写setRequestedOrientation()方法,其目的是为了要捕捉设置屏幕方向的同时所触发的事件,并在更改的时候,以Toast显示要更改的方向。
src/irdc.ex05_22/EX05_22.java
程序一开始(onCreate)先判断getRequestedOrientation()的值是否为-1,若此值为-1,表示在Activity属性里没有设置Android:screenOrientation的值,这意味着即使单击按钮,也无法判断屏幕的方向,不会进行更改方向的事件了。
在被覆盖的setRequestedOrientation()事件里,会传入要转换的方向常数(requestedOrientation),其值为整数类型,有以SCREEN_ORIENTATION_PORTRAIT及SCREEN_ORIENTATION_LAN- DSCAPE两个指定常数。
/* import程序略 */
import android.content.pm.ActivityInfo;
import android.view.Display;
public class EX05_22 extends Activity
{
private TextView mTextView01;
private Button mButton01;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton01 = (Button)findViewById(R.id.myButton1);
mTextView01 = (TextView)findViewById(R.id.myTextView1);
if(getRequestedOrientation()==-1)
{
mTextView01.setText(getResources().getText
(R.string.str_err_1001));
}
/* 当单击按钮旋转屏幕画面 */
mButton01.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View arg0)
{
/* 方法一:重写getRequestedOrientation */
/* 若无法取得screenOrientation属性 */
if(getRequestedOrientation()==-1)
{
/* 提示无法进行画面旋转功能,因无法判别Orientation */
mTextView01.setText(getResources().getText
(R.string.str_err_1001));
}
else
{
if(getRequestedOrientation()==
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
{
/* 若目前为横排,则更改为竖排呈现 */
setRequestedOrientation
(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else if(getRequestedOrientation()==
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
{
/* 若目前为竖排,则更改为横排呈现 */
setRequestedOrientation
(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}
}
});
}
@Override
public void setRequestedOrientation(int requestedOrientation)
{
// TODO Auto-generated method stub
/* 判断要更改的方向,以Toast提示 */
switch(requestedOrientation)
{
/* 更改为LANDSCAPE */
case (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE):
mMakeTextToast
(
getResources().getText(R.string.str_msg1).toString(),
false
);
break;
/* 更改为PORTRAIT */
case (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT):
mMakeTextToast
(
getResources().getText(R.string.str_msg2).toString(),
false
);
break;
}
super.setRequestedOrientation(requestedOrientation);
}
@Override
public int getRequestedOrientation()
{
// TODO Auto-generated method stub
/* 此重写getRequestedOrientation方法,可取得目前屏幕的方向 */
return super.getRequestedOrientation();
}
public void mMakeTextToast(String str, boolean isLong)
{
if(isLong==true)
{
Toast.makeText(EX05_22.this, str, Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(EX05_22.this, str, Toast.LENGTH_SHORT).show();
}
}
}
AndroidManifest.xml
请留意在AndroidManifest.xml当中需要设置Activity的Android:screenOrientation属性,否则,程序将无法通过getRequestedOrientation()方法,来判断现在Activity的方向。
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="irdc.ex05_22"
android:versionCode="1"
android:versionName="1.0.0">
<application
android:icon="@drawable/icon"
android:label="@string/app_name">
<activity
android:name=".EX05_22"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="7" />
</manifest>
在上面的程序里,是以调用getRequestedOrientation()方法来判断单击按钮时,屏幕的显示方向虽然程序也可以进行判断,但以下方法可以适用在长宽比不一样的手机上。
/* 方法二:判断屏幕宽高比 */
final Display defaultDisplay =
getWindow().getWindowManager().getDefaultDisplay();
int h= defaultDisplay.getHeight();
int w = defaultDisplay.getWidth();
/* 此分辨率为按钮单击当下的分辨率 */
mTextView01.setText
(Integer.toString(h)+"x"+Integer.toString(w));
/if(w > h)
{
/* Landscape */
/* 重写Activity里的setRequestedOrientation()方法 */
setRequestedOrientation
(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else
{
/* Portrait */
setRequestedOrientation
(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
发表评论
-
Android检查是否已经连接到网络
2012-05-14 15:40 1243http://blog.csdn.net/kerenigma/ ... -
Android Framework系列之IMF(二)
2011-06-02 10:09 2197InputConnection是IMF里面一个重要的接口,他是 ... -
Android Frameworks系列之IMF(一)
2011-06-02 10:03 1880http://www.pin5i.com/showtopic- ... -
Android线程优先级设置方法
2011-05-28 14:15 3545http://blog.sina.com.cn/s/blog_ ... -
如何连接android数据库
2011-05-27 15:18 2301http://zhidao.baidu.com/questio ... -
ensureCapacity()方法提高ArrayList的初始化速度
2011-05-27 14:33 11563http://www.gznc.edu.cn/yxsz/jjg ... -
java的isAlive 和 join
2011-05-27 13:38 1597join()用于停止当前线程而运行别的线程。 isAli ... -
Linux系统下.ko文件是什么文件?.so文件是什么文件?
2011-05-25 18:55 5588.so 文件是动态链接库文件,相当于 win下的 .dll ... -
使用Geocoder
2011-05-11 10:46 61977.6 使用Geocoder 地理编 ... -
Gallery学习总结--Cache缓存及数据处理流程
2011-05-09 14:21 2198http://hi.baidu.com/%D6%C7%B4%E ... -
关注的网站
2011-04-06 14:37 1051http://blog.sina.com.cn/s/blog_ ... -
gallery3d源码学习总结(二)
2011-04-01 10:40 3534http://www.j2megame.com/htm ... -
gallery3d源码学习总结(一)——绘制流程drawFocusItems
2011-04-01 10:14 4937eoe·Android开发者门户 标题: gallery3d ... -
Android 启动过程详解(学习1)
2011-03-31 09:27 2242Android 启动过程详解 http://blog.csd ... -
Android中的WatchDog (2)
2011-03-31 09:11 1087http://wenku.baidu.com/view/09c ... -
Android平台WindowManager运用
2011-03-30 10:00 1815Android平台WindowManager运用 我们A ... -
JPEG Rotation and EXIF Orientation
2011-03-17 14:26 3924http://blog.csdn.net/daisyhd/ar ... -
Android 的动作、广播、类别等标识大全
2011-03-11 10:19 1322Android 的动作、广播、类别等标识大全 Stri ... -
浅析Android MediaProvider之二
2011-03-08 08:27 2679http://www.poemcode.net/2010/01 ... -
Task和Activity相关
2011-02-28 09:21 1564Task和Activity相关 这段时间在做一个项目,发 ...
相关推荐
然而,如果希望在运行时动态改变屏幕方向,就需要编程的方式来实现。这个小工程中可能包含一个名为`OrientationChanger`的类,它可能提供了如下功能: 1. **获取当前屏幕方向**:使用`Display`对象的`getRotation()...
在编程领域,尤其是在开发桌面应用或者游戏时,有时我们需要根据应用程序的需求动态地调整用户的屏幕方向或分辨率。在C#中,这可以通过Windows API调用来实现。本文将详细讲解如何使用C#来更改屏幕方向和修改分辨率...
JavaApk源码中可能包含了对`Activity`的重写,特别是`onConfigurationChanged`方法,这是Android系统在检测到设备配置改变(如屏幕方向变化)时调用的。开发者可以在这个方法中添加逻辑,防止在屏幕方向锁定时改变...
Android 屏幕旋转实例,改变屏幕方向,这个和平时的锁定屏幕方向有关联,其基本的实现思路如下: public void onConfigurationChanged(Configuration newConfig) { Toast.makeText(this, "系统的屏幕方向发生...
除了在AndroidManifest.xml中静态配置,开发者还可以在代码中动态改变屏幕方向: ```java Activity activity = ...; activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); // 横屏 ...
如果想要在运行时动态改变屏幕方向,可以调用Activity的`setRequestedOrientation()`方法。例如,当用户点击一个按钮时,可以切换屏幕方向: ```java Button btn = findViewById(R.id.btn); btn.setOnClickListener...
开发者还可以通过API动态改变Activity的屏幕方向。例如,以下代码展示了如何使用`setRequestedOrientation()`方法切换横屏和竖屏: ```java public void apiChangeOrientation() { // 获取当前屏幕方向 int ...
2. **动态改变屏幕方向**:除了静态配置,还可以在代码中动态改变Activity的屏幕方向。通过调用`setRequestedOrientation()`方法,传入对应的屏幕方向常量,如`ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE`或`...
此外,某些设备或系统版本可能不支持动态改变屏幕方向,这种情况下需要在AndroidManifest.xml中为Activity指定允许的屏幕方向。 在描述中提到,提供的代码可能并未全部验证,且可能需要开发者根据实际情况进行调试...
3. **重写Activity的onConfigurationChanged()**:为了在屏幕方向改变时不重新创建Activity,需要在AndroidManifest.xml中对应的Activity标签中添加`android:configChanges="orientation|screenSize"`,然后在...
本篇文章将深入探讨如何控制Android Activity的屏幕方向,实现始终横屏、全屏显示以及如何处理屏幕方向改变时Activity的销毁与重建问题。 1. **屏幕始终横屏或竖屏** 在AndroidManifest.xml中,我们可以为特定的...
`ChangeDisplaySettingsEx`函数是关键,它接收一个`DEVMODE`结构体作为参数,通过修改其中的`dmDisplayOrientation`字段来改变屏幕方向。这个字段可以设置为`DMDO_DEFAULT`(默认)、`DMDO_90`(横向)、`DMDO_180`...
1. 调整`statusBarOrientation`:可以使用`UIApplication.shared.statusBarOrientation = .landscapeLeft`等代码手动设置状态栏方向,从而改变屏幕方向。 2. 触发旋转通知:通过监听`...
7. **代码实现**:在按钮的槽函数中,可以调用Android系统的API来改变屏幕方向,例如`QtAndroidPrivate::runOnAndroidThread()`来执行Android原生代码,然后使用Java层的方法来旋转屏幕。 8. **生命周期管理**:...
在Activity的代码中,可以使用`setRequestedOrientation()`方法来动态改变屏幕方向: ```java if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { setRequestedOrientation...
例如,当你需要在狭小的空间中使用笔记本电脑,或者在展示图片、视频时想要提供独特的视角,甚至在某些专业应用如设计、编程或游戏过程中,改变屏幕方向都能带来便利。irotate的易用性使得这些场景的切换变得简单...
3. 动态改变屏幕方向: 默认情况下,Android系统会根据设备的物理方向自动调整屏幕布局。但有时我们希望在特定时刻控制屏幕旋转,可以使用`setRequestedOrientation()`方法,如: ```java Activity activity = .....
首先,我们要理解屏幕旋转涉及到的操作是更改显示器的显示模式,这通常通过Windows API(应用程序编程接口)来实现。VB提供了调用API函数的能力,我们可以通过声明和使用API函数来访问系统底层的功能。 关键API函数...
【用于Android设备默认屏幕方向自适应的电路的制作方法】 ...这种自适应电路的实施方式是通过跳帽的连接状态改变电路的电平输出,从而指示屏幕的方向,实现了硬件层面的屏幕方向识别,极大地优化了生产流程和用户体验。
在某些情况下,你可能希望在运行时动态改变屏幕方向。这可以通过调用Activity的`setRequestedOrientation()`方法来实现。例如,以下代码将在运行时切换到横屏: ```java setRequestedOrientation(ActivityInfo....