Skip to content

Commit

Permalink
Merge pull request Tencent#68 from EndSmile/master
Browse files Browse the repository at this point in the history
修复QMUITopBar内部的间距计算问题
  • Loading branch information
cgspine authored Nov 15, 2017
2 parents bfa296a + b4166a8 commit 80c9f87
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 37 deletions.
64 changes: 29 additions & 35 deletions qmui/src/main/java/com/qmuiteam/qmui/widget/QMUITopBar.java
Original file line number Diff line number Diff line change
Expand Up @@ -309,26 +309,14 @@ public Rect getTitleContainerRect() {

// ========================= leftView、rightView 相关的方法

/**
* 若在 titleView 存在的情况下,改变 leftViews 和 rightViews,会导致 titleView 的位置不正确。
* 此时要调用该方法,保证 titleView 的位置重新调整
*/
private void refreshTitleViewLp() {
// 若原本已经有 title,则需要将title移到新添加进去的按钮右边
if (mTitleView != null) {
LayoutParams titleLp = generateTitleContainerViewLp();
makeSureTitleContainerView().setLayoutParams(titleLp);

}
}

private LinearLayout makeSureTitleContainerView() {
if (mTitleContainerView == null) {
mTitleContainerView = new LinearLayout(getContext());
// 垂直,后面要支持水平的话可以加个接口来设置
mTitleContainerView.setOrientation(LinearLayout.VERTICAL);
mTitleContainerView.setGravity(Gravity.CENTER);
mTitleContainerView.setPadding(QMUIDisplayHelper.dp2px(getContext(), 8), 0, QMUIDisplayHelper.dp2px(getContext(), 8), 0);
int horPadding = QMUIResHelper.getAttrDimen(getContext(), R.attr.qmui_topbar_title_container_padding_horizontal);
mTitleContainerView.setPadding(horPadding, 0, horPadding, 0);
addView(mTitleContainerView, generateTitleContainerViewLp());
}
return mTitleContainerView;
Expand All @@ -340,20 +328,8 @@ private LinearLayout makeSureTitleContainerView() {
* 没有左右按钮时,该 View 距离 TopBar 左右边缘有固定的距离
*/
private LayoutParams generateTitleContainerViewLp() {
LayoutParams titleLp = new LayoutParams(LayoutParams.MATCH_PARENT,
return new LayoutParams(LayoutParams.MATCH_PARENT,
QMUIResHelper.getAttrDimen(getContext(), R.attr.qmui_topbar_height));

// 左右没有按钮时,title 距离 TopBar 左右边缘的距离
int titleMarginHorizontalWithoutButton = QMUIResHelper.getAttrDimen(getContext(),
R.attr.qmui_topbar_title_margin_horizontal_when_no_btn_aside);

if (mLeftLastViewId == DEFAULT_VIEW_ID && mRightLastViewId == DEFAULT_VIEW_ID) {
// 左右两边都没有按钮时,title 和 TopBar 两边保持一个按钮的距离
titleLp.leftMargin = titleMarginHorizontalWithoutButton;
titleLp.rightMargin = titleMarginHorizontalWithoutButton;
}

return titleLp;
}

/**
Expand Down Expand Up @@ -401,9 +377,6 @@ public void addLeftView(View view, int viewId, LayoutParams layoutParams) {
view.setId(viewId);
mLeftViewList.add(view);
addView(view, layoutParams);

// 消除按钮变动对 titleView 造成的影响
refreshTitleViewLp();
}

/**
Expand Down Expand Up @@ -441,9 +414,6 @@ public void addRightView(View view, int viewId, LayoutParams layoutParams) {
view.setId(viewId);
mRightViewList.add(view);
addView(view, layoutParams);

// 消除按钮变动对 titleView 造成的影响
refreshTitleViewLp();
}

/**
Expand Down Expand Up @@ -629,14 +599,14 @@ private int getTopBarHeight() {
return mTopbarHeight;
}

private int getTopBarImageBtnWidth() {
protected int getTopBarImageBtnWidth() {
if (mTopbarImageBtnWidth == -1) {
mTopbarImageBtnWidth = QMUIResHelper.getAttrDimen(getContext(), R.attr.qmui_topbar_image_btn_height);
}
return mTopbarImageBtnWidth;
}

private int getTopBarImageBtnHeight() {
protected int getTopBarImageBtnHeight() {
if (mTopbarImageBtnHeight == -1) {
mTopbarImageBtnHeight = QMUIResHelper.getAttrDimen(getContext(), R.attr.qmui_topbar_image_btn_height);
}
Expand Down Expand Up @@ -714,9 +684,27 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// 计算 titleContainer 的最大宽度
int titleContainerWidth;
if ((mTitleGravity & Gravity.HORIZONTAL_GRAVITY_MASK) == Gravity.CENTER_HORIZONTAL) {
if (leftViewWidth == 0 && rightViewWidth == 0) {
// 左右没有按钮时,title 距离 TopBar 左右边缘的距离
int titleMarginHorizontalWithoutButton = QMUIResHelper.getAttrDimen(getContext(),
R.attr.qmui_topbar_title_margin_horizontal_when_no_btn_aside);
leftViewWidth += titleMarginHorizontalWithoutButton;
rightViewWidth += titleMarginHorizontalWithoutButton;
}

// 标题水平居中,左右两侧的占位要保持一致
titleContainerWidth = MeasureSpec.getSize(widthMeasureSpec) - Math.max(leftViewWidth, rightViewWidth) * 2 - getPaddingLeft() - getPaddingRight();
} else {
// 标题非水平居中,左右没有按钮时,间距分别计算
if (leftViewWidth == 0) {
leftViewWidth += QMUIResHelper.getAttrDimen(getContext(),
R.attr.qmui_topbar_title_margin_horizontal_when_no_btn_aside);
}
if (rightViewWidth == 0) {
rightViewWidth += QMUIResHelper.getAttrDimen(getContext(),
R.attr.qmui_topbar_title_margin_horizontal_when_no_btn_aside);
}

// 标题非水平居中,左右两侧的占位按实际计算即可
titleContainerWidth = MeasureSpec.getSize(widthMeasureSpec) - leftViewWidth - rightViewWidth - getPaddingLeft() - getPaddingRight();
}
Expand Down Expand Up @@ -745,6 +733,12 @@ protected void onLayout(boolean changed, int l, int t, int r, int b) {
titleContainerViewLeft += view.getMeasuredWidth();
}
}

if (mLeftViewList.isEmpty()) {
//左侧没有按钮,标题离左侧间距
titleContainerViewLeft += QMUIResHelper.getAttrDimen(getContext(),
R.attr.qmui_topbar_title_margin_horizontal_when_no_btn_aside);
}
}
mTitleContainerView.layout(titleContainerViewLeft, titleContainerViewTop, titleContainerViewLeft + titleContainerViewWidth, titleContainerViewTop + titleContainerViewHeight);
}
Expand Down
1 change: 1 addition & 0 deletions qmui/src/main/res/values/qmui_attrs_base.xml
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@
<attr name="qmui_topbar_title_text_size" format="dimension"/>
<attr name="qmui_topbar_title_text_size_with_subtitle" format="dimension"/>
<attr name="qmui_topbar_title_margin_horizontal_when_no_btn_aside" format="dimension"/>
<attr name="qmui_topbar_title_container_padding_horizontal" format="dimension"/>
<attr name="qmui_topbar_subtitle_text_size" format="dimension"/>
<attr name="qmui_topbar_subtitle_color" format="color"/>
<attr name="qmui_topbar_image_btn_width" format="dimension"/>
Expand Down
3 changes: 2 additions & 1 deletion qmui/src/main/res/values/qmui_themes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,8 @@
<item name="qmui_topbar_title_color">@color/qmui_config_color_gray_1</item>
<item name="qmui_topbar_title_text_size">17sp</item>
<item name="qmui_topbar_title_text_size_with_subtitle">16sp</item>
<item name="qmui_topbar_title_margin_horizontal_when_no_btn_aside">@dimen/qmui_content_padding_horizontal</item>
<item name="qmui_topbar_title_margin_horizontal_when_no_btn_aside">0dp</item>
<item name="qmui_topbar_title_container_padding_horizontal">8dp</item>
<item name="qmui_topbar_subtitle_text_size" >11sp</item>
<item name="qmui_topbar_subtitle_color">@color/qmui_config_color_gray_1</item>
<item name="qmui_topbar_image_btn_width">48dp</item>
Expand Down
3 changes: 2 additions & 1 deletion qmui/src/main/res/values/qmui_themes_compat.xml
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,8 @@
<item name="qmui_topbar_title_color">@color/qmui_config_color_gray_1</item>
<item name="qmui_topbar_title_text_size">17sp</item>
<item name="qmui_topbar_title_text_size_with_subtitle">16sp</item>
<item name="qmui_topbar_title_margin_horizontal_when_no_btn_aside">@dimen/qmui_content_padding_horizontal</item>
<item name="qmui_topbar_title_margin_horizontal_when_no_btn_aside">0dp</item>
<item name="qmui_topbar_title_container_padding_horizontal">8dp</item>
<item name="qmui_topbar_subtitle_text_size" >11sp</item>
<item name="qmui_topbar_subtitle_color">@color/qmui_config_color_gray_1</item>
<item name="qmui_topbar_image_btn_width">48dp</item>
Expand Down

0 comments on commit 80c9f87

Please sign in to comment.