搜尋

首頁  >  問答  >  主體

java - 多個介面相同佈局?

假設我有5個不同的Activity但這5個activity底部的佈局、功能都是一樣(其他佈局不一樣例如toolBar),我想問一下如何才能讓這個相同的佈局只寫在基類Activity中接著其他Activity繼承這個BaseActivity,從而實現只寫一個地方的程式碼而其他Activity中不用在寫相同的程式碼。
ps:如果這個方式無法實現,請問有其他方法沒有。

ringa_leeringa_lee2743 天前1135

全部回覆(3)我來回復

  • 習慣沉默

    習慣沉默2017-06-20 10:08:35

    你可以看下這篇,看別人的做法,希望對你有所啟發:http://www.jianshu.com/p/5bab...

    回覆
    0
  • 仅有的幸福

    仅有的幸福2017-06-20 10:08:35

    /q/10...
    你這個問題跟上面那個問題,應該問的異曲同工,你參考下。

    回覆
    0
  • 某草草

    某草草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();
            //其他的工作。。。
        }

    回覆
    0
  • 取消回覆