java - 多个界面相同布局?
问题描述
假设我有5个不同的Activity但这5个activity底部的布局、功能都是一样(其他布局不一样例如toolBar),我想问一下如何才能让这个相同的布局只写在基类Activity中然后其他Activity继承这个BaseActivity,从而实现只写一个地方的代码而其他Activity中不用在写相同的代码。ps:如果这个方式无法实现,请问有其他方法没有。
问题解答
回答1:你可以看下这篇,看下别人的做法,希望对你有所启发:http://www.jianshu.com/p/5bab...
回答2:/q/10...你这个问题跟上面那个问题,应该问的异曲同工,你参考下。
回答3:首先我们定义一个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();//其他的工作。。。 }
相关文章:
1. dockerfile - 我用docker build的时候出现下边问题 麻烦帮我看一下2. 请问怎么改变超链接字体的颜色?3. Mongodb web连接28017后,提示登录的用户名密码在 db那里预设置4. java编程思想第4版中文版的几处谬误?5. 为什么我ping不通我的docker容器呢???6. java - 做数据库向手机端的推送要系统地学习哪些知识?求大神指点,谢谢!7. docker-machine添加一个已有的docker主机问题8. 在add.php中提交数据库已有的姓名,没有提示框9. linux - 如何编写expect脚本自动导入mysql数据库10. 急急急!!!求大神解答网站评论问题,有大神帮帮小弟吗
![dockerfile - 我用docker build的时候出现下边问题 麻烦帮我看一下](http://www.haobala.com/attached/image/news/202311/1028095cc6.png)