Heim > Fragen und Antworten > Hauptteil
Angenommen, ich habe 5 verschiedene Aktivitäten, aber das Layout und die Funktionen am unteren Rand der 5 Aktivitäten sind gleich (andere Layouts sind unterschiedlich, z. B. die Symbolleiste). Ich würde gerne fragen, wie ich das gleiche Layout nur in die Basis schreiben kann Die Klassenaktivität und dann andere Aktivitäten erben diese BaseActivity, wodurch Code nur an einer Stelle geschrieben wird, ohne dass derselbe Code in anderen Aktivitäten geschrieben wird.
ps: Wenn diese Methode nicht erreicht werden kann, gibt es eine andere Methode?
某草草2017-06-20 10:08:35
首先我们定义一个Boolean 变量 用于控制共有部分是否显示,并添加方法如下:
private boolean isShowCommonView = true;
public void setShowCommonView(boolean isShow) {
isShowCommonView = isShow;
}
然后我们复写BaseActivity中的setContentView:如下
@Override
public void setContentView(@LayoutRes int layoutResID) {
super.setContentView(layoutResID);
if (isShowBottom) {
ViewGroup mDecorView = (ViewGroup) getWindow().getDecorView();
//获得DecorView视图层次中的FrameLayout
//这个地方不清楚的可以看一下Activity的视图层次图就明白了
mContentRootView = (FrameLayout) ((ViewGroup) mDecorView.getChildAt(0)).getChildAt(1);
mBottomView = LayoutInflater.from(getBaseContext()).inflate(R.layout.ac_main_play_view, null);
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.gravity = Gravity.BOTTOM;
mContentRootView.addView(mBottomView, layoutParams);
//下面就是根据mBottomView.findViewById()来进行一些视图的初始化工作
//如设置监听器等
}
}
最后我们在其他继承了BaseActivity的子类的onCreate()中一定要在super.onCreate()前调用开始定义的方法setShowCommonView(Boolean)来控制共有部分是否显示。如下
//子类的生命周期函数:onCreate(Bundle)
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
//显示底部视图 true为显示 false 为隐藏
setShowBottom(true);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mainplay);
ButterKnife.bind(this);
initview();
//其他的工作。。。
}