我在SO上看到了一些相关的问题,但我无法解决我的问题。 我为PORTRAIT和LANDSCAPE模式创建了单独的布局。
我修改了AndroidManifest.xml
文件以进行相应的方向更改,但当我在活动中实施时,onConfigurationChanged()
无效。
现在问题出在layout.addView(graphView, lp);
的 onCreate()
。
我在GraphView
类中编写了绝对硬编码值。
因此,当我切换到LANDSCAPE模式时,它对PORTRAIT模式完全有效,但是graphView没有正确放置。
为了解决这个问题,我创建了GraphViewLand
类,它专门为LANDSCAPE模式编码。但它没有从onConfigurationChanged()
调用。
其他布局完美无缺,因为我为每个方向创建了单独的main.xml
文件。但由于graphView
是以编程方式创建的,因此未正确放置。
我在这里做错了吗?
我刚刚从here了解到这一点:
对于任何类型的配置更改,您说您在那里处理,您将收到对当前活动的onConfigurationChanged(配置)方法的调用,而不是重新启动。 但是,如果配置更改涉及您未处理的任何内容,则仍会重新启动活动,并且不会调用onConfigurationChanged(Configuration)。
onCreate()方法
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
RelativeLayout layout = (RelativeLayout) findViewById(R.id.MainLayout);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.ALIGN_TOP, btnindex.getId());
GraphView graphView = new GraphView(this, values, "CurrentGraph",
horlabels, verlabels);
layout.addView(graphView, lp);
}
onConfigurationChanged()方法
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
Log.v("LAND", "SCPAE");
}
}
任何帮助appriciated:)
答案 0 :(得分:5)
如果您在xml中创建两种不同类型的视图(用于横向和纵向),并且您必须在不同类型的视图上编写逻辑,那么不要在清单中使用android:configChanges
。
如果清单中没有android:configChanges
并且您拥有不同的横向和纵向布局,那么当您更改方向时,您的控件将转到onCreate() 在那个方法里面你可以编写你的逻辑。
答案 1 :(得分:1)
您是否在活动类中将onConfigurationChanged编码为覆盖? 基本覆盖:
// Called on rotation.
// Does not call onDestroy anymore due to android:configChanges="keyboardHidden|orientation" in manifest
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
}
我的信息清单声明:
<activity android:name=".Slime"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="landscape">
答案 2 :(得分:1)
怎么说没有调用onConfigurationChanged()
方法?是不是打印了日志?吐司不是出现了吗?
其次,您提到问题出现在layout.addView
的{{1}}。请注意,如果您的清单中存在onCreate()
,则在方向更改时不会调用android:configChanges
。您需要将以编程方式修改UI布局的代码段移动到onCreate()
方法中。