Android开发学习-中级控件

news2024/11/15 0:16:38

Drawable

Android把所有能够显示的图形都抽象为Drawable类(可绘制的)。

这里的图形不止是图片,还包括色块、画板、背景等。
包含图片在内的图形文件放在res目录的各个drawable目录下,其中drawable目录一般保存描述性的XML文件,而图片文件一般放在具体分辨率的drawable目录下。例如:

同尺寸的手机有可能分辨率不同,手机分辨率就高不就低,因为分辨率低了屏幕会有模糊的感觉)。
drawable-ldpi里面存放低分辨率的图片 (如240x320),现在基本没有这样的智能手机了
drawable-mdpi里面存放中等分辨率的图片 (如320x480) ,这样的智能手机已经很少了
drawable-hdp里面存放高分辨率的图片(如480X800),一般对应4英寸~4.5英寸的手机(但不绝对,
drawable-xhdpi里面存放加高分辨率的图片 (如720x1280) ,一般对应5英寸~5.5英寸的手机。drawable-xxhdpi里面存放超高分辨率的图片 (如1080x1920),一般对应6英寸~6.5英寸的手机
drawable-xxxhdpi里面存放超超高分辨率的图片(如1440x2560) ,一般对应7英寸以上的平板电脑
基本上,分辨率每加大一级,宽度和高度就要增加二分之一或三分之一像素。

如果各目录存在同名图片,Android就会根据手机的分辨率分别适配对应文件夹里的图片。

在开发App时,为了兼容不同的手机屏幕,在各目录存放不同分辨率的图片,才能达到最合适的显示效果。例如,在drawable-hdpi放了一张背景图片bg,png (分辨率为480x800),其他目录没放,使用分辨率为480X800的手机查看该App界面没有问题,但是使用分辨率为720x1280的手机查看该App会发现背景图片有点模糊,原因是Android为了让bg,png适配高分辨率的屏幕,强行把bg.png拉伸到了720x1280,拉伸的后果是图片变模糊了。
在XML布局文件中引用图形文件可使用“@drawable/不含扩展名的文件名称”这种形式,如各视图的background属性、ImageView和lmageButton的src属性、TextView和Button四个方向的drawable***系列属性都可以引用图形文件。

形状shape图形

shape图形又称形状图形,它用来描述常见的几何形状,包括矩形、圆角矩形、圆形、椭圆等。用好形状图形可以让App页面不再呆板还可以节省美工不少工作量。
形状图形的定义文件放在drawable目录下,它是以shape标签为根节点的XML描述文件。根节点下定义了6个节点,分别是: size(尺寸)、stroke(描边)、corners (圆角)、solid (填充)、padding (间隔)、gradient(渐变),各节点的属性值主要是长宽、半径、角度以及颜色等。下面是形状图形各个节点及其属性的简要说明。
1. shape (形状)
shape是形状图形文件的根节点,它描述了当前是哪种几何图形。下面是shape节点的常用属性说明。

形状类型说明
rectangle矩形。默认值
oval椭圆。此时corners节点会失效
line直线。此时必须设置stroke节点,不然会报错
ring圆环

代码:

shape_rect_gold.xml
shape_rect_voal.xml 

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

<!--    指定形状内部填充颜色-->
    <solid android:color="#ffdd66"></solid>
<!--    指定形状轮廓与颜色-->
<stroke android:width="1dp" android:color="#aaaaaa"/>
<!--    指定四个圆角的半径-->

    <corners android:radius="10dp"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">


<!--    指定形状内部填充颜色-->
    <solid android:color="#ff66aa"></solid>
<!--    指定形状轮廓与颜色-->
<stroke android:width="1dp" android:color="#aaaaaa"/>
<!--    指定四个圆角的半径-->

</shape>
<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.pshdhx.middleComponent.ShapeActivity">

    <View
        android:id="@+id/view_content"
        android:layout_width="match_parent"
        android:layout_height="300dp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/btn_rect"
            android:layout_width="0dp"
            android:layout_height="100dp"
            android:layout_weight="1"
            android:text="矩形"
            />
        <Button
            android:id="@+id/btn_oval"
            android:layout_width="0dp"
            android:layout_height="100dp"
            android:layout_weight="1"
            android:text="椭圆"
            />
    </LinearLayout>

</LinearLayout>
public class ShapeActivity extends AppCompatActivity implements View.OnClickListener {

    View view;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shape);

        view = findViewById(R.id.view_content);
        view.setBackgroundResource(R.drawable.shape_rect_gold);
        findViewById(R.id.btn_rect).setOnClickListener(this);
        findViewById(R.id.btn_oval).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_rect:
                view.setBackgroundResource(R.drawable.shape_rect_gold);
                break;
            case R.id.btn_oval:
                view.setBackgroundResource(R.drawable.shape_rect_voal);
                break;
        }
    }
}

效果:

九宫格图片-.9图片

将某张图片设置成视图背景时,如果图片尺寸太小,则系统会自动拉伸图片将之填满背景。

可是一旦图片拉的过大,其画面容易变得模糊。

九宫格图片*.9.png可以控制边角处,不会进行拉伸。

上边缘线和左边缘线控制水平和竖直的拉伸效果,将其设置,可以不拉伸边角处。

下边缘线和右边缘线控制文字在显示区域内的效果。

图形状态列表

状态类型的属性名称说明适用的控件
state_pressed是否按下按钮Button
state_checked是否勾选复选框CheckBox、单选按钮RadioButton
state_focused是否获取焦点文本编辑框EditText
state_selected是否选中各控件通用

btn_selector.xml 

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true" android:drawable="@drawable/shape_rect_gold"/>
    <item  android:drawable="@drawable/shape_rect_voal"/>
</selector>
android:background="@drawable/btn_selector"

复选框-checkbox

CompoundButton再xml中,主要使用以下两个属性

        checked:指定勾选状态true/false

        button:指定左侧勾选图标的图形资源,如果不指定,则系统默认。

CompoundButton在Java中主要使用下列4种方法

        setChecked

        setButtonDrawable:设置左侧勾选图标的图形资源

        setOnCheckedChangeListener:监听器

        isChecked

开关按钮-switch

textOn:设置右侧开启时的文本

textOff:设置左侧关闭时的文本

track:设置开关轨道的背景

thumb:设置开关表示的图标

单选按钮组

RadioGroup

RadioButton

文本输入框-EditText

监听文本编辑器

addTextChangedListener

beforeTextChanged:在文本改变之前触发

onTextChanged:在文本改变过程中触发

afterTextChanged:在文本改变之后触发

edit_phone.addTextChangedListener(new HideTextWatcher(edit_phone,11));

private class HideTextWatcher implements TextWatcher{
    private EditText mView;
    private int maxLength;
    public HideTextWatcher(EditText v,int maxLength){
        this.mView = v;
        this.maxLength = maxLength;
    }
}

对话框

提醒对话框-AlertDialog

就是卸载时,带着确认或者是取消的对话框

<Button
        android:id="@+id/btn_alert_dialog"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="alertDialog"
        android:text="点击弹出对话框"/>
    <TextView
        android:id="@+id/tv_result"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
public void alertDialog(View view) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        TextView tv_result = findViewById(R.id.tv_result);
        builder.setTitle("尊敬的用户");
        builder.setMessage("你真的要卸载吗?");
        builder.setPositiveButton("残忍卸载",(dialog,witch)->{
            tv_result.setText("我已残忍卸载");
        });

        builder.setNegativeButton("我再想一下",(dialog,witch)->{
            tv_result.setText("我再想一下吧!");
        });
        AlertDialog alertDialog = builder.create();
        alertDialog.show();
    }

setIcon:设置对话框的标题图标

setNeutralButton:设置中性按钮的信息,包括按钮文本和点击的监听器。

日期对话框-DatePickerDialog

<Button
        android:id="@+id/selectDateDialog"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="selectDateDialog"
        android:text="请选择日期"/>


    <DatePicker
        android:id="@+id/date_picker"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:datePickerMode="spinner"
        android:calendarViewShown="false"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="确定"
        android:onClick="selectDateClick"
        android:id="@+id/btn_ok"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tv_date"/>
public class DatePickerDialogActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener {

    TextView tv_date;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_date_picker_dialog);
        tv_date = findViewById(R.id.tv_date);
    }


    public void selectDateClick(View view) {

        DatePicker date_picker = findViewById(R.id.date_picker);
        String desc = String.format("您选择的日期是%s",date_picker.getYear()+"-"+(date_picker.getMonth()+1)+"-"+date_picker.getDayOfMonth());
        tv_date.setText(desc);

    }

    public void selectDateDialog(View view) {
        DatePickerDialog dialog = new DatePickerDialog(this,this,2090,5,20);
        dialog.show();
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        String desc = String.format("您选择的日期是%s",year+"-"+(month+1)+"-"+dayOfMonth);
        Toast.makeText(this,desc,Toast.LENGTH_LONG).show();
        tv_date.setText(desc);
    }
}

结果:

时间对话框-TimePickerDialog

<Button
        android:id="@+id/selectTimeDialog"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="selectTimeDialog"
        android:text="请选择时间"/>


    <TimePicker
        android:id="@+id/time_picker"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:timePickerMode="spinner"
        />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="确定"
        android:onClick="selectTimeClick"
        android:id="@+id/btn_ok"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tv_time"/>
public class TimePickerActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener {

    TextView tv_time;
    TimePicker time_picker;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_time_picker);
        tv_time = findViewById(R.id.tv_time);
        time_picker = findViewById(R.id.time_picker);
    }

    public void selectTimeDialog(View view) {
        TimePickerDialog dialog = new TimePickerDialog(this,android.R.style.Theme_Holo_Light_Dialog_NoActionBar, this, Calendar.getInstance().get(Calendar.HOUR_OF_DAY),Calendar.getInstance().get(Calendar.MINUTE),true);
        dialog.show();

    }

    @RequiresApi(api = Build.VERSION_CODES.M)
    public void selectTimeClick(View view) {
        String desc = String.format("您选择的时间是%s",time_picker.getHour()+":"+time_picker.getMinute());
        tv_time.setText(desc);
    }

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        String desc = String.format("您选择的时间是%s",hourOfDay+":"+minute);
        tv_time.setText(desc);
    }
}

效果 

 

登录Demo 

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.pshdhx.middleComponent.LoginMainActivity">


    <RadioGroup
        android:id="@+id/rg_login"
        android:layout_width="match_parent"
        android:layout_height="@dimen/item_layout_height"
        android:orientation="horizontal">

        <RadioButton
            android:id="@+id/rb_password"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:checked="true"
            android:text="@string/login_by_password"
            android:textSize="@dimen/common_font_size" />

        <RadioButton
            android:id="@+id/rb_verifycode"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="@string/login_by_verifycode"
            android:textSize="@dimen/common_font_size" />

    </RadioGroup>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/item_layout_height"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="@string/phone_number"
            android:textColor="@color/black"
            android:textSize="@dimen/common_font_size" />
        
        <EditText
            android:id="@+id/et_phone"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:hint="@string/input_phone_number"
            android:inputType="number"
            android:maxLength="11"
            android:textSize="@dimen/common_font_size"
            />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/item_layout_height"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/tv_password"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="@string/login_password"
            android:textColor="@color/black"
            android:textSize="@dimen/common_font_size" />

        <EditText
            android:id="@+id/et_password"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:hint="@string/input_password"
            android:inputType="numberPassword"
            android:maxLength="6"
            android:textSize="@dimen/common_font_size"
            />
        <Button
            android:id="@+id/btn_forgetPassword"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:textSize="@dimen/common_font_size"
            android:text="@string/forget_password"
            android:textColor="@color/black"
            android:background="@color/design_default_color_primary_dark"/>

    </LinearLayout>

    <CheckBox
        android:id="@+id/ck_remember"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/remember_password"
        android:textColor="@color/black"
        android:textSize="@dimen/common_font_size"/>

    <Button
        android:id="@+id/btn_login"
        android:layout_width="match_parent"
        android:layout_height="@dimen/item_layout_height"
        android:text="@string/login"
        android:textColor="@color/black"
        android:textSize="@dimen/common_font_size"/>

</LinearLayout>

 代码文件:

public class LoginMainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener, View.OnClickListener {
    RadioGroup rg_login;
    TextView tv_password;
    EditText et_password;
    EditText et_phone;
    Button btn_forgetPassword;
    Button btn_login;
    CheckBox ck_remember;
    RadioButton rb_password;
    RadioButton rb_verifycode;
    private String mVerifyCode = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login_main);
        rg_login = findViewById(R.id.rg_login);
        btn_login = findViewById(R.id.btn_login);
        rb_password = findViewById(R.id.rb_password);
        rb_verifycode = findViewById(R.id.rb_verifycode);
        tv_password = findViewById(R.id.tv_password);
        et_password = findViewById(R.id.et_password);
        et_phone = findViewById(R.id.et_phone);
        et_phone.addTextChangedListener(new HideTextWatcher(et_phone, 11));
        et_password.addTextChangedListener(new HideTextWatcher(et_password, 6));
        btn_forgetPassword = findViewById(R.id.btn_forgetPassword);
        ck_remember = findViewById(R.id.ck_remember);
        rg_login.setOnCheckedChangeListener(this);
        btn_login.setOnClickListener(this);

        btn_forgetPassword.setOnClickListener(this);
    }

    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        switch (checkedId) {
            case R.id.rb_password:
                tv_password.setText(getString(R.string.login_password));
                et_password.setHint(getString(R.string.input_password));
                btn_forgetPassword.setText(getString(R.string.forget_password));
                ck_remember.setVisibility(View.VISIBLE);
                break;
            case R.id.rb_verifycode:
                tv_password.setText(getString(R.string.verifycode));
                et_password.setHint(getString(R.string.input_verifycode));
                btn_forgetPassword.setText(getString(R.string.get_verifycode));
                ck_remember.setVisibility(View.GONE);
                break;
        }
    }

    @Override
    public void onClick(View v) {
        String phone = et_phone.getText().toString();
        String password = et_password.getText().toString();
        switch (v.getId()) {
            case R.id.btn_forgetPassword:
                if (phone.length() < 11) {
                    Toast.makeText(this, "请输入正确的手机号码", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (rb_password.isChecked()) {
                    Intent intent = new Intent(this, LoginForgetActivity.class);
                    intent.putExtra("phone", phone);
                    startActivityForResult(intent, 8888);
                } else if (rb_verifycode.isChecked()) {
                    mVerifyCode = String.format("%6d", new Random().nextInt(999999));
                    AlertDialog.Builder builder = new AlertDialog.Builder(this);
                    builder.setTitle("请记住验证码");
                    builder.setMessage("手机号" + phone + "本次验证码是" + mVerifyCode + ",请输入验证码");
                    builder.setPositiveButton("好的", null);
                    AlertDialog alertDialog = builder.create();
                    alertDialog.show();
                }
                break;
            case R.id.btn_login:
                if(rb_password.isChecked()){
                    if(!password.equals("111111")){
                        Toast.makeText(this,"请输入正确的密码",Toast.LENGTH_SHORT).show();
                        return ;
                    }
                    loginSuccess();
                }else if(rb_verifycode.isChecked()){
                    if(!mVerifyCode.equals(et_password.getText().toString())){
                        Toast.makeText(this,"请输入正确的验证码",Toast.LENGTH_SHORT).show();
                        return ;
                    }
                    loginSuccess();
                }
                break;

        }
    }

    private void loginSuccess() {
        Toast.makeText(this,"登录成功",Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    }

    private class HideTextWatcher implements TextWatcher {

        private EditText mView;
        private int maxLength;

        public HideTextWatcher(EditText et_phone, int i) {
            this.mView = et_phone;
            this.maxLength = i;
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            if (s.toString().length() == maxLength) {
                ViewUtils.hideOneInputMethod(LoginMainActivity.this, mView);
            }
        }
    }
}

public class ViewUtils {
    public static void hideOneInputMethod(Context context, EditText mView) {
        InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(mView.getWindowToken(), 0);
    }
}

 效果图:

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

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

相关文章

数据中心IP代理是什么?有何优缺点?海外代理IP全解

海外代理IP中&#xff0c;数据中心代理IP是很热门的选择。这些代理服务器为用户分配不属于 ISP&#xff08;互联网服务提供商&#xff09;且来自第三方云服务提供商的 IP 地址&#xff0c;是分配给位于数据中心的服务器的 IP 地址&#xff0c;通常由托管和云公司拥有。 这些 I…

搭建幻兽帕鲁需要什么样的服务器

作为一个开放世界生存制造类游戏《幻兽帕鲁》收获了空前绝后的热度&#xff0c;玩家们在游戏中通过在地图上捕捉收集到的“帕鲁”进行训练&#xff0c;合理利用他们的能力进行战斗&#xff0c;建立自己的家园、开辟新的世界、解锁新的冒险情节&#xff0c;获取更多游戏信息增加…

【JavaEE】UDP协议与TCP协议

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

LabVIEW传感器通用实验平台

LabVIEW传感器通用实验平台 介绍了基于LabVIEW的传感器实验平台的开发。该平台利用LabVIEW图形化编程语言和多参量数据采集卡&#xff0c;提供了一个交互性好、可扩充性强、使用灵活方便的传感器技术实验环境。 系统由硬件和软件两部分组成。硬件部分主要包括多通道数据采集卡…

华为云WAF,开启web网站的专属反爬虫防护罩

背景 从保护原创说起 作为一个原创技术文章分享博主&#xff0c;日常除了Codeing就是总结Codeing中的技术经验。 之前并没有对文章原创性的保护意识&#xff0c;直到在某个非入驻的平台看到了我的文章&#xff0c;才意识到&#xff0c;辛苦码字、为灵感反复试验创作出来的文…

Java学习笔记(十一)——常用类

一、包装类 &#xff08;一&#xff09;包装类和基本数据类型的转换 ​编辑 &#xff08;二&#xff09;包装类型和String类型的相互转换 &#xff08;三&#xff09;Integer类和Character类的常用方法 二、String &#xff08;一&#xff09;创建String对象的两种方式 …

Redis核心技术与实战【学习笔记】 - 11.响应延迟的波动问题及解决方案

在 Redis 的实际应用中&#xff0c;有一个非常严重的问题&#xff0c;就是 Redis 突然变慢了。举个例子&#xff0c;在秒杀场景下&#xff0c;一旦 Redis 变慢了&#xff0c;大量的用户下单请求就会被拖慢&#xff0c;也就是说&#xff0c;用户提交了下单申请&#xff0c;确没有…

【C语言】【力扣】1.两数之和

一、个人思考过程 int* twoSum(int* nums, int numsSize, int target, int* returnSize) {for(int i0;i<numsSize;i){for(int j0;j<numsSize;j){if((nums[i]nums[j]target)&&(i!j)){}}} 完成度&#xff1a;实现对nums[]数组的遍历和两数之和的判断。 问题&…

基于Java SSM框架实现药品销售系统项目【项目源码+论文说明】

基于java的SSM框架实现药品销售系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个药品销售系统 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述药品销…

介绍一款资料管理类浏览器

DT浏览器不同于普通意义上的浏览器&#xff0c;DT的含义就是数据资料的意思&#xff0c;更专注于资料的收集和管理&#xff0c;是一款资料管理类的浏览器&#xff0c;也是一款面向教育、培训、编程、技术和科研等资料收集领域的手机软件&#xff0c;主要有网络搜索、资料收藏&a…

Single-Head ViT;Faster Whisper;Transformer KF;Pick-and-Draw

本文首发于公众号&#xff1a;机器感知 Single-Head ViT&#xff1b;Faster Whisper&#xff1b;Transformer KF&#xff1b;Pick-and-Draw SHViT: Single-Head Vision Transformer with Memory Efficient Macro Design Recently, efficient Vision Transformers have shown …

Docker多节点部署Minio分布式文件系统并测试

文章目录 一、前提准备二、文件配置1. .env2. env/minio.env3. docker-compose-minio.yml 三、测试四、Java测试1. 引入依赖2. 增删改 一、前提准备 准备如下文件夹和文件 ./ ├── docker-compose-minio.yml ├── .env ├── env │ ├── minio.env ├── minio │…

windows安装oracle之后怎么连接使用

目录 1.打开SQl Developer 2.选择JDK 3.登录 4.创建表空间,用户 安装oracle的详细教程 WINDOWS安装Oracle11.2.0.4-CSDN博客 1.打开SQl Developer 找到 SQl Developer 2.选择JDK 根据你安装的oracle版本,因为我的oracle是安装的32位的,所以这里jdk也要选择32位 选择到ja…

熟悉MATLAB 环境

一、问题描述 熟悉MATLAB 环境。 二、实验目的 了解Matlab 的主要功能&#xff0c;熟悉Matlab 命令窗口及文件管理&#xff0c;Matlab 帮助系统。掌握命令行的输入及编辑&#xff0c;用户目录及搜索路径的配置。了解Matlab 数据的特点&#xff0c;熟悉Matlab 变量的命名规则&a…

【JAVA】Long类型返回到前端,精度丢失

一. 问题阐述 20位long类型的数字&#xff0c;从后端接口返回到前端后【四舍五入】 MYSQL端 &#xff08;1&#xff09;bigint (20) &#xff08;2&#xff09;具体某一条数据 JAVA端 &#xff08;1&#xff09;实体类 &#xff08;2&#xff09;服务类 &#xff08;3&…

DevExpress WinForms中文教程 - 如何创建可访问的WinForms应用?(一)

为用户创建易访问的Windows Forms应用程序不仅是最佳实践的体现&#xff0c;还是对包容性和以用户为中心的设计承诺。在应用程序开发生命周期的早期考虑与可访问性相关的需求可以节省长期运行的时间(因为它将决定设计决策和代码实现)。 一个可访问的WinForms应用程序提供了各种…

Unity之第一人称角色控制

目录 第一人称角色控制 &#x1f634;1、准备工作 &#x1f4fa;2、鼠标控制摄像机视角 &#x1f3ae;3、角色控制 &#x1f603;4.杂谈 第一人称角色控制 专栏Unity之动画和角色控制-CSDN博客的这一篇也有讲到角色控制器&#xff0c;是第三人称视角的&#xff0c;以小编…

The Sandbox 新赛事开启|参加VoxEdit 战士装备设计比赛吧!

来参加VoxEdit 迷你竞赛吧&#xff01; 按此下载 VoxEdit 即可开始。 https://www.sandbox.game/en/create/vox-edit/ 主题&#xff1a;设计以战士为主题的装备。你可以选择任何装备模板。你也可以选择制作动画&#xff0c;以更精彩地呈现你的创意。 你可以创建单件装备或整套…

【Transformer】Attention Is All You Need

Abstract 主要的序列转导模型是基于复杂的循环或卷积神经网络&#xff0c;包括一个编码器和一个解码器。表现最好的模型还通过注意机制连接编码器和解码器。我们提出了一个新的简单的网络架构&#xff0c;变压器&#xff0c;完全基于注意力机制&#xff0c;完全摒弃递归和卷积…

Atcoder ABC338 A-D题解

又是一篇姗姗来迟的atcoder题解。 Link:ABC338 Problem A: 妥妥的签到题。 #include <bits/stdc.h> using namespace std; int main(){string str;cin>>str;if(int(str[0])<65 || int(str[0])>90){cout<<"NO"<<endl;return 0;}for…