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?
ringa_lee
首先我們定義一個Boolean 變量 用于控制共有部分是否顯示,并添加方法如下:
private boolean isShowCommonView = true;
public void setShowCommonView(boolean isShow) {
isShowCommonView = isShow;
}
然后我們復寫B(tài)aseActivity中的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);
//下面就是根據(jù)mBottomView.findViewById()來進行一些視圖的初始化工作
//如設置監(jiān)聽器等
}
}
最后我們在其他繼承了BaseActivity的子類的onCreate()中一定要在super.onCreate()前調(diào)用開始定義的方法setShowCommonView(Boolean)來控制共有部分是否顯示。如下
//子類的生命周期函數(shù):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();
//其他的工作。。。
}