diff --git a/entry/src/main/java/com/kongzue/stacklabel/slice/MainAbilitySlice.java b/entry/src/main/java/com/kongzue/stacklabel/slice/MainAbilitySlice.java index 0b9c55f35cf8160a8e11c6b396b1ebcee37968a9..cfce81d88bf58f377afdd3430a2f87a3cc612379 100644 --- a/entry/src/main/java/com/kongzue/stacklabel/slice/MainAbilitySlice.java +++ b/entry/src/main/java/com/kongzue/stacklabel/slice/MainAbilitySlice.java @@ -16,7 +16,6 @@ package com.kongzue.stacklabel.slice; import com.kongzue.stacklabel.ResourceTable; import com.kongzue.stacklabelview.StackLabel; -import com.kongzue.stacklabelview.interfaces.OnLabelClickListener; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.colors.RgbColor; @@ -31,13 +30,15 @@ import java.util.ArrayList; import java.util.List; public class MainAbilitySlice extends AbilitySlice { - private static HiLogLabel hiLogLabel = new HiLogLabel(HiLog.LOG_APP, 0x222, "my_app"); + private static final HiLogLabel HILOGLABEL = new HiLogLabel(HiLog.LOG_APP, 0x222, "my_app"); private StackLabel stackLabelView; private Switch switchDelete; private TextField editMaxNum; private Switch switchSelect; private TextField editAdd; private Button btnAdd; + private Text deleteText; + private Text selectText; private List labels = new ArrayList<>(); @@ -52,8 +53,8 @@ public class MainAbilitySlice extends AbilitySlice { switchSelect = (Switch) findComponentById(ResourceTable.Id_switchSelect); editAdd = (TextField) findComponentById(ResourceTable.Id_edit_add); btnAdd = (Button) findComponentById(ResourceTable.Id_btn_add); - Text delete_text = (Text) findComponentById(ResourceTable.Id_delete_text); - Text select_text = (Text) findComponentById(ResourceTable.Id_select_text); + deleteText = (Text) findComponentById(ResourceTable.Id_delete_text); + selectText = (Text) findComponentById(ResourceTable.Id_select_text); labels = new ArrayList<>(); labels.add("花哪儿记账"); labels.add("给未来写封信"); @@ -68,95 +69,77 @@ public class MainAbilitySlice extends AbilitySlice { stackLabelView.setLabels(labels); - stackLabelView.setOnLabelClickListener(new OnLabelClickListener() { - @Override - public void onClick(int index, Component v, String s) { - if (switchDelete.isChecked()) { - labels.remove(index); - stackLabelView.setLabels(labels); - } else { - Toast.show(MainAbilitySlice.this, "点击了:" + s); - if (stackLabelView.isSelectMode()) { - for (int i : stackLabelView.getSelectIndexList()) { - HiLog.info(hiLogLabel, ">>>", "select: " + i); - } + setListener(); + setListener2(); + + setCursorElement(); + initThumbElement(); + } + + private void setListener() { + stackLabelView.setOnLabelClickListener((index, v, s) -> { + if (switchDelete.isChecked()) { + labels.remove(index); + stackLabelView.setLabels(labels); + } else { + Toast.show(MainAbilitySlice.this, "点击了:" + s); + if (stackLabelView.isSelectMode()) { + for (int i1 : stackLabelView.getSelectIndexList()) { + HiLog.info(HILOGLABEL, ">>>", "select: " + i1); } } } }); - delete_text.setClickedListener(new Component.ClickedListener() { - @Override - public void onClick(Component component) { - switchDelete.setCheckedStateChangedListener(new AbsButton.CheckedStateChangedListener() { - @Override - public void onCheckedChanged(AbsButton absButton, boolean b) { - stackLabelView.setDeleteButton(b); - } - }); - switchDelete.setChecked(!switchDelete.isChecked()); - } + deleteText.setClickedListener(component -> { + switchDelete.setCheckedStateChangedListener((absButton, b) -> stackLabelView.setDeleteButton(b)); + switchDelete.setChecked(!switchDelete.isChecked()); }); - switchDelete.setCheckedStateChangedListener(new AbsButton.CheckedStateChangedListener() { - @Override - public void onCheckedChanged(AbsButton absButton, boolean b) { - stackLabelView.setDeleteButton(b); - } - }); - select_text.setClickedListener(new Component.ClickedListener() { - @Override - public void onClick(Component component) { - switchSelect.setCheckedStateChangedListener(new AbsButton.CheckedStateChangedListener() { - @Override - public void onCheckedChanged(AbsButton absButton, boolean b) { - List selectLabels = new ArrayList<>(); - selectLabels.add("Ohos"); - selectLabels.add("Cutisan"); - selectLabels.add("密码键盘"); - stackLabelView.setSelectMode(b, selectLabels); - } - }); - switchSelect.setChecked(!switchSelect.isChecked()); - } - }); - switchSelect.setCheckedStateChangedListener(new AbsButton.CheckedStateChangedListener() { - @Override - public void onCheckedChanged(AbsButton absButton, boolean b) { - List selectLabels = new ArrayList<>(); - selectLabels.add("Ohos"); - selectLabels.add("Cutisan"); - selectLabels.add("密码键盘"); - stackLabelView.setSelectMode(b, selectLabels); - } + switchDelete.setCheckedStateChangedListener((absButton, b) -> stackLabelView.setDeleteButton(b)); + selectText.setClickedListener(component -> switchSelect.setChecked(!switchSelect.isChecked())); + switchSelect.setCheckedStateChangedListener((absButton, b) -> { + List selectLabels = new ArrayList<>(); + selectLabels.add("Ohos"); + selectLabels.add("Cutisan"); + selectLabels.add("密码键盘"); + stackLabelView.setSelectMode(b, selectLabels); }); + } - editMaxNum.addTextObserver(new Text.TextObserver() { - @Override - public void onTextUpdated(String text, int start, int before, int count) { - StringBuilder builder = new StringBuilder(); - for (int index = 0; index < text.length(); index++) { - String result = text.substring(index, index + 1); - try { - Integer.parseInt(result); - builder.append(result); - } catch (NumberFormatException e) { - text = text.replace(result, ""); - HiLog.info(hiLogLabel, "error-->" + e); - } - } - if (!editMaxNum.getText().equals(text)) { - editMaxNum.setText(text); - } - int num = 0; + private void setListener2() { + editMaxNum.addTextObserver((text, start, before, count) -> { + StringBuilder builder = new StringBuilder(); + for (int index = 0; index < text.length(); index++) { + String result = text.substring(index, index + 1); try { - num = Integer.parseInt(text); + Integer.parseInt(result); + builder.append(result); } catch (NumberFormatException e) { - HiLog.info(hiLogLabel, "error-->" + e); + text = text.replace(result, ""); + HiLog.info(HILOGLABEL, "error-->" + e); } - stackLabelView.setMaxSelectNum(num); } + if (!editMaxNum.getText().equals(text)) { + editMaxNum.setText(text); + } + int num = 0; + try { + num = Integer.parseInt(text); + } catch (NumberFormatException e) { + HiLog.info(HILOGLABEL, "error-->" + e); + } + stackLabelView.setMaxSelectNum(num); }); - // 修改光标颜色 + btnAdd.setClickedListener(component -> { + String s1 = editAdd.getText().trim(); + if (!s1.isEmpty()) { + labels.add(s1); + stackLabelView.setLabels(labels); + } + }); + } + + private void setCursorElement() { // 设置光标颜色 ShapeElement shapeElement = new ShapeElement(); shapeElement.setShape(ShapeElement.LINE); // 设置背景类型 @@ -165,7 +148,6 @@ public class MainAbilitySlice extends AbilitySlice { shapeElement.setStroke(50, RgbColor.fromArgbInt(Color.rgb(255, 0, 0)));// 设置光标高度 editMaxNum.setCursorElement(shapeElement);// 设置光标背景色 - // 修改光标颜色 // 设置光标颜色 ShapeElement shapeElementadd = new ShapeElement(); shapeElementadd.setShape(ShapeElement.LINE); // 设置背景类型 @@ -173,18 +155,9 @@ public class MainAbilitySlice extends AbilitySlice { shapeElementadd.setGradientOrientation(ShapeElement.Orientation.TOP_TO_BOTTOM); // 设置渐变方向 shapeElementadd.setStroke(50, RgbColor.fromArgbInt(Color.rgb(255, 0, 0)));// 设置光标高度 editAdd.setCursorElement(shapeElementadd);// 设置光标背景色 + } - btnAdd.setClickedListener(new Component.ClickedListener() { - @Override - public void onClick(Component component) { - String s = editAdd.getText().trim(); - if (s != null && !s.isEmpty()) { - labels.add(s); - stackLabelView.setLabels(labels); - } - } - }); - + private void initThumbElement() { ShapeElement elementThumbOn = new ShapeElement(); elementThumbOn.setShape(ShapeElement.OVAL); elementThumbOn.setRgbColor(RgbColor.fromArgbInt(0xFFFF4081)); diff --git a/entry/src/ohosTest/java/com/kongzue/stacklabel/ExampleOhosTest.java b/entry/src/ohosTest/java/com/kongzue/stacklabel/ExampleOhosTest.java index b9192f782ca3e6352539a96c25f3bb0f72f0eec9..4b43d5d282563846ed5d13f3425a48d7a856b52b 100644 --- a/entry/src/ohosTest/java/com/kongzue/stacklabel/ExampleOhosTest.java +++ b/entry/src/ohosTest/java/com/kongzue/stacklabel/ExampleOhosTest.java @@ -6,6 +6,7 @@ import org.junit.Test; import static org.junit.Assert.assertEquals; public class ExampleOhosTest { + // 纯UI组件,不涉及单元测试 @Test public void testBundleName() { final String actualBundleName = AbilityDelegatorRegistry.getArguments().getTestBundleName(); diff --git a/entry/src/test/java/com/kongzue/stacklabel/ExampleTest.java b/entry/src/test/java/com/kongzue/stacklabel/ExampleTest.java index 77a2b05cd104fc024f219e767461a38fd5207791..82da55f3fe2873697786edb28046d49b17a2293a 100644 --- a/entry/src/test/java/com/kongzue/stacklabel/ExampleTest.java +++ b/entry/src/test/java/com/kongzue/stacklabel/ExampleTest.java @@ -3,6 +3,7 @@ package com.kongzue.stacklabel; import org.junit.Test; public class ExampleTest { + // 纯UI组件,不涉及单元测试 @Test public void onStart() { } diff --git a/stacklabelview/src/main/java/com/kongzue/stacklabelview/StackLabel.java b/stacklabelview/src/main/java/com/kongzue/stacklabelview/StackLabel.java index d23f74d7bd9d238509d027322bf318704572577a..e1065b3fe5516c2afc7c3f27055c1f1007868455 100644 --- a/stacklabelview/src/main/java/com/kongzue/stacklabelview/StackLabel.java +++ b/stacklabelview/src/main/java/com/kongzue/stacklabelview/StackLabel.java @@ -111,16 +111,21 @@ public class StackLabel extends ComponentContainer implements Component.Estimate minSelectNum = AttrUtils.getIntValueByAttr(attrs, "minSelectNum", minSelectNum); maxLines = AttrUtils.getIntValueByAttr(attrs, "maxLines", minSelectNum); // 加载值 - if (minSelectNum > maxSelectNum && maxSelectNum != 0) minSelectNum = 0; + if (minSelectNum > maxSelectNum && maxSelectNum != 0) { + minSelectNum = 0; + } loadLabelsArray = AttrUtils.getStringValueByAttr(attrs, "loadLabelsArray", loadLabelsArray); - if (selectBackground == -1) selectBackground = ResourceTable.Graphic_rect_label_bkg_select_normal; - if (labelBackground == -1) labelBackground = ResourceTable.Graphic_rect_normal_label_button; + if (selectBackground == -1) { + selectBackground = ResourceTable.Graphic_rect_label_bkg_select_normal; + } + if (labelBackground == -1) { + labelBackground = ResourceTable.Graphic_rect_normal_label_button; + } } catch (Exception e) { HiLog.info(hiLogLabel, "error-->" + e.getMessage()); } - setEstimateSizeListener(this); setArrangeListener(this); } @@ -155,7 +160,7 @@ public class StackLabel extends ComponentContainer implements Component.Estimate if (labels != null && !labels.isEmpty()) { newHeight = 0; if (items != null && !items.isEmpty()) { - int l = 0, t = 0, r = 0, b = 0, lines = 0; + int l1 = 0, t1 = 0, r1 = 0, b1 = 0, lines = 0; for (int i = 0; i < items.size(); i++) { Component item = items.get(i); @@ -170,9 +175,9 @@ public class StackLabel extends ComponentContainer implements Component.Estimate if (childWidth > maxWidth) { childWidth = maxWidth; } - if ((l + childWidth) > maxWidth) { - l = 0; - t = t + childHeight; + if ((l1 + childWidth) > maxWidth) { + l1 = 0; + t1 = t1 + childHeight; lines++; } @@ -180,19 +185,19 @@ public class StackLabel extends ComponentContainer implements Component.Estimate item.setVisibility(HIDE); invalidate(); } else { - r = l + childWidth; + r1 = l1 + childWidth; if (childWidth > maxWidth) { - r = maxWidth; + r1 = maxWidth; } - b = t + childHeight; + b1 = t1 + childHeight; - item.arrange(l, t, r, b); + item.arrange(l1, t1, r1, b1); - l = l + childWidth; + l1 = l1 + childWidth; - newHeight = t + childHeight; + newHeight = t1 + childHeight; } } } @@ -230,8 +235,8 @@ public class StackLabel extends ComponentContainer implements Component.Estimate public StackLabel setLabels(String[] arrays) { labels = new ArrayList<>(); - for (String s : arrays) { - labels.add(s); + for (String s1 : arrays) { + labels.add(s1); } reloadViews(); @@ -267,7 +272,9 @@ public class StackLabel extends ComponentContainer implements Component.Estimate } public StackLabel addLabel(String label) { - if (labels == null) labels = new ArrayList<>(); + if (labels == null) { + labels = new ArrayList<>(); + } labels.add(label); reloadViews(); @@ -281,16 +288,13 @@ public class StackLabel extends ComponentContainer implements Component.Estimate selectIndexs = new ArrayList<>(); for (int i = 0; i < items.size(); i++) { Component item = items.get(i); - String s = labels.get(i); DirectionalLayout boxLabel = (DirectionalLayout) item.findComponentById(ResourceTable.Id_box_label); Text txtLabel = (Text) item.findComponentById(ResourceTable.Id_txt_label); Image imgDelete = (Image) item.findComponentById(ResourceTable.Id_img_delete); - txtLabel.setText(s); txtLabel.setTextColor(new Color(textColor)); txtLabel.setTextSize(textSize); - boxLabel.setPadding(paddingHorizontal, paddingVertical, paddingHorizontal, paddingVertical); ComponentContainer.LayoutConfig p = (ComponentContainer.LayoutConfig) boxLabel.getLayoutConfig(); if (itemMarginHorizontal == 0 && itemMarginVertical == 0) { @@ -299,64 +303,21 @@ public class StackLabel extends ComponentContainer implements Component.Estimate p.setMargins(itemMarginHorizontal, itemMarginVertical, itemMarginHorizontal, itemMarginVertical); } boxLabel.postLayout(); - if (deleteButton) { imgDelete.setVisibility(VISIBLE); } else { imgDelete.setVisibility(HIDE); } - if (deleteButtonImage != -1) { - - } else { + if (deleteButtonImage == -1) { imgDelete.setPixelMap(deleteButtonImage); } boxLabel.setBackground(new ElementScatter(context).parse(labelBackground)); - final int index = i; - boxLabel.setClickedListener(new ClickedListener() { - @Override - public void onClick(Component component) { - if (selectMode) { - for (Component item : items) { - DirectionalLayout boxLabel = (DirectionalLayout) item.findComponentById(ResourceTable.Id_box_label); - Text txtLabel = (Text) item.findComponentById(ResourceTable.Id_txt_label); - boxLabel.setBackground(new ElementScatter(context).parse(labelBackground)); - txtLabel.setTextColor(new Color(textColor)); - txtLabel.setTextSize(textSize); - } - if (selectIndexs.contains(index)) { - if (selectIndexs.size() > minSelectNum) { - int ind = 0; - for (int i = 0; i < selectIndexs.size(); i++) { - if (selectIndexs.get(i) == index) { - ind = i; - break; - } - } - selectIndexs.remove(ind); - } - } else { - if (maxSelectNum == 1) selectIndexs.clear(); - if (maxSelectNum <= 0 || (maxSelectNum > 0 && selectIndexs.size() < maxSelectNum)) { - selectIndexs.add(index); - } - } - for (int index : selectIndexs) { - Component item = items.get(index); - DirectionalLayout boxLabel = (DirectionalLayout) item.findComponentById(ResourceTable.Id_box_label); - Text txtLabel = (Text) item.findComponentById(ResourceTable.Id_txt_label); - boxLabel.setBackground(new ElementScatter(context).parse(selectBackground)); - txtLabel.setTextColor(new Color(selectTextColor)); - } - } - if (onLabelClickListener != null) - onLabelClickListener.onClick(index, component, labels.get(index)); - } - }); + setListener(boxLabel, i); if (whichIsSelected != null) { for (String selectStr : whichIsSelected) { if (s.equals(selectStr)) { - selectIndexs.add(index); + selectIndexs.add(i); boxLabel.setBackground(new ElementScatter(context).parse(selectBackground)); txtLabel.setTextColor(new Color(selectTextColor)); } @@ -367,6 +328,49 @@ public class StackLabel extends ComponentContainer implements Component.Estimate } } + private void setListener(Component boxLabel, int index) { + boxLabel.setClickedListener(component -> { + if (selectMode) { + for (Component item1 : items) { + DirectionalLayout boxLabel1 = (DirectionalLayout) item1.findComponentById(ResourceTable.Id_box_label); + Text txtLabel1 = (Text) item1.findComponentById(ResourceTable.Id_txt_label); + boxLabel1.setBackground(new ElementScatter(context).parse(labelBackground)); + txtLabel1.setTextColor(new Color(textColor)); + txtLabel1.setTextSize(textSize); + } + if (selectIndexs.contains(index)) { + if (selectIndexs.size() > minSelectNum) { + int ind = 0; + for (int i1 = 0; i1 < selectIndexs.size(); i1++) { + if (selectIndexs.get(i1) == index) { + ind = i1; + break; + } + } + selectIndexs.remove(ind); + } + } else { + if (maxSelectNum == 1) { + selectIndexs.clear(); + } + if (maxSelectNum <= 0 || selectIndexs.size() < maxSelectNum) { + selectIndexs.add(index); + } + } + for (int index1 : selectIndexs) { + Component item1 = items.get(index1); + DirectionalLayout boxLabel1 = (DirectionalLayout) item1.findComponentById(ResourceTable.Id_box_label); + Text txtLabel1 = (Text) item1.findComponentById(ResourceTable.Id_txt_label); + boxLabel1.setBackground(new ElementScatter(context).parse(selectBackground)); + txtLabel1.setTextColor(new Color(selectTextColor)); + } + } + if (onLabelClickListener != null) { + onLabelClickListener.onClick(index, component, labels.get(index)); + } + }); + } + public OnLabelClickListener getOnLabelClickListener() { return onLabelClickListener; } @@ -532,5 +536,4 @@ public class StackLabel extends ComponentContainer implements Component.Estimate private void log(Object s) { HiLog.info(hiLogLabel, ">>>", s.toString()); } - } diff --git a/stacklabelview/src/main/java/com/kongzue/stacklabelview/StackLayout.java b/stacklabelview/src/main/java/com/kongzue/stacklabelview/StackLayout.java index d0e80d089b172c32868283119033efc8ce1d68ca..b4f46554e41c7e975c8d7f7f1464cc547449869d 100644 --- a/stacklabelview/src/main/java/com/kongzue/stacklabelview/StackLayout.java +++ b/stacklabelview/src/main/java/com/kongzue/stacklabelview/StackLayout.java @@ -7,6 +7,8 @@ import ohos.agp.components.ComponentContainer; import ohos.agp.render.Canvas; import ohos.agp.window.service.DisplayManager; import ohos.app.Context; +import ohos.hiviewdfx.HiLog; +import ohos.hiviewdfx.HiLogLabel; import java.util.ArrayList; import java.util.List; @@ -20,7 +22,7 @@ import java.util.List; * @since 2019/4/15 01:13 */ public class StackLayout extends ComponentContainer implements Component.DrawTask, Component.EstimateSizeListener, ComponentContainer.ArrangeListener { - + private static HiLogLabel hiLogLabel = new HiLogLabel(HiLog.LOG_APP,0x222,"my_app"); private Context context; private int itemMargin = 0; private int widthSize; @@ -73,6 +75,7 @@ public class StackLayout extends ComponentContainer implements Component.DrawTas // 加载值 itemMargin = AttrUtils.getDimensionValueByAttr(attrs, "itemMargin", itemMargin); } catch (Exception e) { + HiLog.info(hiLogLabel,"error-->"+e.getMessage()); } setEstimateSizeListener(this); @@ -104,7 +107,7 @@ public class StackLayout extends ComponentContainer implements Component.DrawTas newHeight = 0; if (items != null && !items.isEmpty()) { - int l = 0, t = 0, r = 0, b = 0; + int l1 = 0, t1 = 0, r1 = 0, b1 = 0; for (int i = 0; i < items.size(); i++) { Component item = items.get(i); @@ -115,24 +118,24 @@ public class StackLayout extends ComponentContainer implements Component.DrawTas int childWidth = item.getEstimatedWidth(); int childHeight = item.getEstimatedHeight(); - if ((l + childWidth) > maxWidth) { - l = 0; - t = t + childHeight + itemMargin; + if ((l1 + childWidth) > maxWidth) { + l1 = 0; + t1 = t1 + childHeight + itemMargin; } - r = l + childWidth; + r1 = l1 + childWidth; if (childWidth > maxWidth) { - r = maxWidth; + r1 = maxWidth; } - b = t + childHeight; + b1 = t1 + childHeight; - item.arrange(l, t, r, b); + item.arrange(l1, t1, r1, b1); - l = l + childWidth + itemMargin; + l1 = l1 + childWidth + itemMargin; - newHeight = t + childHeight; + newHeight = t1 + childHeight; } } }