skin for QMUITabSegment

This commit is contained in:
cgspine
2019-09-25 21:11:10 +08:00
parent fc14ced6a6
commit ab8208019f
23 changed files with 285 additions and 194 deletions
@@ -0,0 +1,36 @@
package com.qmuiteam.qmui.skin;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.view.View;
import com.qmuiteam.qmui.R;
import com.qmuiteam.qmui.util.QMUIResHelper;
import androidx.annotation.Nullable;
public class QMUISkinHelper {
public static int getSkinColor(View view, int colorAttr) {
Integer skin = (Integer) view.getTag(R.id.qmui_skin_current_index);
Resources.Theme theme;
if (skin == null || skin <= 0) {
theme = view.getContext().getTheme();
} else {
theme = QMUISkinManager.getInstance(view.getContext()).getTheme(skin);
}
return QMUIResHelper.getAttrColor(theme, colorAttr);
}
@Nullable
public static Drawable getSkinDrawable(View view, int drawableAttr) {
Integer skin = (Integer) view.getTag(R.id.qmui_skin_current_index);
Resources.Theme theme;
if (skin == null || skin <= 0) {
theme = view.getContext().getTheme();
} else {
theme = QMUISkinManager.getInstance(view.getContext()).getTheme(skin);
}
return QMUIResHelper.getAttrDrawable(view.getContext(), theme, drawableAttr);
}
}
@@ -82,7 +82,7 @@ public final class QMUISkinManager {
private Resources mResources;
private String mPackageName;
private SparseArray<SkinItem> mThemes = new SparseArray<>();
private SparseArray<SkinItem> mSkins = new SparseArray<>();
private HashMap<String, IQMUISkinRuleHandler> mRuleHandlers = new HashMap<>();
// Actually, ViewGroup.OnHierarchyChangeListener is a better choice, but it only has a setter.
@@ -149,7 +149,7 @@ public final class QMUISkinManager {
@Nullable
public Resources.Theme getTheme(int skinIndex) {
SkinItem skinItem = mThemes.get(skinIndex);
SkinItem skinItem = mSkins.get(skinIndex);
if (skinItem != null) {
return skinItem.getTheme();
}
@@ -158,8 +158,11 @@ public final class QMUISkinManager {
@MainThread
public void addTheme(int index, int styleRes) {
SkinItem skinItem = mThemes.get(index);
public void addSkin(int index, int styleRes) {
if(index <= 0){
throw new IllegalArgumentException("index must greater than 0");
}
SkinItem skinItem = mSkins.get(index);
if (skinItem != null) {
if (skinItem.getStyleRes() == styleRes) {
return;
@@ -167,7 +170,7 @@ public final class QMUISkinManager {
throw new RuntimeException("already exist the theme item for " + index);
}
skinItem = new SkinItem(styleRes);
mThemes.append(index, skinItem);
mSkins.append(index, skinItem);
}
@@ -178,7 +181,7 @@ public final class QMUISkinManager {
if (view == null) {
return;
}
SkinItem skinItem = mThemes.get(skinIndex);
SkinItem skinItem = mSkins.get(skinIndex);
Resources.Theme theme;
if (skinItem == null) {
if (skinIndex != DEFAULT_SKIN) {
@@ -232,7 +235,13 @@ public final class QMUISkinManager {
Map<String, Integer> attrs = getSkinAttrs(view);
if (view instanceof IQMUISkinHandlerView) {
((IQMUISkinHandlerView) view).handle(this, skinIndex, theme, attrs);
} else if (attrs != null) {
} else{
defaultHandleSkinAttrs(view, theme, attrs);
}
}
public void defaultHandleSkinAttrs(@NonNull View view, Resources.Theme theme, Map<String, Integer> attrs){
if(attrs != null){
for (String key : attrs.keySet()) {
Integer attr = attrs.get(key);
if (attr == null) {
@@ -242,7 +251,6 @@ public final class QMUISkinManager {
}
}
}
public void defaultHandleSkinAttr(View view, Resources.Theme theme, String name, int attr) {
if (attr == 0) {
return;
@@ -317,4 +325,5 @@ public final class QMUISkinManager {
return theme;
}
}
}
@@ -90,7 +90,7 @@ public class QMUITopBar extends QMUIRelativeLayout implements IQMUISkinHandlerVi
private int mTopBarHeight = -1;
private Rect mTitleContainerRect;
private HashMap<String, Integer> mDefaultSkinAttrs = new HashMap<>();
private Map<String, Integer> mDefaultSkinAttrs = new HashMap<>();
public QMUITopBar(Context context) {
this(context, null);
@@ -112,7 +112,7 @@ public class QMUITopBar extends QMUIRelativeLayout implements IQMUISkinHandlerVi
mLeftViewList = new ArrayList<>();
mRightViewList = new ArrayList<>();
mDefaultSkinAttrs.put(QMUISkinValueBuilder.BOTTOM_SEPARATOR, R.attr.qmui_topbar_separator_color);
mDefaultSkinAttrs.put(QMUISkinValueBuilder.BACKGROUND, R.attr.qmui_topbar_bg_color);
mDefaultSkinAttrs.put(QMUISkinValueBuilder.BACKGROUND, R.attr.qmui_topbar_bg);
mDefaultSkinAttrs.put(QMUISkinValueBuilder.BTN_TEXT_COLOR, R.attr.qmui_topbar_text_btn_color_state_list);
mDefaultSkinAttrs.put(QMUISkinValueBuilder.TINT_COLOR, R.attr.qmui_topbar_image_tint_color);
@@ -61,7 +61,7 @@ public class QMUITopBarLayout extends QMUIFrameLayout implements IQMUISkinDefaul
public QMUITopBarLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mDefaultSkinAttrs.put(QMUISkinValueBuilder.BOTTOM_SEPARATOR, R.attr.qmui_topbar_separator_color);
mDefaultSkinAttrs.put(QMUISkinValueBuilder.BACKGROUND, R.attr.qmui_topbar_bg_color);
mDefaultSkinAttrs.put(QMUISkinValueBuilder.BACKGROUND, R.attr.qmui_topbar_bg);
mTopBar = new QMUITopBar(context, attrs, defStyleAttr);
mTopBar.setBackground(null);
mTopBar.updateBottomDivider(0, 0, 0, 0);
@@ -50,8 +50,8 @@ public class QMUITab {
int selectedTextSize;
Typeface normalTypeface;
Typeface selectedTypeface;
int normalColor;
int selectedColor;
int normalColorAttr;
int selectedColorAttr;
int normalTabIconWidth = QMUITabIcon.TAB_ICON_INTRINSIC;
int normalTabIconHeight = QMUITabIcon.TAB_ICON_INTRINSIC;
float selectedTabIconScale = 1f;
@@ -128,12 +128,12 @@ public class QMUITab {
}
public int getNormalColor() {
return normalColor;
public int getNormalColorAttr() {
return normalColorAttr;
}
public int getSelectedColor() {
return selectedColor;
public int getSelectedColorAttr() {
return selectedColorAttr;
}
public int getNormalTextSize() {
@@ -20,6 +20,7 @@ import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.view.Gravity;
import com.qmuiteam.qmui.R;
import com.qmuiteam.qmui.util.QMUIDisplayHelper;
import androidx.annotation.Nullable;
@@ -53,11 +54,11 @@ public class QMUITabBuilder {
/**
* text color(icon color in if dynamicChangeIconColor == true) in normal state
*/
private int normalColor;
private int normalColorAttr = R.attr.qmui_tab_normal_color;
/**
* text color(icon color in if dynamicChangeIconColor == true) in selected state
*/
private int selectedColor;
private int selectedColorAttr = R.attr.qmui_tab_selected_color;
/**
* icon position(left/top/right/bottom)
*/
@@ -137,8 +138,8 @@ public class QMUITabBuilder {
this.dynamicChangeIconColor = other.dynamicChangeIconColor;
this.normalTextSize = other.normalTextSize;
this.selectTextSize = other.selectTextSize;
this.normalColor = other.normalColor;
this.selectedColor = other.selectedColor;
this.normalColorAttr = other.normalColorAttr;
this.selectedColorAttr = other.selectedColorAttr;
this.iconPosition = other.iconPosition;
this.gravity = other.gravity;
this.text = other.text;
@@ -211,9 +212,9 @@ public class QMUITabBuilder {
return this;
}
public QMUITabBuilder setColor(int normalColor, int selectedColor) {
this.normalColor = normalColor;
this.selectedColor = selectedColor;
public QMUITabBuilder setColorAttr(int normalColorAttr, int selectedColorAttr) {
this.normalColorAttr = normalColorAttr;
this.selectedColorAttr = selectedColorAttr;
return this;
}
@@ -256,8 +257,8 @@ public class QMUITabBuilder {
tab.selectedTextSize = this.selectTextSize;
tab.normalTypeface = this.normalTypeface;
tab.selectedTypeface = this.selectedTypeface;
tab.normalColor = this.normalColor;
tab.selectedColor = this.selectedColor;
tab.normalColorAttr = this.normalColorAttr;
tab.selectedColorAttr = this.selectedColorAttr;
tab.signCount = this.signCount;
tab.signCountDigits = this.signCountDigits;
tab.signCountLeftMarginWithIconOrText = this.signCountLeftMarginWithIconOrText;
@@ -35,7 +35,10 @@ public class QMUITabIcon extends Drawable {
private final @Nullable Drawable mSelectedIconDrawable;
public QMUITabIcon(@NonNull Drawable normalIconDrawable, @Nullable Drawable selectedIconDrawable) {
mNormalIconDrawable = normalIconDrawable;
mNormalIconDrawable = normalIconDrawable.mutate();
if(selectedIconDrawable != null){
selectedIconDrawable = selectedIconDrawable.mutate();
}
mSelectedIconDrawable = selectedIconDrawable;
mNormalIconDrawable.setAlpha(255);
int nw = mNormalIconDrawable.getIntrinsicWidth();
@@ -19,6 +19,7 @@ package com.qmuiteam.qmui.widget.tab;
import android.animation.Animator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.database.DataSetObserver;
import android.graphics.Canvas;
@@ -33,6 +34,11 @@ import com.qmuiteam.qmui.QMUIInterpolatorStaticHolder;
import com.qmuiteam.qmui.R;
import com.qmuiteam.qmui.layout.IQMUILayout;
import com.qmuiteam.qmui.layout.QMUILayoutHelper;
import com.qmuiteam.qmui.skin.IQMUISkinHandlerView;
import com.qmuiteam.qmui.skin.QMUISkinHelper;
import com.qmuiteam.qmui.skin.QMUISkinManager;
import com.qmuiteam.qmui.skin.QMUISkinValueBuilder;
import com.qmuiteam.qmui.skin.defaultAttr.IQMUISkinDefaultAttrProvider;
import com.qmuiteam.qmui.util.QMUIColorHelper;
import com.qmuiteam.qmui.util.QMUIDisplayHelper;
import com.qmuiteam.qmui.util.QMUIResHelper;
@@ -41,7 +47,9 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import androidx.annotation.ColorInt;
import androidx.annotation.IntDef;
@@ -100,7 +108,7 @@ import androidx.viewpager.widget.ViewPager;
* @author cginechen
* @date 2016-01-27
*/
public class QMUITabSegment extends HorizontalScrollView implements IQMUILayout {
public class QMUITabSegment extends HorizontalScrollView implements IQMUILayout, IQMUISkinHandlerView, IQMUISkinDefaultAttrProvider {
private static final String TAG = "QMUITabSegment";
@@ -147,6 +155,7 @@ public class QMUITabSegment extends HorizontalScrollView implements IQMUILayout
private AdapterChangeListener mAdapterChangeListener;
private boolean mIsInSelectTab = false;
private QMUILayoutHelper mLayoutHelper;
private Map<String, Integer> mDefaultSkinAttrs = new HashMap<>();
public QMUITabSegment(Context context) {
this(context, null);
@@ -183,10 +192,6 @@ public class QMUITabSegment extends HorizontalScrollView implements IQMUILayout
indicatorTop, indicatorWidthFollowContent);
// tabBuilder
int normalTextColor = array.getColor(R.styleable.QMUITabSegment_qmui_tab_normal_color,
ContextCompat.getColor(context, R.color.qmui_config_color_gray_5));
int selectedTextColor = array.getColor(R.styleable.QMUITabSegment_qmui_tab_selected_color,
QMUIResHelper.getAttrColor(context, R.attr.qmui_config_color_blue));
int normalTextSize = array.getDimensionPixelSize(
R.styleable.QMUITabSegment_android_textSize,
getResources().getDimensionPixelSize(R.dimen.qmui_tab_segment_text_size));
@@ -196,7 +201,6 @@ public class QMUITabSegment extends HorizontalScrollView implements IQMUILayout
selectedTextSize = array.getDimensionPixelSize(
R.styleable.QMUITabSegment_qmui_tab_selected_text_size, selectedTextSize);
mTabBuilder = new QMUITabBuilder(context)
.setColor(normalTextColor, selectedTextColor)
.setTextSize(normalTextSize, selectedTextSize)
.setIconPosition(array.getInt(R.styleable.QMUITabSegment_qmui_tab_icon_position,
QMUITab.ICON_POSITION_LEFT));
@@ -210,6 +214,10 @@ public class QMUITabSegment extends HorizontalScrollView implements IQMUILayout
addView(mContentLayout, new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT));
mTabAdapter = createTabAdapter(mContentLayout);
mDefaultSkinAttrs.put(QMUISkinValueBuilder.BOTTOM_SEPARATOR, R.attr.qmui_tab_separator_color);
mDefaultSkinAttrs.put(QMUISkinValueBuilder.TOP_SEPARATOR, R.attr.qmui_tab_separator_color);
mDefaultSkinAttrs.put(QMUISkinValueBuilder.BACKGROUND, R.attr.qmui_tab_bg);
}
protected QMUITabAdapter createTabAdapter(ViewGroup tabParentView) {
@@ -564,7 +572,7 @@ public class QMUITabSegment extends HorizontalScrollView implements IQMUILayout
if (model == null || mIndicator == null) {
return;
}
mIndicator.updateInfo(model.contentLeft, model.contentWidth, model.selectedColor);
mIndicator.updateInfo(model.contentLeft, model.contentWidth, QMUISkinHelper.getSkinColor(this, model.selectedColorAttr));
if (invalidate) {
mContentLayout.invalidate();
}
@@ -579,7 +587,9 @@ public class QMUITabSegment extends HorizontalScrollView implements IQMUILayout
final int targetLeft = (int) (preModel.contentLeft + leftDistance * offsetPercent);
final int targetWidth = (int) (preModel.contentWidth + widthDistance * offsetPercent);
int indicatorColor = QMUIColorHelper.computeColor(
preModel.selectedColor, targetModel.selectedColor, offsetPercent);
QMUISkinHelper.getSkinColor(this, preModel.selectedColorAttr),
QMUISkinHelper.getSkinColor(this, targetModel.selectedColorAttr),
offsetPercent);
mIndicator.updateInfo(targetLeft, targetWidth, indicatorColor);
mContentLayout.invalidate();
}
@@ -1307,4 +1317,15 @@ public class QMUITabSegment extends HorizontalScrollView implements IQMUILayout
mLayoutHelper.dispatchRoundBorderDraw(canvas);
super.onDraw(canvas);
}
@Override
public Map<String, Integer> getDefaultSkinAttrs() {
return mDefaultSkinAttrs;
}
@Override
public void handle(QMUISkinManager manager, int skinIndex, Resources.Theme theme, Map<String, Integer> attrs) {
layoutIndicator(mTabAdapter.getItem(mCurrentSelectedIndex), true);
manager.defaultHandleSkinAttrs(this, theme, attrs);
}
}
@@ -18,6 +18,7 @@ package com.qmuiteam.qmui.widget.tab;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Point;
import android.view.GestureDetector;
@@ -30,18 +31,23 @@ import android.widget.FrameLayout;
import android.widget.TextView;
import com.qmuiteam.qmui.R;
import com.qmuiteam.qmui.skin.IQMUISkinHandlerView;
import com.qmuiteam.qmui.skin.QMUISkinHelper;
import com.qmuiteam.qmui.skin.QMUISkinManager;
import com.qmuiteam.qmui.util.QMUICollapsingTextHelper;
import com.qmuiteam.qmui.util.QMUIColorHelper;
import com.qmuiteam.qmui.util.QMUILangHelper;
import com.qmuiteam.qmui.util.QMUIResHelper;
import java.util.Map;
import androidx.annotation.NonNull;
import androidx.core.view.GravityCompat;
import androidx.core.view.ViewCompat;
// todo custom view
// todo gravity
public class QMUITabView extends FrameLayout {
public class QMUITabView extends FrameLayout implements IQMUISkinHandlerView {
private QMUITab mTab;
private QMUICollapsingTextHelper mCollapsingTextHelper;
@@ -122,8 +128,10 @@ public class QMUITabView extends FrameLayout {
public void bind(QMUITab tab) {
mCollapsingTextHelper.setTextSize(tab.normalTextSize, tab.selectedTextSize, false);
mCollapsingTextHelper.setTextColor(ColorStateList.valueOf(tab.normalColor),
ColorStateList.valueOf(tab.selectedColor), false);
mCollapsingTextHelper.setTextColor(
ColorStateList.valueOf(QMUISkinHelper.getSkinColor(this, tab.normalColorAttr)),
ColorStateList.valueOf(QMUISkinHelper.getSkinColor(this, tab.selectedColorAttr)),
false);
mCollapsingTextHelper.setTypeface(tab.normalTypeface, tab.selectedTypeface, false);
int gravity = Gravity.LEFT | Gravity.TOP;
mCollapsingTextHelper.setGravity(gravity, gravity, false);
@@ -165,7 +173,9 @@ public class QMUITabView extends FrameLayout {
QMUITabIcon tabIcon = mTab.getTabIcon();
if (tabIcon != null) {
tabIcon.setSelectFraction(fraction,
QMUIColorHelper.computeColor(mTab.normalColor, mTab.selectedColor, fraction));
QMUIColorHelper.computeColor(
QMUISkinHelper.getSkinColor(this, mTab.normalColorAttr),
QMUISkinHelper.getSkinColor(this, mTab.selectedColorAttr), fraction));
}
updateCurrentInfo(fraction);
mCollapsingTextHelper.setExpansionFraction(1 - fraction);
@@ -648,6 +658,17 @@ public class QMUITabView extends FrameLayout {
canvas.restore();
}
@Override
public void handle(QMUISkinManager manager, int skinIndex, Resources.Theme theme, Map<String, Integer> attrs) {
if(mTab != null){
mCollapsingTextHelper.setTextColor(
ColorStateList.valueOf(QMUISkinHelper.getSkinColor(this, mTab.normalColorAttr)),
ColorStateList.valueOf(QMUISkinHelper.getSkinColor(this, mTab.selectedColorAttr)),
true);
invalidate();
}
}
public interface Callback {
void onClick(QMUITabView view);
-2
View File
@@ -79,8 +79,6 @@
<attr name="android:textSize"/>
<attr name="qmui_tab_normal_text_size" format="dimension"/>
<attr name="qmui_tab_selected_text_size" format="dimension"/>
<attr name="qmui_tab_normal_color" format="color|reference"/>
<attr name="qmui_tab_selected_color" format="color|reference"/>
<attr name="qmui_tab_mode" format="enum">
<enum name="scrollable" value="0"/>
<enum name="fixed" value="1"/>
+6 -1
View File
@@ -172,7 +172,7 @@
***********************************************-->
<attr name="qmui_topbar_height" format="dimension" />
<attr name="qmui_topbar_separator_color" format="color"/>
<attr name="qmui_topbar_bg_color" format="color"/>
<attr name="qmui_topbar_bg" format="reference"/>
<attr name="qmui_topbar_title_color" format="color"/>
<attr name="qmui_topbar_subtitle_color" format="color"/>
<attr name="qmui_topbar_text_btn_color_state_list" format="reference"/>
@@ -208,6 +208,11 @@
<!--**********************************************
* qmui tabSegment *
***********************************************-->
<attr name="qmui_tab_bg" format="reference"/>
<attr name="qmui_tab_separator_color" format="color"/>
<attr name="qmui_tab_normal_color" format="color|reference"/>
<attr name="qmui_tab_selected_color" format="color|reference"/>
<attr name="qmui_tab_sign_count_view" format="reference" />
<attr name="qmui_tab_sign_count_view_minSize" format="dimension" />
<attr name="qmui_tab_sign_count_view_minSize_with_text" format="dimension" />
@@ -85,7 +85,7 @@
<!--********************* TopBar *********************-->
<style name="QMUI.TopBar">
<item name="android:background">?attr/qmui_topbar_bg_color</item>
<item name="android:background">?attr/qmui_topbar_bg</item>
<item name="qmui_bottomDividerHeight">1px</item>
<item name="qmui_bottomDividerColor">?attr/qmui_topbar_separator_color</item>
<item name="qmui_topbar_left_back_drawable_id">@drawable/qmui_icon_topbar_back</item>
+39 -22
View File
@@ -75,6 +75,43 @@
</style>
<style name="QMUI" parent="AppConfigTheme">
<!--***************************** qmui topbar ***************************** -->
<item name="qmui_topbar_height">56dp</item>
<!-- skin support-->
<item name="qmui_topbar_separator_color">?attr/qmui_config_color_separator</item>
<item name="qmui_topbar_bg">@color/qmui_config_color_white</item>
<item name="qmui_topbar_title_color">@color/qmui_config_color_gray_1</item>
<item name="qmui_topbar_subtitle_color">?attr/qmui_config_color_gray_3</item>
<item name="qmui_topbar_text_btn_color_state_list">@color/qmui_config_color_gray_1</item>
<item name="qmui_topbar_image_tint_color">@color/qmui_config_color_gray_1</item>
<!-- skin support-->
<!--*************************** qmui tabSegment *************************** -->
<!-- skin support-->
<item name="qmui_tab_bg">@color/qmui_config_color_white</item>
<item name="qmui_tab_separator_color">?attr/qmui_config_color_separator</item>
<item name="qmui_tab_normal_color">?attr/qmui_config_color_gray_6</item>
<item name="qmui_tab_selected_color">?attr/qmui_config_color_blue</item>
<!-- skin support-->
<item name="qmui_tab_sign_count_view">@style/qmui_tab_sign_count_view</item>
<item name="qmui_tab_sign_count_view_minSize">@dimen/qmui_tab_sign_count_view_minSize</item>
<item name="qmui_tab_sign_count_view_minSize_with_text">
@dimen/qmui_tab_sign_count_view_minSize_with_text
</item>
<item name="qmui_tab_sign_count_view_bg">@drawable/qmui_sign_count_view_bg</item>
<item name="qmui_tab_sign_count_view_padding_horizontal">4dp</item>
<item name="qmui_content_padding_horizontal">@dimen/qmui_content_padding_horizontal
</item> <!-- 已废弃 -->
<item name="qmui_content_spacing_horizontal">@dimen/qmui_content_spacing_horizontal</item>
@@ -224,18 +261,7 @@
<item name="qmui_round_btn_border_color">@color/qmui_btn_blue_border</item>
<item name="qmui_round_btn_text_color">@color/qmui_btn_blue_text</item>
<!--**********************************************
* qmui topbar *
***********************************************-->
<item name="qmui_topbar_height">56dp</item>
<!-- skin support-->
<item name="qmui_topbar_separator_color">?attr/qmui_config_color_separator</item>
<item name="qmui_topbar_bg_color">@color/qmui_config_color_white</item>
<item name="qmui_topbar_title_color">@color/qmui_config_color_gray_1</item>
<item name="qmui_topbar_subtitle_color">?attr/qmui_config_color_gray_3</item>
<item name="qmui_topbar_text_btn_color_state_list">@color/qmui_config_color_gray_1</item>
<item name="qmui_topbar_image_tint_color">@color/qmui_config_color_gray_1</item>
<!-- skin support-->
<!--**********************************************
* qmui bottom sheet *
@@ -311,16 +337,7 @@
<item name="qmui_popup_arrow_up_margin_top">13dp</item>
<item name="qmui_popup_arrow_down_margin_bottom">13dp</item>
<!--**********************************************
* qmui tabSegment *
***********************************************-->
<item name="qmui_tab_sign_count_view">@style/qmui_tab_sign_count_view</item>
<item name="qmui_tab_sign_count_view_minSize">@dimen/qmui_tab_sign_count_view_minSize</item>
<item name="qmui_tab_sign_count_view_minSize_with_text">
@dimen/qmui_tab_sign_count_view_minSize_with_text
</item>
<item name="qmui_tab_sign_count_view_bg">@drawable/qmui_sign_count_view_bg</item>
<item name="qmui_tab_sign_count_view_padding_horizontal">4dp</item>
<!--**********************************************
* qmui 提供的控件样式 *
@@ -226,15 +226,13 @@ public class QDTabSegmentFixModeFragment extends BaseFragment {
.setNormalDrawable(ContextCompat.getDrawable(context, R.mipmap.icon_tabbar_component))
.setSelectedDrawable(ContextCompat.getDrawable(context, R.mipmap.icon_tabbar_component_selected))
.setText("Components")
.setColor(QMUIResHelper.getAttrColor(context, R.attr.qmui_config_color_gray_1),
QMUIResHelper.getAttrColor(context, R.attr.qmui_config_color_blue))
.setColorAttr(R.attr.qmui_config_color_gray_1, R.attr.qmui_config_color_blue)
.build();
QMUITab util = tabBuilder
.setNormalDrawable(ContextCompat.getDrawable(context, R.mipmap.icon_tabbar_util))
.setSelectedDrawable(ContextCompat.getDrawable(context, R.mipmap.icon_tabbar_util_selected))
.setText("Helper")
.setColor(QMUIResHelper.getAttrColor(context, R.attr.qmui_config_color_gray_1),
QMUIResHelper.getAttrColor(context, R.attr.qmui_config_color_red))
.setColorAttr(R.attr.qmui_config_color_gray_1, R.attr.qmui_config_color_red)
.build();
mTabSegment.addTab(component);
mTabSegment.addTab(util);
@@ -264,15 +262,13 @@ public class QDTabSegmentFixModeFragment extends BaseFragment {
.setNormalDrawable(ContextCompat.getDrawable(context, R.mipmap.icon_tabbar_component))
.setSelectedDrawable(ContextCompat.getDrawable(context, R.mipmap.icon_tabbar_component_selected))
.setText("Components")
.setColor(QMUIResHelper.getAttrColor(context, R.attr.qmui_config_color_blue),
QMUIResHelper.getAttrColor(context, R.attr.qmui_config_color_red))
.setColorAttr(R.attr.qmui_config_color_blue, R.attr.qmui_config_color_red)
.build();
QMUITab util = tabBuilder
.setNormalDrawable(ContextCompat.getDrawable(context, R.mipmap.icon_tabbar_util))
.setSelectedDrawable(ContextCompat.getDrawable(context, R.mipmap.icon_tabbar_util_selected))
.setText("Helper")
.setColor(QMUIResHelper.getAttrColor(context, R.attr.qmui_config_color_gray_1),
QMUIResHelper.getAttrColor(context, R.attr.qmui_config_color_red))
.setColorAttr(R.attr.qmui_config_color_gray_1, R.attr.qmui_config_color_red)
.build();
mTabSegment.addTab(component);
mTabSegment.addTab(util);
@@ -292,15 +288,13 @@ public class QDTabSegmentFixModeFragment extends BaseFragment {
.setNormalDrawable(ContextCompat.getDrawable(context, R.mipmap.icon_tabbar_component))
.setSelectedDrawable(ContextCompat.getDrawable(context, R.mipmap.icon_tabbar_component_selected))
.setText("Components")
.setColor(QMUIResHelper.getAttrColor(context, R.attr.qmui_config_color_blue),
QMUIResHelper.getAttrColor(context, R.attr.qmui_config_color_red))
.setColorAttr(R.attr.qmui_config_color_blue, R.attr.qmui_config_color_red)
.build();
QMUITab util = tabBuilder
.setNormalDrawable(ContextCompat.getDrawable(context, R.mipmap.icon_tabbar_util))
.setSelectedDrawable(ContextCompat.getDrawable(context, R.mipmap.icon_tabbar_util_selected))
.setText("Helper")
.setColor(QMUIResHelper.getAttrColor(context, R.attr.qmui_config_color_gray_1),
QMUIResHelper.getAttrColor(context, R.attr.qmui_config_color_red))
.setColorAttr(R.attr.qmui_config_color_gray_1, R.attr.qmui_config_color_red)
.build();
mTabSegment.addTab(component);
mTabSegment.addTab(util);
@@ -22,7 +22,6 @@ import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.qmuiteam.qmui.util.QMUIDisplayHelper;
import com.qmuiteam.qmui.util.QMUIResHelper;
import com.qmuiteam.qmui.widget.tab.QMUITab;
import com.qmuiteam.qmui.widget.tab.QMUITabBuilder;
import com.qmuiteam.qmui.widget.tab.QMUITabSegment;
@@ -101,11 +100,9 @@ public class HomeFragment extends BaseFragment {
}
private void initTabs() {
int normalColor = QMUIResHelper.getAttrColor(getContext(), R.attr.qmui_config_color_gray_6);
int selectColor = QMUIResHelper.getAttrColor(getContext(), R.attr.qmui_config_color_blue);
QMUITabBuilder builder = mTabSegment.tabBuilder();
builder.setColor(normalColor, selectColor)
.setSelectedIconScale(1.6f)
builder.setSelectedIconScale(1.2f)
.setTextSize(QMUIDisplayHelper.sp2px(getContext(), 13), QMUIDisplayHelper.sp2px(getContext(), 15))
.setDynamicChangeIconColor(false);
QMUITab component = builder
@@ -110,10 +110,8 @@ public class QDNotchHelperFragment extends BaseFragment {
}
private void initTabs() {
int normalColor = QMUIResHelper.getAttrColor(getContext(), R.attr.qmui_config_color_gray_6);
int selectColor = QMUIResHelper.getAttrColor(getContext(), R.attr.qmui_config_color_blue);
QMUITabBuilder builder = mTabSegment.tabBuilder();
builder.setColor(normalColor, selectColor)
builder.setColorAttr(R.attr.qmui_config_color_gray_6, R.attr.qmui_config_color_blue)
.setSelectedIconScale(2f)
.setTextSize(QMUIDisplayHelper.sp2px(getContext(), 14), QMUIDisplayHelper.sp2px(getContext(), 16))
.setDynamicChangeIconColor(false);
@@ -37,9 +37,9 @@ public class QDSkinManager {
public static void install(Context context) {
QMUISkinManager skinManager = QMUISkinManager.getInstance(context);
skinManager.addTheme(SKIN_BLUE, R.style.app_skin_blue);
skinManager.addTheme(SKIN_DARK, R.style.app_skin_dark);
skinManager.addTheme(SKIN_WHITE, R.style.app_skin_white);
skinManager.addSkin(SKIN_BLUE, R.style.app_skin_blue);
skinManager.addSkin(SKIN_DARK, R.style.app_skin_dark);
skinManager.addSkin(SKIN_WHITE, R.style.app_skin_white);
}
public static void changeSkin(int index) {
@@ -33,8 +33,6 @@
android:background="?attr/qmui_list_item_bg_with_border_top"
android:textSize="12sp"
app:qmui_tab_icon_position="top"
app:qmui_tab_normal_color="?attr/qmui_config_color_gray_6"
app:qmui_tab_selected_color="?attr/qmui_config_color_blue"
app:qmui_tab_selected_text_size="16sp"
app:qmui_tab_normal_text_size="14sp"
android:layout_width="match_parent"
@@ -38,7 +38,5 @@
android:textSize="12sp"
app:qmui_topDividerHeight="1px"
app:qmui_topDividerColor="?attr/qmui_config_color_separator"
app:qmui_tab_icon_position="top"
app:qmui_skin_background="?attr/app_skin_tab_bar_bg_color"
app:qmui_skin_separator_top="?attr/qmui_config_color_separator"/>
app:qmui_tab_icon_position="top"/>
</com.qmuiteam.qmui.widget.QMUIWindowInsetLayout>
@@ -39,10 +39,8 @@
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@color/qmui_config_color_white"
app:qmui_topDividerHeight="10px"
app:qmui_topDividerColor="?attr/qmui_config_color_separator"
app:qmui_skin_background="?attr/app_skin_tab_bar_bg_color"
app:qmui_skin_separator_top="?attr/qmui_config_color_separator" />
app:qmui_topDividerHeight="1px"
app:qmui_topDividerColor="?attr/qmui_config_color_separator"/>
</LinearLayout>
-67
View File
@@ -1,67 +0,0 @@
<?xml version="1.0" encoding="utf-8"?><!--
Tencent is pleased to support the open source community by making QMUI_Android available.
Copyright (C) 2017-2018 THL A29 Limited, a Tencent company. All rights reserved.
Licensed under the MIT License (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://opensource.org/licenses/MIT
Unless required by applicable law or agreed to in writing, software distributed under the License is
distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied. See the License for the specific language governing permissions and
limitations under the License.
-->
<resources>
<!-- skin attr define-->
<attr name="app_skin_primary_bg" format="color|reference"/>
<attr name="app_skin_common_background" format="color|reference" />
<attr name="app_skin_s_list_item_bg" format="color|reference" />
<attr name="app_skin_common_img_tint_color" format="color|reference"/>
<attr name="app_skin_home_text_color" format="color|reference"/>
<attr name="app_skin_tab_bar_bg_color" format="color|reference"/>
<style name="app_skin_base" parent="AppTheme">
<item name="app_skin_common_background">@color/qmui_config_color_white</item>
<item name="app_skin_s_list_item_bg">?attr/qmui_s_list_item_bg_with_border_none</item>
<item name="app_skin_common_img_tint_color">?attr/qmui_config_color_blue</item>
<item name="app_skin_home_text_color">?attr/qmui_config_color_gray_6</item>
<item name="app_skin_primary_bg">?attr/qmui_config_color_blue</item>
<item name="app_skin_tab_bar_bg_color">@color/qmui_config_color_white</item>
<item name="qmui_topbar_bg_color">?attr/app_skin_primary_bg</item>
</style>
<!-- blue skin -->
<style name="app_skin_blue" parent="app_skin_base">
</style>
<!-- dark skin -->
<style name="app_skin_dark" parent="app_skin_base">
<item name="qmui_config_color_separator">@color/qmui_config_color_50_white</item>
<item name="app_skin_primary_bg">@color/qmui_config_color_pure_black</item>
<item name="app_skin_common_background">@color/qmui_config_color_gray_1</item>
<item name="app_skin_tab_bar_bg_color">@color/qmui_config_color_pure_black</item>
<item name="app_skin_s_list_item_bg">@drawable/list_item_bg_with_border_none_dark</item>
<item name="app_skin_common_img_tint_color">@color/qmui_config_color_white</item>
<item name="app_skin_home_text_color">?attr/qmui_config_color_gray_8</item>
</style>
<!-- white skin -->
<style name="app_skin_white" parent="app_skin_base">
<item name="qmui_topbar_title_color">@color/qmui_config_color_pure_black</item>
<item name="qmui_topbar_subtitle_color">@color/qmui_config_color_gray_3</item>
<item name="qmui_topbar_text_btn_color_state_list">@color/qmui_config_color_pure_black</item>
<item name="qmui_topbar_image_tint_color">@color/qmui_config_color_pure_black</item>
<item name="app_skin_primary_bg">@color/qmui_config_color_white</item>
<item name="app_skin_common_img_tint_color">@color/qmui_config_color_pure_black</item>
</style>
</resources>
-30
View File
@@ -15,36 +15,6 @@
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AppTheme" parent="QMUI.Compat.NoActionBar">
<!-- 配置Android提供的theme -->
<item name="android:textAppearanceListItemSmall">@style/QDTextAppearanceListItemSmall</item>
<item name="android:textAppearanceListItem">@style/QDtextAppearanceListItem</item>
<item name="android:listPreferredItemHeight">?attr/qmui_list_item_height_higher</item>
<item name="android:listPreferredItemHeightSmall">?attr/qmui_list_item_height</item>
<!-- 配置qmui提供的theme -->
<item name="qmui_config_color_blue">@color/app_color_blue</item>
<item name="qmui_round_btn_bg_color">@color/s_btn_blue_bg</item>
<item name="qmui_round_btn_border_color">@color/s_btn_blue_border</item>
<item name="qmui_round_btn_text_color">@color/s_btn_blue_text</item>
<item name="qmui_content_spacing_horizontal">20dp</item>
<item name="qmui_content_padding_horizontal">@dimen/qmui_content_spacing_horizontal</item>
<item name="qmui_topbar_bg_color">?attr/app_primary_color</item>
<item name="qmui_topbar_separator_color">?attr/qmui_config_color_separator</item>
<item name="qmui_topbar_title_color">@color/qmui_config_color_white</item>
<item name="qmui_topbar_subtitle_color">@color/qmui_config_color_white</item>
<item name="qmui_topbar_text_btn_color_state_list">@color/s_topbar_btn_color</item>
<item name="qmui_topbar_image_tint_color">@color/qmui_config_color_white</item>
<item name="QMUITopBarStyle">@style/QDTopBar</item>
<!-- 配置app自己的theme -->
<item name="app_primary_color">?attr/qmui_config_color_blue</item>
<item name="app_content_bg_color">@color/qmui_config_color_white</item>
</style>
<style name="QDtextAppearanceListItem">
<item name="android:textColor">?attr/qmui_config_color_black</item>
<item name="android:textSize">18sp</item>
+94
View File
@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="utf-8"?><!--
Tencent is pleased to support the open source community by making QMUI_Android available.
Copyright (C) 2017-2018 THL A29 Limited, a Tencent company. All rights reserved.
Licensed under the MIT License (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://opensource.org/licenses/MIT
Unless required by applicable law or agreed to in writing, software distributed under the License is
distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied. See the License for the specific language governing permissions and
limitations under the License.
-->
<resources>
<!-- skin attr define-->
<attr name="app_skin_common_background" format="color|reference" />
<attr name="app_skin_s_list_item_bg" format="color|reference" />
<attr name="app_skin_common_img_tint_color" format="color|reference"/>
<attr name="app_skin_home_text_color" format="color|reference"/>
<style name="AppTheme" parent="QMUI.Compat.NoActionBar">
<!-- 配置Android提供的theme -->
<item name="android:textAppearanceListItemSmall">@style/QDTextAppearanceListItemSmall</item>
<item name="android:textAppearanceListItem">@style/QDtextAppearanceListItem</item>
<item name="android:listPreferredItemHeight">?attr/qmui_list_item_height_higher</item>
<item name="android:listPreferredItemHeightSmall">?attr/qmui_list_item_height</item>
<!-- 配置qmui提供的theme -->
<item name="qmui_config_color_blue">@color/app_color_blue</item>
<item name="qmui_round_btn_bg_color">@color/s_btn_blue_bg</item>
<item name="qmui_round_btn_border_color">@color/s_btn_blue_border</item>
<item name="qmui_round_btn_text_color">@color/s_btn_blue_text</item>
<item name="qmui_content_spacing_horizontal">20dp</item>
<item name="qmui_content_padding_horizontal">@dimen/qmui_content_spacing_horizontal</item>
<item name="qmui_topbar_bg">?attr/app_primary_color</item>
<item name="qmui_topbar_separator_color">?attr/qmui_config_color_separator</item>
<item name="qmui_topbar_title_color">@color/qmui_config_color_white</item>
<item name="qmui_topbar_subtitle_color">@color/qmui_config_color_white</item>
<item name="qmui_topbar_text_btn_color_state_list">@color/s_topbar_btn_color</item>
<item name="qmui_topbar_image_tint_color">@color/qmui_config_color_white</item>
<item name="QMUITopBarStyle">@style/QDTopBar</item>
<item name="qmui_tab_bg">@color/qmui_config_color_white</item>
<item name="qmui_tab_separator_color">?attr/qmui_config_color_separator</item>
<item name="qmui_tab_normal_color">?attr/qmui_config_color_gray_6</item>
<item name="qmui_tab_selected_color">?attr/qmui_config_color_blue</item>
<!-- 配置app自己的theme -->
<item name="app_primary_color">?attr/qmui_config_color_blue</item>
<item name="app_content_bg_color">@color/qmui_config_color_white</item>
<item name="app_skin_common_background">@color/qmui_config_color_white</item>
<item name="app_skin_s_list_item_bg">?attr/qmui_s_list_item_bg_with_border_none</item>
<item name="app_skin_common_img_tint_color">?attr/qmui_config_color_blue</item>
<item name="app_skin_home_text_color">?attr/qmui_config_color_gray_6</item>
</style>
<!-- blue skin -->
<style name="app_skin_blue" parent="AppTheme"/>
<!-- dark skin -->
<style name="app_skin_dark" parent="AppTheme">
<item name="qmui_config_color_separator">@color/qmui_config_color_50_white</item>
<item name="qmui_tab_bg">@color/qmui_config_color_pure_black</item>
<item name="qmui_tab_normal_color">?attr/qmui_config_color_gray_3</item>
<item name="qmui_tab_selected_color">@color/qmui_config_color_white</item>
<item name="app_primary_color">@color/qmui_config_color_pure_black</item>
<item name="app_skin_common_background">@color/qmui_config_color_gray_1</item>
<item name="app_skin_s_list_item_bg">@drawable/list_item_bg_with_border_none_dark</item>
<item name="app_skin_common_img_tint_color">@color/qmui_config_color_white</item>
<item name="app_skin_home_text_color">?attr/qmui_config_color_gray_8</item>
</style>
<!-- white skin -->
<style name="app_skin_white" parent="AppTheme">
<item name="qmui_topbar_title_color">@color/qmui_config_color_pure_black</item>
<item name="qmui_topbar_subtitle_color">@color/qmui_config_color_gray_3</item>
<item name="qmui_topbar_text_btn_color_state_list">@color/qmui_config_color_pure_black</item>
<item name="qmui_topbar_image_tint_color">@color/qmui_config_color_pure_black</item>
<item name="qmui_tab_normal_color">?attr/qmui_config_color_gray_5</item>
<item name="qmui_tab_selected_color">@color/qmui_config_color_pure_black</item>
<item name="app_primary_color">@color/qmui_config_color_white</item>
<item name="app_skin_common_img_tint_color">@color/qmui_config_color_pure_black</item>
</style>
</resources>