android开发笔记(BaseActivity集成ToolBar控件)

        为了能够统一APP风格,通过BaseActivity集成ToolBar控件,去掉冗余的ToolBar代码,简化界面开发。

创建Android项目后,修改style文件,将其样式修改为NoActionBar,把application的theme设置为AppTheme

    
    

创建BaseActivity和activity_base.xml文件,修改内容如下:

public class BaseActivity extends AppCompatActivity {
    public static String TAG = ""; //TAG标识
    protected Toolbar toolbar = null;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TAG = this.getClass().getSimpleName();

        //沉浸式效果
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // LOLLIPOP解决方案
            getWindow().setStatusBarColor(Color.TRANSPARENT);//状态栏设置为透明色
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); //透明导航栏
        }else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {// KITKAT解决方案
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明状态栏
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);//透明导航栏
        }
    }


    @Override
    public void setContentView(@LayoutRes int layoutResID) {
        //子类重写该方法,决定是否显示ToolBar
        if(hasToolBar()){
            //将activity_base.xml布局作为根布局
            super.setContentView(R.layout.activity_base);
            //初始化ToolBar,将其作为ActionBar
            toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);//使能toolbar
            //拿到activity_base.xml的base_content子布局
            FrameLayout frameLayout= (FrameLayout) findViewById(R.id.base_content);
            //将子类的布局文件加载到base_content布局中
            LayoutInflater.from(this).inflate(layoutResID,frameLayout,true);
        }else{
            //直接将子类的布局文件加载到根布局
            super.setContentView(layoutResID);
        }
    }
    //子类需要重写该方法
    protected boolean hasToolBar(){
        return true;
    }
    //子类通过该方法获取ToolBar的引用进行相应的操作,若没有ToolBar则抛出异常
    protected Toolbar getParentToolbar() throws Exception{
        if (hasToolBar()){
            return toolbar;
        }else {
            throw new NullPointerException("toolbar of BaseActivity is NULL");
        }
    }
}

xml文件内容:




    

    

    
    

让我们自己的Activity继承BaseActivity,就可以使用ToolBar了

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        try {
            Toolbar toolbar = getParentToolbar();
            toolbar.inflateMenu(R.menu.mymenu);
            toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem menuItem) {
                    switch (menuItem.getItemId()){
                        case R.id.action_settings:
                            Log.d(TAG,"setting");
                            break;
                        case R.id.action_share:
                            Log.d(TAG,"share");

                            break;
                        case R.id.action_search:
                            Log.d(TAG,"search");

                            break;
                        case R.id.action_search2:
                            Log.d(TAG,"search2");

                            break;
                    }
                    return true;
                }
            });
            toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.d(TAG,"点击了导航栏");
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    @Override
    protected boolean hasToolBar() {//重写该方法,返回true表示将ToolBar添加到布局中
        return true;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.mymenu,menu);
        return true;
    }
}

 

你可能感兴趣的:(Android,学习)