学习Android的第七天

news2024/9/23 17:19:59

目录

Android EditText 输入框

设置默认提示文本

范例

获得焦点后全选组件内所有文本内容

范例

限制EditText输入类型

android:inputType 值列表

范例

设置最小行,最多行,单行,多行,自动换行

范例

设置文字间隔

范例

设置英文字母大写类型

范例

控制 EditText 四周的间隔距离与内部文字与边框间的距离

范例

EditText 光标位置的控制

设置 EditText 获得焦点同时弹出小键盘

范例

带表情的 EditText 简单实现

范例

带删除按钮的 EditText

范例

参考文档


Android EditText 输入框

Android 中的 EditText 是一个用于接收用户输入的可编辑文本框。它与 TextView 类似,但允许用户在应用程序中输入文本。可以在布局文件(XML)中声明 EditText,也可以在代码中动态创建。

设置默认提示文本

EditText 设置提示文本会用到两个属性:

属性说明
android:hint这个属性用于设置当 EditText 是空的时候显示的提示文本内容。比如,当用户没有输入任何文本时,EditText 会显示这个提示文本内容。
android:textColorHint这个属性用于设置提示文本的颜色。默认情况下,提示文本的颜色通常是灰色,但您可以使用这个属性来自定义它的颜色。

范例

1、修改 res/values/colors.xml 添加几个颜色

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
    <color name="purple">#9f44d3</color>
</resources>

2、修改 res/values/strings.xml 添加几个字符串

<?xml version="1.0" encoding="utf-8" ?>
<resources>
    <string name="app_name">111</string>
    <string name="email">用 户 名</string>
    <string name="password">密 码</string>
    <string name="login">登 陆</string>
</resources>

3、修改 activity_main.xml 添加两个 EditText ,一个提示文本使用默认的颜色,另一个使用颜色

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <EditText
        android:id="@+id/username"
        android:hint="@string/email"
        android:layout_width="match_parent"
        android:layout_height="44dp" />

    <EditText
        android:id="@+id/email"
        android:hint="@string/password"
        android:textColorHint="@color/purple"
        android:layout_width="match_parent"
        android:layout_height="44dp" />
</LinearLayout>

运行范例效果如下

获得焦点后全选组件内所有文本内容

android:selectAllOnFocus="true" 是一个用于 EditText 的属性,当 EditText 获得焦点时,它会选中 EditText 中的所有文本内容,而不是将光标移动到文本的开始或者结尾。

范例

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <EditText
        android:id="@+id/email1"
        android:text="@string/email"
        android:selectAllOnFocus="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <EditText
        android:id="@+id/email"
        android:hint="@string/password"
        android:text="@string/password"
        android:textColorHint="@color/purple"
        android:layout_width="match_parent"
        android:layout_height="44dp" />
</LinearLayout>

限制EditText输入类型

有时我们可能需要对输入的数据进行限制,比如输入电话号码的时候,你输入了一串字母,这 显然是不符合我们预期的,而限制输入类型可以通过android:inputType属性来实现! android:inputType是一个非常有用的属性,用于限制用户在 EditText 中可以输入的内容类型。通过设置不同的输入类型,可以确保用户只能输入符合您预期的数据类型,例如文本、数字、日期等。

android:inputType 值列表

1、文本类型

  • none:没有指定输入类型。
  • text:默认的文本输入类型。
  • textCapCharacters:自动将所有字符转换为大写。
  • textCapWords:自动将单词的首字母转换为大写。
  • textCapSentences:自动将句子的首字母转换为大写。
  • textAutoCorrect:启用自动纠正功能。
  • textAutoComplete:启用自动完成功能。
  • textMultiLine:允许多行文本输入。
  • textImeMultiLine:与 textMultiLine 类似,但更适合输入法编辑器(IME)的多行输入。
  • textNoSuggestions:禁用拼写建议。
  • textUri:用于输入网址。
  • textEmailAddress:用于输入电子邮件地址。
  • textEmailSubject:用于输入电子邮件的主题。
  • textShortMessage:用于输入短信。
  • textLongMessage:用于输入长篇文本消息。
  • textPersonName:用于输入人名。
  • textPostalAddress:用于输入邮政地址。
  • textPassword:用于输入密码,显示为密码样式。
  • textVisiblePassword:用于输入密码,但以可见字符显示。
  • textWebEditText:用于输入文本的 WebView 编辑框。
  • textFilter:用于过滤文本。

2、数值类型

  • number:用于输入整数。
  • numberSigned:用于输入带符号的整数。
  • numberDecimal:用于输入十进制数。
  • phone:用于输入电话号码,显示拨号键盘。
  • datetime:用于输入日期和时间。
  • date:用于输入日期,显示日期键盘。
  • time:用于输入时间,显示时间键盘。

范例

可以通过将 android:inputType 属性设置为适当的值来限制用户输入电子邮件地址、手机号和密码。

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <EditText
        android:id="@+id/editTextEmail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入电子邮件"
        android:inputType="textEmailAddress" />

    <EditText
        android:id="@+id/editTextPhone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入电话号码"
        android:inputType="phone" />

    <EditText
        android:id="@+id/editTextPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入密码"
        android:inputType="textPassword" />

</LinearLayout>

在这个示例中,第一个 EditText 限制用户只能输入电子邮件地址,第二个 EditText 限制用户只能输入手机号,第三个 EditText 限制用户只能输入密码,并将其显示为密码样式。

如果不想在xml设置,还可以在代码中进行相同的设置:

EditText editTextEmail = findViewById(R.id.editTextEmail);
editTextEmail.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);

EditText editTextPhone = findViewById(R.id.editTextPhone);
editTextPhone.setInputType(InputType.TYPE_CLASS_PHONE);

EditText editTextPassword = findViewById(R.id.editTextPassword);
editTextPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

这样设置后,用户将仅能在相应的 EditText 中输入符合您所期望的内容类型,从而实现了限制用户输入电子邮件地址、手机号和密码的功能。

设置最小行,最多行,单行,多行,自动换行

android:minLines="3":设置 EditText 的最小行数为 3。这意味着即使没有文本输入,EditText 也会显示至少 3 行的高度。

android:maxLines="3":设置 EditText 的最大行数为 3。如果用户输入的文本超过了这个行数,文本将向上滚动,但用户仍然可以继续输入。这对于限制用户输入文本长度很有用。

android:singleLine="true":设置 EditText 只允许单行输入,而且不会滚动。这意味着用户在输入时,文本不会自动换行到新的行,而是在同一行上继续输入,直到达到 EditText 的边界。这在需要用户输入单行文本的情况下非常有用,例如用户名或搜索框。

要注意的是,android:singleLine 属性在 API 级别 3(Android 1.5)已被弃用,推荐使用 android:inputType 属性中的 textSingleLine 值来代替:

android:inputType="text|textMultiLine"

这个属性会允许多行输入,但不会自动换行。

如果需要允许用户输入多行文本并且自动换行,可以简单地将 android:inputType 设置为 textMultiLine,而不设置 android:singleLine 或 android:maxLines。

范例

<EditText
    android:id="@+id/editText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minLines="3"
    android:maxLines="6"
    android:inputType="textMultiLine"
    android:scrollbars="vertical" />

在这个示例中,EditText 设置了最小行数为 3,最大行数为 6,并允许多行输入并自动换行。纵向滚动条将在需要时显示。

设置文字间隔

  • android:textScaleX:用于设置文字在水平方向上的缩放比例。比如,设置为 1.5 则文字在水平方向上放大 1.5 倍,设置为 0.5 则文字在水平方向上缩小为原来的一半。

如果要设置字与字之间的水平间距,Android 平台并没有提供直接的属性来实现。不过,可以通过其他方式来实现,比如使用 android:letterSpacing 属性来控制水平间距

范例

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textSize="24sp"
        android:textScaleX="1.5"
        android:letterSpacing="0.1" />
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textSize="24sp"
        android:textScaleX="1.5" />



</LinearLayout>

设置英文字母大写类型

android:capitalize 属性用于设置英文字母的大写类型。它有以下几个可能的值:

  • none:默认值,不做任何自动大写转换。
  • sentences:仅将每个句子的首字母大写。
  • words:将每个单词的首字母大写(单词由空格分隔)。
  • characters:将所有英文字母都转换为大写。

范例

可以在 XML 布局文件中为 EditText 设置这个属性,如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入文本"
        android:capitalize="characters" />
</LinearLayout>

在这个示例中,android:capitalize="characters" 将 EditText 中输入的英文字母全部转换为大写。

控制 EditText 四周的间隔距离与内部文字与边框间的距离

android:layout_marginTop 和 android:paddingTop 等属性可以用于控制 EditText 组件与其周围的间距距离以及内部文字与边框之间的距离。

android:layout_marginTop、android:layout_marginBottom、android:layout_marginLeft 和 android:layout_marginRight 属性用于设置组件与其周围的上、下、左、右间距距离。
android:paddingTop、android:paddingBottom、android:paddingLeft 和 android:paddingRight 属性用于设置组件内部文字与边框之间的上、下、左、右间距距离。

范例

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter text"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp" />

</LinearLayout>

在这个示例中,android:layout_marginTop="10dp" 和 android:layout_marginBottom="10dp" 设置了 EditText 与其上方和下方的外边距为 10dp。而 android:paddingTop="5dp"、android:paddingBottom="5dp"、android:paddingLeft="10dp" 和 android:paddingRight="10dp" 设置了 EditText 内容与边框的内边距。

EditText 光标位置的控制

可以使用 EditText 的 setSelection() 方法来控制光标的位置和选中文本。以下是这些方法的说明:

  • setSelection(int index):将光标移动到指定位置 index 处。
  • setSelection(int start, int stop):选中从 start 到 stop 位置之间的文本。
  • setSelectAllOnFocus(true):当 EditText 获得焦点时选中全部文本。
  • setCursorVisible(false):设置光标是否可见。如果设置为 false,光标将不会显示。
  • setSelectionStart() 和 getSelectionEnd():用于获取当前光标的前后位置。

设置 EditText 获得焦点同时弹出小键盘

有时候我们需要在进入某个 Activity 后让 文本框 立即获得焦点并且弹出键盘,对 EditText 做一些简单的改变就能实现这样的功能

1、让 EditText 获得焦点与清除焦点

在 Android 中,可以通过 requestFocus() 方法来请求让 EditText 获得焦点,并且通过 clearFocus() 方法来清除 EditText 的焦点。

以下是示例代码:

EditText editText = findViewById(R.id.editText);

// 请求让 EditText 获得焦点
editText.requestFocus();

// 清除 EditText 的焦点
editText.clearFocus();

在这个示例中,首先我们调用 requestFocus() 方法请求 EditText 获得焦点,然后立即调用 clearFocus() 方法来清除焦点。这样做的目的可能是为了在某些情况下,例如在界面加载完毕后,让 EditText 获得焦点以显示光标,但不希望键盘立即弹出,所以我们立即清除焦点。

2、获得焦点后,弹出小键盘

在 Android 中,根据不同的系统版本,

a、低版本的系统直接 requestFocus() 就会自动弹出键盘,

b、稍微高一点的版本可能需要设置 android:windowSoftInputMode 属性来确保获得焦点的 EditText 弹出小键盘。

这个属性可以用来控制 Activity 主窗口与软键盘的交互模式,以解决输入法面板遮挡问题。

这个属性影响两个方面:

  • 当有焦点产生时,软键盘是隐藏还是显示。
  • 是否减少活动主窗口大小以便腾出空间放软键盘。

下面是该属性的一些值及其说明(可设置多个值,用"|"分开):

  1. stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置。
  2. stateUnchanged:当这个 Activity 出现时,软键盘将一直保持在上一个 Activity 里的状态,无论是隐藏还是显示。
  3. stateHidden:用户选择 Activity 时,软键盘总是被隐藏。
  4. stateAlwaysHidden:当该 Activity 主窗口获取焦点时,软键盘也总是被隐藏。
  5. stateVisible:软键盘通常是可见的。
  6. stateAlwaysVisible:用户选择 Activity 时,软键盘总是显示的状态。
  7. adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示。
  8. adjustResize:该 Activity 总是调整屏幕的大小以便留出软键盘的空间。
  9. adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖,用户能总是看到输入内容的部分。

在 AndroidManifest.xml 中为需要弹出小键盘的 Activity 设置 android:windowSoftInputMode="stateVisible" 属性:

<activity android:name=".MainActivity"
    android:windowSoftInputMode="stateVisible">
</activity>

 这个属性确保了当该 Activity 主窗口获取焦点时,软键盘总是显示的状态。

然后,在代码中,调用 EditText 的 requestFocus() 方法就可以让它获得焦点,并且弹出小键盘:

EditText editText = findViewById(R.id.editText);
editText.requestFocus();

这样,当进入该 Activity 时,EditText 将会立即获得焦点,并且小键盘会弹出。 

范例

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <EditText
        android:id="@+id/email"
        android:hint="@string/email"
        android:inputType="textEmailAddress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Html;
import android.text.InputType;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
import android.text.style.StrikethroughSpan;
import android.text.style.StyleSpan;
import android.text.style.URLSpan;
import android.text.style.UnderlineSpan;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewAnimator;

import java.lang.reflect.Field;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EditText editText = findViewById(R.id.email);

        // 请求让 EditText 获得焦点
        editText.requestFocus();

    }
}

带表情的 EditText 简单实现

对于 Android 中 EditText 输入框中显示表情的实现,可以使用 SpannableString 或者 Html 类来实现。

范例

使用 SpannableString写

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btn_add"
        android:text="添加表情"/>
    <EditText
        android:id="@+id/edit_one"
        android:hint="输入框"
        android:inputType="textEmailAddress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Html;
import android.text.InputType;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
import android.text.style.StrikethroughSpan;
import android.text.style.StyleSpan;
import android.text.style.URLSpan;
import android.text.style.UnderlineSpan;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewAnimator;

import java.lang.reflect.Field;

public class MainActivity extends Activity {
    private Button btn_add;
    private EditText edit_one;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_add = (Button) findViewById(R.id.btn_add);
        edit_one = (EditText) findViewById(R.id.edit_one);
        btn_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SpannableString spanStr = new SpannableString("imge");
                Drawable drawable = MainActivity.this.getResources().getDrawable(R.drawable.baseline_favorite_24);
                drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
                ImageSpan span = new ImageSpan(drawable,ImageSpan.ALIGN_BASELINE);
                spanStr.setSpan(span,0,4,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                int cursor = edit_one.getSelectionStart();
                edit_one.getText().insert(cursor, spanStr);
            }
        });
    }
}

带删除按钮的 EditText

范例

1、在com.example.myapplication目录下新建个ClearableEditText类

package com.example.myapplication;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;

import androidx.appcompat.widget.AppCompatEditText;
import androidx.core.content.ContextCompat;

public class ClearableEditText extends AppCompatEditText {

    private Drawable clearButtonDrawable;

    public ClearableEditText(Context context) {
        super(context);
        init(context);
    }

    public ClearableEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public ClearableEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    private void init(Context context) {
        // 初始化删除按钮图标
        clearButtonDrawable = ContextCompat.getDrawable(context, android.R.drawable.ic_delete);
        if (clearButtonDrawable != null) {
            clearButtonDrawable.setBounds(0, 0, clearButtonDrawable.getIntrinsicWidth(), clearButtonDrawable.getIntrinsicHeight());
        }
        updateClearButtonVisibility();
        // 监听文本变化事件
        addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

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

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
    }

    // 更新删除按钮的可见性
    private void updateClearButtonVisibility() {
        setCompoundDrawables(null, null, getText().length() > 0 ? clearButtonDrawable : null, null);
    }

    // 处理删除按钮的点击事件
    @Override
    public boolean performClick() {
        if (clearButtonDrawable != null && getCompoundDrawables()[2] == clearButtonDrawable) {
            setText("");
            return true;
        }
        return super.performClick();
    }
}

2、activity_main.xml

<?xml version="1.0" encoding="utf-8" ?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.example.myapplication.ClearableEditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:hint="输入文本"
        android:paddingEnd="40dp"
        tools:ignore="MissingClass" />

</RelativeLayout>

参考文档

  1. Android 官方文档 EditView

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

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

相关文章

JMeter测试工具(进阶篇)

逻辑控制器和关联 通过参数化可以实现单个接口的功能测试&#xff0c;而接口测试过程中&#xff0c;除了单个接口的功能测试之外&#xff0c;还会测试接口业务实现&#xff0c;所谓业务&#xff0c;就是一套的完整的业务逻辑或流程&#xff0c;这就是要必须要使用到的逻辑控制…

基于YOLOv8的暗光低光环境下(ExDark数据集)检测,加入多种优化方式---自研CPMS注意力,效果优于CBAM ,助力自动驾驶(二)

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文主要内容:详细介绍了暗光低光数据集检测整个过程&#xff0c;从数据集到训练模型到结果可视化分析&#xff0c;以及如何优化提升检测性能。 &#x1f4a1;&#x1f4a1;&#x1f4a1;加入 自研CPMS注意力 mAP0.5由原始的0.682提升…

08-Java过滤器模式 ( Filter Pattern )

Java过滤器模式 实现范例 过滤器模式&#xff08;Filter Pattern&#xff09;或允许开发人员使用不同的标准来过滤一组对象&#xff0c;通过逻辑运算以解耦的方式把它们连接起来 过滤器模式&#xff08;Filter Pattern&#xff09; 又称 标准模式&#xff08;Criteria Pattern…

【51单片机】实现一个动静态数码管显示项目(超全详解&代码&图示)(5)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY…

幻兽帕鲁服务器搭建最简单新手教程,10秒钟自动部署,一键开服(腾讯云)

以下教程是基于腾讯云轻量应用服务器搭建的&#xff0c;非常简单&#xff0c;无论搭建幻兽帕鲁还是其他的游戏或者应用&#xff0c;都能以非常快的速度部署好。而且稳定流畅&#xff0c;功能丰富。 下面就来一起看看如何搭建吧。 幻兽帕鲁腾讯云服务器购买与一键部署教程&…

如何实现Vuex本地存储

在前端开发中&#xff0c;Vuex是一款非常强大的状态管理工具&#xff0c;但是默认情况下&#xff0c;Vuex的数据是存储在内存中的&#xff0c;刷新页面后数据将会丢失。这往往会导致用户在刷新页面后需要重新登录等繁琐的操作。本篇文章将教会您如何实现Vuex的本地存储&#xf…

python-可视化篇-pyecharts库-气候堆叠图

准备 代码 # codingutf-8 # 代码文件&#xff1a;code/chapter10/10.3.py # 3D柱状图import randomfrom pyecharts import options as opts from pyecharts.charts import Bar3D# 生成测试数据 data [[x, y, random.randint(10, 40)] for y in range(7) for x in range(24)]…

寒假提升(5)[利用位操作符的算法题]

日子是一天天地走&#xff0c;书要一页页地读。 ——毕淑敏 算法 位操作符的合理使用来解决问题1、题目大概2、理解和想办法解决3、结果 位操作符的合理使用来解决问题 1、题目大概 题目要求让我们把一个数字用二进制表示出来的时候&#xff0c;将他的奇数位置和偶数位置交换…

C# 实现微信自定义分享

目录 需求与调整 代码实现 获取令牌 生成合法票据 获取有效签名 客户端准备 客户端实现 小结 需求与调整 在微信中打开网页应用后&#xff0c;可以选择将地址发送给朋友进行分享&#xff0c;如下图&#xff1a; 在实际的应用中&#xff0c;我们可能不是简单的将该网页…

利用Intersection Observer实现图片懒加载性能优化

ntersection Observer是浏览器所提供的一个 Javascript API&#xff0c;用于异步的检测目标元素以及祖先或者是顶级的文档视窗的交叉状态 这句话的意思就是&#xff1a; 我们可以看的图片当中&#xff0c;绿色的 target element&#xff08;目标元素&#xff09;&#xff0c;…

Stable Diffusion 模型下载:Disney Pixar Cartoon Type B(迪士尼皮克斯动画片B类)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 这是我之前的模型迪士尼皮克斯卡通类型A与我自己训练的Lora在中途旅程图像上的合并结果。与之前的版本相比&#xff0c;男性和老年人看起来更像真正的皮克斯角色&a…

【制作100个unity游戏之24】unity制作一个3D动物AI生态系统游戏2(附项目源码)

最终效果 文章目录 最终效果系列目录前言添加捕食者动画控制源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第24篇中&#xff0c;我们将探索如何用unity制作一个3D动物AI生态系统游戏…

内网渗透靶场02----Weblogic反序列化+域渗透

网络拓扑&#xff1a; 攻击机&#xff1a; Kali: 192.168.111.129 Win10: 192.168.111.128 靶场基本配置&#xff1a;web服务器双网卡机器&#xff1a; 192.168.111.80&#xff08;模拟外网&#xff09;10.10.10.80&#xff08;模拟内网&#xff09;域成员机器 WIN7PC192.168.…

AI嵌入式K210项目(26)-二维码识别

文章目录 前言一、什么是二维码&#xff1f;二、实验准备三、实验过程四、API接口总结 前言 本章介绍基于机器视觉实现二维码识别&#xff0c;主要包含两个过程&#xff0c;首先检测图像中是否有二维码&#xff0c;如果有则框出并打印二维码信息&#xff1b; 一、什么是二维码…

吉他学习:右手拨弦方法,右手拨弦训练 左手按弦方法

第六课 右手拨弦方法https://m.lizhiweike.com/lecture2/29362775 第七课 右手拨弦训练https://m.lizhiweike.com/lecture2/29362708

Redis——缓存设计与优化

讲解Redis的缓存设计与优化&#xff0c;以及在生产环境中遇到的Redis常见问题&#xff0c;例如缓存雪崩和缓存穿透&#xff0c;还讲解了相关问题的解决方案。 1、Redis缓存的优点和缺点 1.1、缓存优点&#xff1a; 高速读写&#xff1a;Redis可以帮助解决由于数据库压力造成…

高斯伪谱C++封装库开源!

Windows x64/86 C无依赖运行高斯伪谱法求解最优控制问题&#xff0c;你只需要ElegantGP! Author: Y. F. Zhang His Github: https://github.com/ZYunfeii 写在前面 这个库在你下载它的那一时刻起不再依赖任何其他代码&#xff0c;直接可用来构建C的最优控制问题并进行求解。…

vscode配置wsl ubuntu c++的环境

在ubuntu安装llvm/clang sudo apt install llvm clang clangd lldb vscode的调试器接口是按GDB开发的&#xff0c;所以需要一个适配器&#xff0c;lldb-mi就是这个适配器。lldb-mi原来是llvm项目的一部分&#xff0c;后面成为了一个单独的项目https://github.com/lldb-tools/…

编译原理实验1——词法分析(python实现)

文章目录 实验目的实现定义单词对应的种别码定义输出形式&#xff1a;三元式python代码实现运行结果检错处理 总结 实验目的 输入一个C语言代码串&#xff0c;输出单词流&#xff0c;识别对象包含关键字、标识符、整型浮点型字符串型常数、科学计数法、操作符和标点、注释等等。…

一条 SQL 更新语句是如何执行的?

之前你可能经常听 DBA 同事说&#xff0c;MySQL 可以恢复到半个月内任意一秒的状态&#xff0c;惊叹的同时&#xff0c;你是不是心中也会不免会好奇&#xff0c;这是怎样做到的呢&#xff1f; 我们先从一条更新语句讲起&#xff0c;首先创建一个表&#xff0c;这个表有一个主键…