whoami_han 2017-08-17 07:17 采纳率: 0%
浏览 1576
已结题

android library中的toolbar设置android:theme属性不生效

正在封装一个库,打算封装一个BaseToolbarActivity,打算用于以后的使用,但是我在库里面的xml中设置的属性,没有效果,求教

/**
 * Created by leo on 2017/6/16.
 * 在需要使用带有标题(Toolbar实现)的Activity时继承此activity。使用此activity,需要主题style配合。<br/>
 * 实现了对Toolbar的简单封装,以及沉浸式状态栏<br>
 * 沉浸式状态栏,当Android 版本 大于4.4小于5.0时,需要指定颜色,不然默认黑色,当Android版本大于5.0时,颜色默认为主题颜色<br>
 * toolbar的加载操作由BaseToolBarActivity完成,布局中不需要对其进行布局<br>
 * 在复写方法时,请调用super方法
 */

public abstract class BaseToolBarActivity extends BaseActivity {
    private Toolbar mToolBar;
    private TextView mTextView;
    private RelativeLayout rootView;
//    private Unbinder mUnBinder;


//    @Override
//    protected void onDestroy() {
//        super.onDestroy();
//        mUnBinder.unbind();
//    }

    @Override
    protected final void initView() {
//        View baseView = LayoutInflater.from(this).inflate(R.layout.activity_base_title, null);
//        rootView = (RelativeLayout) baseView.findViewById(R.id.rl_rootView);
//        mToolBar = (Toolbar) baseView.findViewById(R.id.tb_baseToolbar);
//
//        mToolBar.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
//        mTextView = (TextView) baseView.findViewById(R.id.tv_baseTitle);
//        mTextView.setText(getTitleBarText());
//        View userView = LayoutInflater.from(this).inflate(getLayoutResource(), null);
//        if (userView != null) {
//            RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
//            layoutParams.addRule(RelativeLayout.BELOW, R.id.tb_baseToolbar);
//            rootView.addView(userView, layoutParams);
//            mUnBinder = ButterKnife.bind(this, userView);
//        }

        setContentView(R.layout.activity_base_title);
        /******/
        rootView = (RelativeLayout) findViewById(R.id.rl_rootView);
        mToolBar = (Toolbar)findViewById(R.id.tb_baseToolbar);
        mToolBar.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
        mTextView = (TextView) findViewById(R.id.tv_baseTitle);
        mTextView.setText(getTitleBarText());
        View userView = LayoutInflater.from(this).inflate(getLayoutResource(), null);
        if (userView != null) {
            RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
            layoutParams.addRule(RelativeLayout.BELOW, R.id.tb_baseToolbar);
            rootView.addView(userView, layoutParams);
            mUnBinder = ButterKnife.bind(this, userView);
        }
        /*****/
        setSupportActionBar(mToolBar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        StatusBarCompat.compat(this);
    }


    /**
     * 设置标题
     *
     * @return title的标题
     */
    protected abstract String getTitleBarText();

    /**
     * 设置是否显示返回按钮
     *
     * @param show true表示设置返回按钮
     */
    protected void enableBackIcon(boolean show) {
        if (show) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            mToolBar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();
                }
            });
        } else {
            getSupportActionBar().setDisplayHomeAsUpEnabled(false);
            mToolBar.setNavigationOnClickListener(null);
        }
    }

    /**
     * 设置标题栏颜色。状态栏会使用默认颜色
     *
     * @param titleBarColor 颜色
     */
    protected void setTitleBarColor(@ColorInt int titleBarColor) {
        this.setTitleBarColor(titleBarColor, -1);
    }

    /**
     * 设置titleBar文字
     *
     * @param title 标题文字
     */
    protected void setTitleBarText(String title) {
        mTextView.setText(title);
    }

    /**
     * 设置标题栏颜色,与状态栏颜色
     *
     * @param titleBarColor  标题栏颜色
     * @param statusBarColor 状态栏颜色
     */
    protected void setTitleBarColor(@ColorInt int titleBarColor, @ColorInt int statusBarColor) {
        mToolBar.setBackgroundColor(titleBarColor);
        StatusBarCompat.compat(this, statusBarColor);
    }

    /**
     * 设置标题文字大小
     *
     * @param size 大小
     */
    protected void setTitleSize(float size) {
        mTextView.setTextSize(size);
    }

    /**
     * 取得Toolbar实例。
     * 取得实例用于与drawerlayout等控件结合使用,请不要取得toolbar实例后直接操作。
     *
     * @return toolbar
     */
    protected Toolbar getToolbarInstance() {
        return mToolBar;
    }

    /**
     * 设置标题文字颜色
     *
     * @param titleBarColor 颜色
     */
    protected void setTitleTextColor(@ColorInt int titleBarColor) {
        mTextView.setTextColor(titleBarColor);
    }

}

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"



    android:id="@+id/rl_rootView"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.Toolbar
        android:id="@+id/tb_baseToolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        android:theme="@style/MyToolbarStyle">

        <TextView
            android:id="@+id/tv_baseTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textColor="#ffffff"
            android:textSize="18sp" />
    </android.support.v7.widget.Toolbar>
</RelativeLayout>
   <style name="MyToolbarStyle" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">?actionBarSize</item>
        <item name="android:textColorPrimaryInverse">@color/white</item>
        <item name="android:textColorPrimary">@color/white</item>
        <item name="android:actionMenuTextColor">@android:color/holo_green_light</item>
    </style>
  • 写回答

2条回答

  • 紫风幻雪 2017-08-17 07:39
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题