需求情形:需要在一个activity中更换布局,如点击按钮,跳转到另外一个界面。
如果两个布局文件都是LinearLayout 或者FrameLayout的话,可以使用LinearLayout和FrameLayout两个类来管理当前的layout,如addView 或者removeView;可是如果一个是LinearLayout,另外一个是FrameLayout的话,这种就不行了,因为两者的属性不同,表现结果不一样。
解决办法:使用不同的Layout的xml文件或者动态设定View。
关键语句:setContentView(R.layout.XXX)或者setContentView(XXXView)
第一个直接使用layout xml文件,第二个使用动态生成一个LinearLayout 或者FrameLayout。
前者的好处是方便使用xml中的android:属性。
关键坑:如果xml文件中使用的是继承控件类(继承的基础的控件,如View Button TextView等),在初始化实例的时候,如果遇到使用强制类型转换失败,如:
XXXView myView = (XXXView)findViewById(R.id.XXXView)
调用的是public XXXView (Context context, AttributeSet attrs)构造函数。
可以实例化View,然后在转成XXXView,如:
View imgView = findViewById(R.id.XXX);
XXXView mView = (XXXView )imgView;
然后再去设定mView的其他需要使用参数初始化的东西。
经验:遇到实例化失败的情况,可以先不实例化,在xml中使用<X.X.X.XXXView ... />来声明控件,在使用setContentView函数后看是否能够正常显示,正常显示则证明public XXXView(Context context)构造函数是成功的,之后在去设置其他需要初始化的类属性或者成员属性。