【Android】常见控件及使用

news2024/11/13 16:21:52

视图的设置

在这里插入图片描述

控件与布局都继承于视图,因此视图的设置方式对其作用都是一样的,接下来就先讲述视图的不同设置方式

设置视图的宽高

对视图的宽高进行设置,首先确保XML中的宽高属性值为wrap_content,接着打开该页面对应的Java代码,执行以下步骤:

  1. 调用控件对象的getLayoutParams方法,获取该控件的布局参数
  2. 布局参数的width属性表示宽度,height属性表示高度,修改这两个属性值
  3. 调用控件对象的setLayoutParams方法,填入修改后的布局参数使之生效

设置视图的间距

  1. 采用layout_margin属性,它指定了当前视图与周围平级视图之间的距离。包括layout_margin、layout_marginLeft、layout_marginRight、layout_marginTop、layout_marginBottom
  2. 采用padding属性,它指定了当前视图与内部下级视图之间的距离。包括padding、paddingLeft、paddingRight、paddingTop、paddingBottom

设置视图的对齐方式:

  1. 采用layout_gravity属性,它指定了当前视图相对于上级视图的对齐方式
  2. 采用gravity属性,它指定了下级视图相对于当前视图的对齐方式

二者的取值包括:left、right、top、bottom,还可以用竖线连接各取值,例如”left|top“,朝左上角对齐

TextView

  1. 作用:主要用于在界面上显示一些文本信息,默认是居左上角对齐

  2. 设置文本大小的方法:

    • 在Java代码当中使用setTextSize方法,即可指定文本的大小
    • 在XML文件中通过android:textSize指定文本的大小,此时需要指定字号单位

    px:它使手机屏幕的最小显示单位,与设备的显示屏有关

    dp:它是与设备无关的显示单位,只与屏幕的尺寸有关

    sp:它专门用来设置字体的大小,在系统设置中可以调节字体的大小

  3. 设置文本的颜色:

    • 在Java代码中调用setTextColor方法即可设置文本的颜色,集体色值可从Color类取
    • 在XML文件中则通过属性android:textColor指定文本颜色,色值由透明度alpha和RGB三原色(红、绿、蓝)联合定义。色值有八位十六进制数与六位十六进制数两种表达方式,例如八位编码FFEEDDCC中:FF表示透明度(FF表示完全不透明,00表示完全透明)、EEDDCC分别表示三原色的浓度(RGB三色的数值越大,表示颜色越浓,也越亮)

Button

  1. 作用:继承于TextView,是一个按钮,可以写对应的方法,使按下这个按钮从而执行我们想要他执行的操作

  2. 与TextView的区别:

    • Button具有默认的按钮背景,而TextView默认无背景

    • Button的内部文本默认居中对齐,而TextView的内部文本默认靠左对

    • Button会默认将英文字母转成大写,而TextView保持原本的英文大小写

  3. 与TextView相比新增了两个属性

    • textAllCaps属性:它制定了是否将英文字母转成大写,为true代表自动转成大写,为false表示不做大写转换,一般没有声明默认为true
    • onClick属性:它用来接管用户的点击动作,指定了点击按钮时要触发那个方法,但对于现在已经过时,我们一般在Java活动代码里写
  4. 点击事件和长按事件:

    监听器:意思是专门监听控件的动作行为。只有控件发生了指定的动作,监听器才会触发开关去执行对应的代码逻辑

    按钮控件的两种常用的监听器:

    • 点击监听器:通过setOnClickListener方法设置,按钮被按住少于500毫秒时,会触发点击事件
    • 长按监听器:通过setOnLongClickListener方法设置,按钮被按住超过500毫秒时,会触发长按事件
  5. 按钮的禁用与恢复

    不可用按钮:按钮不允许点击,即使点击也无任何反应,同时按钮文字颜色为黑色

    可用按钮:按钮允许点击,点击按钮会触发点击事件,同时按钮文字为正常的黑色

    是否允许点击由enabled属性控制,属性值为true表示允许点击,为false表示不允许点击

  6. 示例:

    主活动的代码:

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            EdgeToEdge.enable(this);
            setContentView(R.layout.activity_main);
            ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
                Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
                v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
                return insets;
            });
    
            Button buttonshort = (Button) findViewById(R.id.Button_short);
            Button buttonlong = (Button) findViewById(R.id.Button_long);
    
            //点击事件
            buttonshort.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this,"你点击了点击事件的按钮", Toast.LENGTH_SHORT).show();
                }
            });
    
            //长按点击事件
            buttonlong.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    Toast.makeText(MainActivity.this, "你长按了这个按钮", Toast.LENGTH_LONG).show();
    
                    return true;
                }
            });
    
            Button buttonopen = (Button) findViewById(R.id.open);
            Button buttonclose = (Button) findViewById(R.id.close);
            Button button3 = (Button) findViewById(R.id.Button_3);
    
            //对按钮3进行打开,使其可以使用
            buttonopen.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (button3.isEnabled() == false) {
                        button3.setEnabled(true);
                    }
                }
            });
    
            //对按钮3进行禁用
            buttonclose.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (button3.isEnabled() == true) {
                        button3.setEnabled(false);
                    }
                }
            });
        }
    }
    

    布局文件代码:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/main"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/Textview"
            android:textColor="#00ff00"
            android:text="This is TextView"/>
    
        <Button
            android:id="@+id/Button_short"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="short"
            android:textAllCaps="false" />
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/Button_long"
            android:text="long"/>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:orientation="horizontal"
            android:layout_height="40sp">
    
    
        <Button
            android:id="@+id/open"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="启动测试按钮" />
    
            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:id="@+id/close"
                android:text="禁用测试按钮"/>
    
        </LinearLayout>
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/Button_3"
            android:enabled="false"
            android:text="Button3"/>
    
    </LinearLayout>
    

    运行之后页面:

    在这里插入图片描述

    都是与屏幕同样的宽度,TextView的文字时靠左对齐,而Button中的文字都是居中对齐,对于short按钮我们设置为android:textAllCaps="false"所以并没有转成大写,按钮3设置为android:enabled="false"一开始是禁用状态,为灰色。注意点击按钮与长按按钮的点击事件代码,长按按钮有返回值。

    当我们长按长按按钮:

    在这里插入图片描述

    会弹出信息,此时Button3仍为禁用状态,接下来按下启动测试按钮,之后按下short按钮:

    在这里插入图片描述

    此时Button3恢复成了可用的按钮,按下short弹出了信息

EditText

  1. 允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理

  2. 属性:

    • android:hint属性:指定了一段提示性的文本
    • android:maxLines属性:指定了EditText的最大行数为两行,这样输入内容超过两行时,文本就会向上滚动,而EditText则不会继续拉伸
  3. 示例:在上面的基础上对于主活动:

    EditText editText = (EditText) findViewById(R.id.Edit);
    button3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String put = editText.getText().toString();
            Toast.makeText(MainActivity.this, put, Toast.LENGTH_SHORT).show();
        }
    });
    

    对于布局文件:

    <EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/Edit"
    android:hint="Type something here"
    android:maxLines="2"/>
    

    界面:

    在这里插入图片描述

    当进行输入,并按下Button3时:

    在这里插入图片描述

ImageView

  1. 作用:放进一个图片

  2. ImageButton是显示图片的图像按钮,但它继承自ImageView,而非继承Button

    • ImageButton与Button的区别:

      • Button既可以显示文本,也可以显示图片,ImageButton只能显示图片不能显示文本
      • ImageButton上的图像可按比例缩放,而Button通过背景设置的图像会拉伸变形
      • Button只能靠背景显示一张图片,而ImageButton可分别在前景和背景显示图片,从而实现两张图片叠加的效果
    • ImageButton与ImageView的区别:

      • ImageButton有默认的按钮背景,ImageView默认无背景
      • ImageButton默认的缩放类型为center,而ImageView默认的缩放类型为fitCenter

      三种图像的居中显示:

      fitCenter:即允许缩小图片,也允许放大图片

      centerInside:只允许缩小图片,不允许放大图标

      center:始终保持原尺寸

      因此,当视图的尺寸小于图片时,fitCenter与centerInside都会相应的进行缩小。

  3. 示例:

    在上面的代码基础上进行添加

    主活动:

    //使按下按钮使图片进行转换
    ImageView imageView = (ImageView) findViewById(R.id.draw1);
    button3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            imageView.setImageResource(R.drawable.draw2);
        }
    });
    //对ImageButton写对应的监听器方法
    ImageButton imageButton = (ImageButton) findViewById(R.id.Image_button);
    imageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(MainActivity.this, "You knock ImageButton", Toast.LENGTH_SHORT).show();
        }
    });
    

    对应布局文件:

    <ImageView
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:id="@+id/draw1"
        android:src="@drawable/draw"/>
    
    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/Image_button"
        android:src="@mipmap/ic_launcher"/>
    

    运行之后初界面:

    在这里插入图片描述

    此时放置了一个图片和一个ImageButton,首先按启动测试按钮使Button3转换成可用状态,再按下Button3按钮,此时第一张图片进行了转换,再按一下第二张图片,此时就弹出对应信息

    运行后界面:

    在这里插入图片描述

ProgressBar

  1. 作用:显示一个进度条,表示我们程序正在加载一些数据

注意:所有的控件都可以通过android:visibility=""进行指定控件的可见属性

visible:在没有声明的时候默认是这种属性,表示控件为可见的

invisible:表示控件不可见,当仍占据着原来的大小和位置

gone:不可见,而且不占用任何的屏幕空间

控件的可见还可以在代码中进行设置

示例:

仍在上面代码进行修改(小编将上面的两个图片放在了一行):所带来的就是一个不停转圈的进度圈

主活动代码:

ProgressBar progressBar = (ProgressBar) findViewById(R.id.progress_bar);
button3.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (progressBar.getVisibility() == View.GONE) {
            progressBar.setVisibility(View.VISIBLE);
        } else {
            progressBar.setVisibility(View.GONE);
        }
    }
});

布局文件的代码:

<ProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:id="@+id/progress_bar"/>

得到的视图:

在这里插入图片描述

进行修改:

主活动(使每按一次,进度条都增加10):

button3.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
       int sum = progressBar.getProgress();
        sum += 10;
        progressBar.setProgress(sum);
    }
});

布局文件:

<ProgressBar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    style="?android:attr/progressBarStyleHorizontal"
    android:max="100"
    android:id="@+id/progress_bar"/>

style=“?android:attr/progressBarStyleHorizontal”:改变了进度条的形状

android:max属性:代表进度条的最大值

此时视图为:

在这里插入图片描述

AlertDialog

  1. 作用:可以在当前的界面弹出一个对话框,这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力,因此一般用于提示一些非常重要的内容或者警告信息

  2. 示例:

    button3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //建立一个dialog实例
            AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
            //设置标题与提示的文字
            dialog.setTitle("This is dialog");
            dialog.setMessage("Something important");
            //按下按钮的反应
            dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
    
                }
            });
            dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
    
                }
            });
            dialog.show();
        }
    });
    

    运行结果,当按下Button3按钮:

    在这里插入图片描述

ProgressDialog

  1. 作用:与上一个类似,不同在于这个会在对话框中显示一个进度条,一般用于表示当前操作比较耗时,让用户耐心等待

  2. 示例:

    button3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
            progressDialog.setTitle("This is progressDialog");
            progressDialog.setMessage("Loading...");
            //这句代码是为了说明这个对话框能否按back键使其退出
            progressDialog.setCancelable(true);
            progressDialog.show();
        }
    });
    

    运行结果,当按下Button按钮:

    在这里插入图片描述

  3. 该控件有些过时,新的办法为ProgressBar加上AlerTDialog的setView方法来实现

    示例:

    先在layout目录下新建一个xml,定义一个progressbar,代码如下:

    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    
        <ProgressBar
            android:id="@+id/progressBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    使用AlerTDialog的setView方法调用这个layout下的进度条就行了,主活动的代码如下:

    AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
    dialog.setTitle("This is dialog");  //设置标题
    dialog.setView(R.layout.progressbar);	//调用layout
    dialog.setMessage("Something important"); //设置内容
    dialog.show();
    

    AlertDialog.Builder 是 Android SDK 中的一个类,它是一个用于构建和显示 AlertDialog 对话框的辅助类。AlertDialog 是一种预定义的对话框,用于向用户显示一些重要的信息,并可能包含一些按钮以供用户选择。

    运行程序如下:

    在这里插入图片描述

  4. 注意:如果progressDialog.setCancelable(false);即不可通过按back按钮使其退出,我们就需要当数据加载完成之后必须要调用progressDialog的dismiss()方法来关闭对话框,否则会一直存在

ScrollView

  1. 名称:滚动视图

  2. 分类:

    • ScrollView:它是垂直方向上的滚动视图;垂直方向滚动时:

      android:layout_width="match_parent"
      android:layout_height="wrap_content"

    • HorizontalScrollView:它是水平方向上的滚动;水平方向滚动时,与上面刚好相反

  3. 示例:

    <HorizontalScrollView
            android:layout_width="match_parent"
            android:layout_height="200dp">
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:orientation="horizontal">
                <View
                    android:layout_width="300dp"
                    android:layout_height="match_parent"
                    android:background="#aaffff"/>
                <View
                    android:layout_width="300dp"
                    android:layout_height="match_parent"
                    android:background="#ffffff00"/>
            </LinearLayout>
        </HorizontalScrollView>
    
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
                <View
                    android:layout_width="match_parent"
                    android:layout_height="300dp"
                    android:background="#00ff00"/>
                <View
                    android:layout_width="match_parent"
                    android:layout_height="300dp"
                    android:background="#ffff00"/>
            </LinearLayout>
        </ScrollView>
    

    运行界面:

    在这里插入图片描述

中间的大方框可以水平方向滚动,下面是垂直方向滚动,每部分都由两个颜色的方块组成

到这里就结束啦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1930610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL第七次作业

Product表内容 字段名 字段描述 数据类型 主键 外键 非空 唯一 自增 Id 产品编号 Int(10) 是 否 是 是 否 Name 产品功能 Varchar(20) 否 否 是 否 否 Function 主要功能 Varchar(50) 否 否 否 否 否 Company 生产厂家 Varchar(20) 否 否 是 否 否 Address 家庭住址 Varchar(20…

VS2022配置Qt环境

文章目录 前言VS2022写Qt的好处下载插件前提条件离线下载在线安装配置VS For Qt 创建项目总结 前言 在许多开发环境中&#xff0c;Visual Studio 2022&#xff08;VS2022&#xff09;和Qt都是非常重要的工具。VS2022是微软开发的一款强大的集成开发环境&#xff08;IDE&#x…

学习面向对象笔记

1. 面向对象三大特性 特性说明例子接口作为方法的标识&#xff0c;只要调用即可&#xff0c;不需要关心接口后是怎样实现的最常见的USB接口&#xff0c;只要插上对应的鼠标、键盘就可以使用&#xff0c;因为他们都是统一使用这个USB接口的继承子类继承父类的功能&#xff0c;子…

React工程化笔记

脚手架可以帮助我们快速的搭建一个项目结构&#xff0c;在我们之前学习 webpack 的过程中&#xff0c;每次都需要配置 webpack.config.js 文件&#xff0c;用于配置我们项目的相关 loader 、plugin&#xff0c;这些操作比较复杂&#xff0c;但是它的重复性很高&#xff0c;而且…

Spring Cloud Eureka快读入门Demo

1.什么是Eureka&#xff1f; Eureka 由 Netflix 开发&#xff0c;是一种基于REST&#xff08;Representational State Transfer&#xff09;的服务&#xff0c;用于定位服务&#xff08;服务注册与发现&#xff09;&#xff0c;以实现中间层服务的负载均衡和故障转移&#xff…

弹性网络回归(Elastic Net Regression)

弹性网络回归&#xff08;Elastic Net Regression&#xff09;的详细理论知识推导 理论背景 弹性网络回归结合了岭回归&#xff08;Ridge Regression&#xff09;和Lasso回归&#xff08;Lasso Regression&#xff09;的优点&#xff0c;通过引入两个正则化参数来实现特征选择…

vue3+TS从0到1手撸后台管理系统

1.路由配置 1.1路由组件的雏形 src\views\home\index.vue&#xff08;以home组件为例&#xff09; 1.2路由配置 1.2.1路由index文件 src\router\index.ts //通过vue-router插件实现模板路由配置 import { createRouter, createWebHashHistory } from vue-router import …

解决jupyter argparse报错

jupyter argparse报错 文章目录 一、jupyter argparse报错 一、jupyter argparse报错 args parser.parse_args()这行代码改为&#xff1a; args parser.parse_args(args[])完整的代码为&#xff1a; import argparseparser argparse.ArgumentParser() parser.add_argumen…

【Dison夏令营 Day 21】用Python编写绘图

绘画 - 在屏幕上绘制线条和形状。单击标记形状的起点&#xff0c;再次单击标记形状的终点。可使用键盘选择不同的形状和颜色。 """Paint, for drawing shapes.Exercises1. Add a color. 2. Complete circle. 3. Complete rectangle. 4. Complete triangle. 5. A…

DICOM CT\MR片子免费在线查看工具;python pydicom包加载查看;mayavi 3d查看

DICOM CT\MR片子免费在线查看工具 参考&#xff1a; https://zhuanlan.zhihu.com/p/668804209 dicom格式&#xff1a; DICOM&#xff08;Digital Imaging and Communications in Medicine&#xff09;是医学数字成像和通信的标准。它定义了医学图像&#xff08;如CT、MRI、X…

MySQL ON DUPLICATE KEY UPDATE影响行数

背景 经常使用 ON DUPLICATE KEY UPDATE 来插入数据或者更新已存在的记录&#xff08;不推荐&#xff0c;如性能问题&#xff09;&#xff0c;今天联调时发现使用到 MySQL 一个 INSERT ... ON DUPLICATE KEY UPDATE 的语法&#xff0c;明明只更新了两条记录&#xff0c;返回的…

JMeter接口测试之文件上传(参数提取与传递)

参考文档&#xff1a; Jmeter接口测试-文件上传&#xff08;全网最详细的教程&#xff09;_jmeter 文件上传-CSDN博客 1、首先通过fiddler抓取文件上传接口&#xff0c;在Raw的tab页中查看默认请求头以及请求参数 如图所示 2、在jmeter中导入抓取的接口&#xff0c;首先需要配…

ENSP中VLAN的设置

VLAN的详细介绍 VLAN&#xff08;Virtual Local Area Network&#xff09;即虚拟局域网&#xff0c;是一种将一个物理的局域网在逻辑上划分成多个广播域的技术。 以下是关于 VLAN 的一些详细介绍&#xff1a; 一、基本概念 1. 作用&#xff1a; - 隔离广播域&#xff1a…

怎样在 PostgreSQL 中优化对多表关联的连接条件选择?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 怎样在 PostgreSQL 中优化对多表关联的连接条件选择一、理解多表关联的基本概念二、选择合适的连接条件…

钡铼Modbus TCP耦合器BL200实现现场设备与SCADA无缝对接

前言 深圳钡铼技术推出的Modbus TCP耦合器为SCADA系统与现场设备之间的连接提供了强大而灵活的解决方案&#xff0c;它不仅简化了设备接入的过程&#xff0c;还提升了数据传输的效率和可靠性&#xff0c;是工业自动化项目中不可或缺的关键设备。本文将从Modbus TC、SCADA的简要…

去除重复字母

题目链接 去除重复字母 题目描述 注意点 s 由小写英文字母组成1 < s.length < 10^4需保证 返回结果的字典序最小&#xff08;要求不能打乱其他字符的相对位置&#xff09; 解答思路 本题与移掉 K 位数字类似&#xff0c;需要注意的是&#xff0c;并不是每个字母都能…

牛客周赛 Round 51 (C++)

目录 A-小红的同余_牛客周赛 Round 51 (nowcoder.com) 思路&#xff1a; 代码&#xff1a; B-小红的三倍数_牛客周赛 Round 51 (nowcoder.com) 思路&#xff1a; 代码&#xff1a; C-小红充电_牛客周赛 Round 51 (nowcoder.com) 思路&#xff1a; 代码&#xff1a; …

css - - - - - 环形倒计时进度条实现

css - - - - - 环形倒计时进度条实现 1. 效果图展示2. 代码展示 1. 效果图展示 2. 代码展示 // html <view class"father"><view class"progress" style"--progress:{{red}}; --last:{{gray}}"></view> </view>// css …

【区块链 + 智慧政务】澳门:智慧城市建设之证书电子化项目 | FISCO BCOS应用案例

2019 年 2 月 27 日&#xff0c;澳门政府设立的澳门科学技术发展基金与微众银行达成合作&#xff0c;通过区块链、人工智能、大数据、 云计算等创新技术&#xff0c;共同推进澳门特区的智慧城市建设与未来型城市发展&#xff0c;提升粤港澳大湾区的科创能力。在澳 门智慧城市建…

从零开始学量化~Ptrade使用教程(六)——盘后定价交易、港股通与债券通用质押式回购

盘后固定价交易 实现科创板、创业板的盘后固定价交易&#xff0c;界面如下显示&#xff1a; 交易 输入科创板或创业板代码&#xff0c;选择委托方向&#xff0c;输入委托价格、委托数量&#xff0c;点击“买入”或“卖出”按钮进行委托。可出现一个委托提示框提示是否继续委托操…