其实我已经创建了一个简单的应用程序,我想在其中显示另一个关于屏幕方向变化的活动。我已经完成了堆栈溢出中给出的文档和示例,并使用此我生成了我的应用程序,并且其工作正常。但我唯一的疑问是,如果在我的主要活动的活动标签内的清单文件中,如果我使用android:screenOrientation="portrait"
然后运行应用程序,那么在更改屏幕方向时我的下一个活动不会打开,但是如果我从清单中删除此代码然后它工作正常。
所以我的问题是,如果我希望我的主要活动始终以纵向模式打开,那么我应该在主要活动的清单中使用此代码。如果我这样做,那么在更改屏幕时我的下一个活动没有公开。
所以任何人都可以帮助我解决这个问题。我使用的代码是:
清单文件中的代码
<?xml version="1.0" encoding="utf-8"?>
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".MainActivity"
android:configChanges="orientation"
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>
<activity
android:name=".ChartEngineActivity"
android:configChanges="keyboardHidden|orientation" >
</activity>
</application>
主要活动中的
代码
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
Intent intentNotes = new Intent(this, ChartEngineActivity.class);
this.startActivity(intentNotes);
finish();
}
}
答案 0 :(得分:0)
通过MainActivity中的代码更改screenOrientation,如下所示:
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int getConf=this.getResources().getConfiguration().orientation;
if(getConf==Configuration.ORIENTATION_PORTRAIT)
{
// this.setRequestedOrientation(
// ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Toast.makeText(getBaseContext(), "ORIENTATION_PORTRAIT", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(getBaseContext(), "ORIENTATION_LANDSCAPE", Toast.LENGTH_SHORT).show();
this.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
setContentView(R.layout.main);
}
}
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
Intent intentNotes = new Intent(this, ChartEngineActivity.class);
this.startActivity(intentNotes);
finish();
}
答案 1 :(得分:0)
而不是
android:screenOrientation="portrait"
使用
android:screenOrientation="sensorPortrait"
Portrait orientation, but can be either normal or reverse portrait based on the device sensor. Added in API level 9.
可能这有点帮助... 这将调用
onConfigurationChanged(Configuration newConfig) also..
答案 2 :(得分:0)
首先不要改变你的清单中的方向......并且不要修改方向也.. 然后在oncreate 喜欢这个
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
int k=getResources().getConfiguration().orientation;
if(k==Configuration.ORIENTATION_LANDSCAPE){
Intent intentNotes = new Intent(this, ChartEngineActivity.class);
this.startActivity(intentNotes);
finish();
}
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if(k==Configuration.ORIENTATION_LANDSCAPE){
Intent intentNotes = new Intent(this, ChartEngineActivity.class);
this.startActivity(intentNotes);
finish();
}
}
}
答案 3 :(得分:0)
假设您共有3项活动,它们是Main,Activity1和Activity2。
您首先在清单中声明所有三个活动,但不设置配置和屏幕方向的属性。
假设您的主要活动正在开始活动1。
现在来到Activity1。
Activity1处于纵向模式并显示listview。
因此Activity1的onCreate()
方法检查活动的方向,如果方向处于横向模式,则启动Activity2并在Activity1中完成Activity1 else显示列表视图。并在onConfigurationChanged
中再添加一个内容方法检查新配置,如果是横向模式,则启动Activity2并完成Activity1。
现在来到Activity2。 Activity2处于横向模式,例如它正在显示Gridview。
因此,onCreate()
Activity2的方法检查方向,如果orientation是Portrait然后启动Activity1并完成Activity2,则在Activity2中显示Gridview。并在onConfigurationChanged
方法中再添加一项内容,检查新配置,如果它是纵向模式启动Activity1并完成Activity2。
如何检查配置
int getConf=this.getResources().getConfiguration().orientation;
if(getConf==Configuration.ORIENTATION_PORTRAIT) {
//Portrait
}else {
//Landscape
}
活动1应如下所示
int getConf=this.getResources().getConfiguration().orientation;
if(getConf==Configuration.ORIENTATION_LANDSCAPE) {
startActivity(new Intent(this, Activity2.class))
finish();
}
活动2将如下所示
int getConf=this.getResources().getConfiguration().orientation;
if(getConf==Configuration.ORIENTATION_PORTRAIT) {
startActivity(new Intent(this, Activity1.class))
finish();
}
同样地,您必须覆盖onConfigurationChanged
方法并检查我们上面检查的方向,并采取适当的操作,就像我们开始新的活动并完成当前的活动一样。