带有增加与减少按钮的数量选择控件QuantityView

2024-09-04 18:08

本文主要是介绍带有增加与减少按钮的数量选择控件QuantityView,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

带有增加与减少按钮的数量选择控件



用法:
<me.himanshusoni.quantityview.QuantityView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/quantityView_default"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    app:qv_quantity="10" />

自定义
属性:
Xml代码   收藏代码
  1. app:qv_addButtonBackground="color|drawable"  
  2. app:qv_addButtonText="string"  
  3. app:qv_addButtonTextColor="color"  
  4. app:qv_removeButtonBackground="color|drawable"  
  5. app:qv_removeButtonText="string"  
  6. app:qv_removeButtonTextColor="color"  
  7. app:qv_quantityBackground="color|drawable"  
  8. app:qv_quantityTextColor="color"  
  9. app:qv_quantity="integer"  
  10. app:qv_quantityPadding="dimension"  
  11. app:qv_maxQuantity="integer"  
  12. app:qv_minQuantity="integer"  



Java代码   收藏代码
  1. import android.annotation.TargetApi;  
  2. import android.content.Context;  
  3. import android.content.DialogInterface;  
  4. import android.content.res.TypedArray;  
  5. import android.graphics.Color;  
  6. import android.graphics.drawable.Drawable;  
  7. import android.os.Build;  
  8. import android.support.v4.content.ContextCompat;  
  9. import android.support.v7.app.AlertDialog;  
  10. import android.util.AttributeSet;  
  11. import android.view.Gravity;  
  12. import android.view.LayoutInflater;  
  13. import android.view.View;  
  14. import android.widget.Button;  
  15. import android.widget.EditText;  
  16. import android.widget.LinearLayout;  
  17. import android.widget.TextView;  
  18.   
  19. /** 
  20.  * Quantity view to add and remove quantities 
  21.  */  
  22. public class QuantityView extends LinearLayout implements View.OnClickListener {  
  23.   
  24.     private Drawable quantityBackground, addButtonBackground, removeButtonBackground;  
  25.   
  26.     private String addButtonText, removeButtonText;  
  27.   
  28.     private int quantity, maxQuantity, minQuantity;  
  29.     private int quantityPadding;  
  30.   
  31.     private int quantityTextColor, addButtonTextColor, removeButtonTextColor;  
  32.   
  33.     private Button mButtonAdd, mButtonRemove;  
  34.     private TextView mTextViewQuantity;  
  35.   
  36.     public interface OnQuantityChangeListener {  
  37.         void onQuantityChanged(int newQuantity, boolean programmatically);  
  38.   
  39.         void onLimitReached();  
  40.     }  
  41.   
  42.     private OnQuantityChangeListener onQuantityChangeListener;  
  43.   
  44.     public QuantityView(Context context) {  
  45.         super(context);  
  46.         init(null0);  
  47.     }  
  48.   
  49.     public QuantityView(Context context, AttributeSet attrs) {  
  50.         super(context, attrs);  
  51.         init(attrs, 0);  
  52.     }  
  53.   
  54.     public QuantityView(Context context, AttributeSet attrs, int defStyle) {  
  55.         super(context, attrs, defStyle);  
  56.         init(attrs, defStyle);  
  57.     }  
  58.   
  59.     @TargetApi(Build.VERSION_CODES.JELLY_BEAN)  
  60.     private void init(AttributeSet attrs, int defStyle) {  
  61.         final TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.QuantityView, defStyle, 0);  
  62.   
  63.         addButtonText = getResources().getString(R.string.qv_add);  
  64.         if (a.hasValue(R.styleable.QuantityView_qv_addButtonText)) {  
  65.             addButtonText = a.getString(R.styleable.QuantityView_qv_addButtonText);  
  66.         }  
  67.         addButtonBackground = ContextCompat.getDrawable(getContext(), R.drawable.qv_btn_selector);  
  68.         if (a.hasValue(R.styleable.QuantityView_qv_addButtonBackground)) {  
  69.             addButtonBackground = a.getDrawable(R.styleable.QuantityView_qv_addButtonBackground);  
  70.         }  
  71.         addButtonTextColor = a.getColor(R.styleable.QuantityView_qv_addButtonTextColor, Color.BLACK);  
  72.   
  73.         removeButtonText = getResources().getString(R.string.qv_remove);  
  74.         if (a.hasValue(R.styleable.QuantityView_qv_removeButtonText)) {  
  75.             removeButtonText = a.getString(R.styleable.QuantityView_qv_removeButtonText);  
  76.         }  
  77.         removeButtonBackground = ContextCompat.getDrawable(getContext(), R.drawable.qv_btn_selector);  
  78.         if (a.hasValue(R.styleable.QuantityView_qv_removeButtonBackground)) {  
  79.             removeButtonBackground = a.getDrawable(R.styleable.QuantityView_qv_removeButtonBackground);  
  80.         }  
  81.         removeButtonTextColor = a.getColor(R.styleable.QuantityView_qv_removeButtonTextColor, Color.BLACK);  
  82.   
  83.         quantity = a.getInt(R.styleable.QuantityView_qv_quantity, 0);  
  84.         maxQuantity = a.getInt(R.styleable.QuantityView_qv_maxQuantity, Integer.MAX_VALUE);  
  85.         minQuantity = a.getInt(R.styleable.QuantityView_qv_minQuantity, 0);  
  86.   
  87.         quantityPadding = (int) a.getDimension(R.styleable.QuantityView_qv_quantityPadding, pxFromDp(24));  
  88.         quantityTextColor = a.getColor(R.styleable.QuantityView_qv_quantityTextColor, Color.BLACK);  
  89.         quantityBackground = ContextCompat.getDrawable(getContext(), R.drawable.qv_bg_selector);  
  90.         if (a.hasValue(R.styleable.QuantityView_qv_quantityBackground)) {  
  91.             quantityBackground = a.getDrawable(R.styleable.QuantityView_qv_quantityBackground);  
  92.         }  
  93.   
  94.         a.recycle();  
  95.         int dp10 = pxFromDp(10);  
  96.   
  97.         mButtonAdd = new Button(getContext());  
  98.         mButtonAdd.setGravity(Gravity.CENTER);  
  99.         mButtonAdd.setPadding(dp10, dp10, dp10, dp10);  
  100.         mButtonAdd.setMinimumHeight(0);  
  101.         mButtonAdd.setMinimumWidth(0);  
  102.         mButtonAdd.setMinHeight(0);  
  103.         mButtonAdd.setMinWidth(0);  
  104.         setAddButtonBackground(addButtonBackground);  
  105.         setAddButtonText(addButtonText);  
  106.         setAddButtonTextColor(addButtonTextColor);  
  107.   
  108.         mButtonRemove = new Button(getContext());  
  109.         mButtonRemove.setGravity(Gravity.CENTER);  
  110.         mButtonRemove.setPadding(dp10, dp10, dp10, dp10);  
  111.         mButtonRemove.setMinimumHeight(0);  
  112.         mButtonRemove.setMinimumWidth(0);  
  113.         mButtonRemove.setMinHeight(0);  
  114.         mButtonRemove.setMinWidth(0);  
  115.         setRemoveButtonBackground(removeButtonBackground);  
  116.         setRemoveButtonText(removeButtonText);  
  117.         setRemoveButtonTextColor(removeButtonTextColor);  
  118.   
  119.         mTextViewQuantity = new TextView(getContext());  
  120.         mTextViewQuantity.setGravity(Gravity.CENTER);  
  121.         setQuantityTextColor(quantityTextColor);  
  122.         setQuantity(quantity);  
  123.         setQuantityBackground(quantityBackground);  
  124.         setQuantityPadding(quantityPadding);  
  125.   
  126.         setOrientation(HORIZONTAL);  
  127.   
  128.         addView(mButtonRemove, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);  
  129.         addView(mTextViewQuantity, LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);  
  130.         addView(mButtonAdd, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);  
  131.   
  132.         mButtonAdd.setOnClickListener(this);  
  133.         mButtonRemove.setOnClickListener(this);  
  134.         mTextViewQuantity.setOnClickListener(this);  
  135.     }  
  136.   
  137.     @Override  
  138.     public void onClick(View v) {  
  139.         if (v == mButtonAdd) {  
  140.             if (quantity + 1 > maxQuantity) {  
  141.                 if (onQuantityChangeListener != null) onQuantityChangeListener.onLimitReached();  
  142.             } else {  
  143.                 quantity += 1;  
  144.                 mTextViewQuantity.setText(String.valueOf(quantity));  
  145.                 if (onQuantityChangeListener != null)  
  146.                     onQuantityChangeListener.onQuantityChanged(quantity, false);  
  147.             }  
  148.         } else if (v == mButtonRemove) {  
  149.             if (quantity - 1 < minQuantity) {  
  150.                 if (onQuantityChangeListener != null) onQuantityChangeListener.onLimitReached();  
  151.             } else {  
  152.                 quantity -= 1;  
  153.                 mTextViewQuantity.setText(String.valueOf(quantity));  
  154.                 if (onQuantityChangeListener != null)  
  155.                     onQuantityChangeListener.onQuantityChanged(quantity, false);  
  156.             }  
  157.         } else if (v == mTextViewQuantity) {  
  158.             AlertDialog.Builder builder = new AlertDialog.Builder(getContext());  
  159.             builder.setTitle("Change Quantity");  
  160.   
  161.             View inflate = LayoutInflater.from(getContext()).inflate(R.layout.qv_dialog_changequantity, nullfalse);  
  162.             final EditText et = (EditText) inflate.findViewById(R.id.qv_et_change_qty);  
  163.             et.setText(String.valueOf(quantity));  
  164.   
  165.             builder.setView(inflate);  
  166.             builder.setPositiveButton("Change"new DialogInterface.OnClickListener() {  
  167.                 @Override  
  168.                 public void onClick(DialogInterface dialog, int which) {  
  169.                     String newQuantity = et.getText().toString();  
  170.                     if (isNumber(newQuantity)) {  
  171.                         int intNewQuantity = Integer.parseInt(newQuantity);  
  172.                         setQuantity(intNewQuantity);  
  173.                     }  
  174.                 }  
  175.             }).setNegativeButton("Cancel"null);  
  176.             builder.show();  
  177.         }  
  178.     }  
  179.   
  180.   
  181.     public OnQuantityChangeListener getOnQuantityChangeListener() {  
  182.         return onQuantityChangeListener;  
  183.     }  
  184.   
  185.     public void setOnQuantityChangeListener(OnQuantityChangeListener onQuantityChangeListener) {  
  186.         this.onQuantityChangeListener = onQuantityChangeListener;  
  187.     }  
  188.   
  189.     public Drawable getQuantityBackground() {  
  190.         return quantityBackground;  
  191.     }  
  192.   
  193.     public void setQuantityBackground(Drawable quantityBackground) {  
  194.         this.quantityBackground = quantityBackground;  
  195.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {  
  196.             mTextViewQuantity.setBackground(quantityBackground);  
  197.         } else {  
  198.             mTextViewQuantity.setBackgroundDrawable(quantityBackground);  
  199.         }  
  200.     }  
  201.   
  202.     public Drawable getAddButtonBackground() {  
  203.         return addButtonBackground;  
  204.     }  
  205.   
  206.     public void setAddButtonBackground(Drawable addButtonBackground) {  
  207.         this.addButtonBackground = addButtonBackground;  
  208.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {  
  209.             mButtonAdd.setBackground(addButtonBackground);  
  210.         } else {  
  211.             mButtonAdd.setBackgroundDrawable(addButtonBackground);  
  212.         }  
  213.     }  
  214.   
  215.     public Drawable getRemoveButtonBackground() {  
  216.         return removeButtonBackground;  
  217.     }  
  218.   
  219.     public void setRemoveButtonBackground(Drawable removeButtonBackground) {  
  220.         this.removeButtonBackground = removeButtonBackground;  
  221.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {  
  222.             mButtonRemove.setBackground(removeButtonBackground);  
  223.         } else {  
  224.             mButtonRemove.setBackgroundDrawable(removeButtonBackground);  
  225.         }  
  226.     }  
  227.   
  228.     public String getAddButtonText() {  
  229.         return addButtonText;  
  230.     }  
  231.   
  232.     public void setAddButtonText(String addButtonText) {  
  233.         this.addButtonText = addButtonText;  
  234.         mButtonAdd.setText(addButtonText);  
  235.     }  
  236.   
  237.     public String getRemoveButtonText() {  
  238.         return removeButtonText;  
  239.     }  
  240.   
  241.     public void setRemoveButtonText(String removeButtonText) {  
  242.         this.removeButtonText = removeButtonText;  
  243.         mButtonRemove.setText(removeButtonText);  
  244.     }  
  245.   
  246.     public int getQuantity() {  
  247.         return quantity;  
  248.     }  
  249.   
  250.     public void setQuantity(int quantity) {  
  251.         boolean limitReached = false;  
  252.   
  253.         if (quantity > maxQuantity) {  
  254.             quantity = maxQuantity;  
  255.             limitReached = true;  
  256.             if (onQuantityChangeListener != null) onQuantityChangeListener.onLimitReached();  
  257.         }  
  258.         if (quantity < minQuantity) {  
  259.             quantity = minQuantity;  
  260.             limitReached = true;  
  261.             if (onQuantityChangeListener != null) onQuantityChangeListener.onLimitReached();  
  262.         }  
  263.   
  264.   
  265.         if (!limitReached && onQuantityChangeListener != null)  
  266.             onQuantityChangeListener.onQuantityChanged(quantity, true);  
  267.   
  268.         this.quantity = quantity;  
  269.         mTextViewQuantity.setText(String.valueOf(this.quantity));  
  270.     }  
  271.   
  272.     public int getMaxQuantity() {  
  273.         return maxQuantity;  
  274.     }  
  275.   
  276.     public void setMaxQuantity(int maxQuantity) {  
  277.         this.maxQuantity = maxQuantity;  
  278.     }  
  279.   
  280.     public int getMinQuantity() {  
  281.         return minQuantity;  
  282.     }  
  283.   
  284.     public void setMinQuantity(int minQuantity) {  
  285.         this.minQuantity = minQuantity;  
  286.     }  
  287.   
  288.     public int getQuantityPadding() {  
  289.         return quantityPadding;  
  290.     }  
  291.   
  292.     public void setQuantityPadding(int quantityPadding) {  
  293.         this.quantityPadding = quantityPadding;  
  294.         mTextViewQuantity.setPadding(quantityPadding, 0, quantityPadding, 0);  
  295.     }  
  296.   
  297.     public int getQuantityTextColor() {  
  298.         return quantityTextColor;  
  299.     }  
  300.   
  301.     public void setQuantityTextColor(int quantityTextColor) {  
  302.         this.quantityTextColor = quantityTextColor;  
  303.         mTextViewQuantity.setTextColor(quantityTextColor);  
  304.     }  
  305.   
  306.     public void setQuantityTextColorRes(int quantityTextColorRes) {  
  307.         this.quantityTextColor = ContextCompat.getColor(getContext(), quantityTextColorRes);  
  308.         mTextViewQuantity.setTextColor(quantityTextColor);  
  309.     }  
  310.   
  311.     public int getAddButtonTextColor() {  
  312.         return addButtonTextColor;  
  313.     }  
  314.   
  315.     public void setAddButtonTextColor(int addButtonTextColor) {  
  316.         this.addButtonTextColor = addButtonTextColor;  
  317.         mButtonAdd.setTextColor(addButtonTextColor);  
  318.     }  
  319.   
  320.     public void setAddButtonTextColorRes(int addButtonTextColorRes) {  
  321.         this.addButtonTextColor = ContextCompat.getColor(getContext(), addButtonTextColorRes);  
  322.         mButtonAdd.setTextColor(addButtonTextColor);  
  323.     }  
  324.   
  325.     public int getRemoveButtonTextColor() {  
  326.         return removeButtonTextColor;  
  327.     }  
  328.   
  329.     public void setRemoveButtonTextColor(int removeButtonTextColor) {  
  330.         this.removeButtonTextColor = removeButtonTextColor;  
  331.         mButtonRemove.setTextColor(removeButtonTextColor);  
  332.     }  
  333.   
  334.     public void setRemoveButtonTextColorRes(int removeButtonTextColorRes) {  
  335.         this.removeButtonTextColor = ContextCompat.getColor(getContext(), removeButtonTextColorRes);  
  336.         mButtonRemove.setTextColor(removeButtonTextColor);  
  337.     }  
  338.   
  339.     private int dpFromPx(final float px) {  
  340.         return (int) (px / getResources().getDisplayMetrics().density);  
  341.     }  
  342.   
  343.     private int pxFromDp(final float dp) {  
  344.         return (int) (dp * getResources().getDisplayMetrics().density);  
  345.     }  
  346.   
  347.   
  348.     private boolean isNumber(String string) {  
  349.         try {  
  350.             Integer.parseInt(string);  
  351.             return true;  
  352.         } catch (Exception e) {  
  353.             return false;  
  354.         }  
  355.     }  
  356.   
  357.   
  358. }  


qv_dialog_changequantity.xml
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical">  
  6.   
  7.     <EditText  
  8.         android:id="@+id/qv_et_change_qty"  
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:layout_margin="10dp"  
  12.         android:inputType="number" />  
  13.   
  14. </LinearLayout>  


attr.xml
Xml代码   收藏代码
  1. <resources>  
  2.     <declare-styleable name="QuantityView">  
  3.         <attr name="qv_addButtonText" format="string" />  
  4.         <attr name="qv_addButtonBackground" format="color|reference" />  
  5.         <attr name="qv_addButtonTextColor" format="color" />  
  6.   
  7.         <attr name="qv_removeButtonText" format="string" />  
  8.         <attr name="qv_removeButtonBackground" format="color|reference" />  
  9.         <attr name="qv_removeButtonTextColor" format="color" />  
  10.   
  11.         <attr name="qv_quantity" format="integer" />  
  12.         <attr name="qv_quantityBackground" format="color|reference" />  
  13.         <attr name="qv_quantityTextColor" format="color" />  
  14.         <attr name="qv_quantityPadding" format="dimension" />  
  15.   
  16.         <attr name="qv_maxQuantity" format="integer" />  
  17.         <attr name="qv_minQuantity" format="integer" />  
  18.     </declare-styleable>  
  19. </resources>  


string.xml
Xml代码   收藏代码
  1. <string name="qv_add">+</string>  
  2. <string name="qv_remove">-</string>  


drawable:
qv_bg_selector.xml
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <item android:state_pressed="true">  
  4.         <shape android:shape="rectangle">  
  5.             <solid android:color="#ddd" />  
  6.         </shape>  
  7.     </item>  
  8.     <item android:state_selected="true">  
  9.         <shape android:shape="rectangle">  
  10.             <solid android:color="#ddd" />  
  11.         </shape>  
  12.     </item>  
  13.     <item>  
  14.         <shape android:shape="rectangle">  
  15.             <solid android:color="#eee" />  
  16.         </shape>  
  17.     </item>  
  18.   
  19. </selector>  


qv_btn_selector.xml
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <item android:state_pressed="true">  
  4.         <shape android:shape="rectangle">  
  5.             <solid android:color="#ccc" />  
  6.         </shape>  
  7.     </item>  
  8.     <item android:state_selected="true">  
  9.         <shape android:shape="rectangle">  
  10.             <solid android:color="#ccc" />  
  11.         </shape>  
  12.     </item>  
  13.     <item>  
  14.         <shape android:shape="rectangle">  
  15.             <solid android:color="#ddd" />  
  16.         </shape>  
  17.     </item>  
  18.   
  19. </selector>  
  • 查看图片附件

这篇关于带有增加与减少按钮的数量选择控件QuantityView的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136650

相关文章

如何选择适合孤独症兄妹的学校?

在探索适合孤独症儿童教育的道路上,每一位家长都面临着前所未有的挑战与抉择。当这份责任落在拥有孤独症兄妹的家庭肩上时,选择一所能够同时满足两个孩子特殊需求的学校,更显得尤为关键。本文将探讨如何为这样的家庭做出明智的选择,并介绍星贝育园自闭症儿童寄宿制学校作为一个值得考虑的选项。 理解孤独症儿童的独特性 孤独症,这一复杂的神经发育障碍,影响着儿童的社交互动、沟通能力以及行为模式。对于拥有孤独症兄

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

如何选择SDR无线图传方案

在开源软件定义无线电(SDR)领域,有几个项目提供了无线图传的解决方案。以下是一些开源SDR无线图传方案: 1. **OpenHD**:这是一个远程高清数字图像传输的开源解决方案,它使用SDR技术来实现高清视频的无线传输。OpenHD项目提供了一个完整的工具链,包括发射器和接收器的硬件设计以及相应的软件。 2. **USRP(Universal Software Radio Periphera

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

为什么现在很多人愿意选择做债务重组?债重组真的就这么好吗?

债务重组,起初作为面向优质企业客户的定制化大额融资策略,以其高效周期著称,一个月便显成效。然而,随着时代的车轮滚滚向前,它已悄然转变为负债累累、深陷网贷泥潭者的救赎之道。在此路径下,个人可先借助专业机构暂代月供,经一段时间养护征信之后,转向银行获取低成本贷款,用以替换高昂网贷,实现利息减负与成本优化的双重目标。 尽管债务重组的代价不菲,远超传统贷款成本,但其吸引力依旧强劲,背后逻辑深刻。其一