Android应用的界面编程(三)--TextView及其子类

第二组UI组件:textView及其子类

一、TextView及其子类的类图

TextView作用就是在界面上显示文本,相当于一个文本编辑器,不过它不能编辑文本,如果想要编辑文本,可以使用它的子类EditText,EditText允许用户编辑文本框中的内容。
TextView及其子类类图

二、TextView常用的xml属性及相关方法

xml属性相关方法说明
android:autoLinksetAutoLinkMask(int)是否将符合指定格式的文本转换为可单击的超链接形式
android:autoTextsetKeyLinstener(KeyLinstener)控制是否将的URL、email等地址自动转换为可单击的链接
android:linksClickablesetLinksClickable(boolean)控制该文本框的URL、email等链接是否具可以点击
android:capitalizesetKeyLinstener(KeyLinstener)控制是否将用户输入的文本转换为大写字母
android:cursorVisiblesetCursorVisiblek(boolean)设置该文本框的光标是否可见
android:drawableBottomsetCompoundDrawablesWithIntrinsicBounds(Drawable,Drawable,Drawable,Drawable)在文本框底端处绘制图像
android:drawableTopsetCompoundDrawablesWithIntrinsicBounds(Drawable,Drawable,Drawable,Drawable)在文本框顶端处绘制图像
android:drawableEndsetCompoundDrawablesWithIntrinsicBounds(Drawable,Drawable,Drawable,Drawable)在文本框结尾处绘制图像
android:drawableLeftsetCompoundDrawablesWithIntrinsicBounds(Drawable,Drawable,Drawable,Drawable)在文本框左边处绘制图像
android:drawableRightsetCompoundDrawablesWithIntrinsicBounds(Drawable,Drawable,Drawable,Drawable)在文本框右边处绘制图像
android:drawablePaddingsetCompoundDrawablesWithIntrinsicBounds(Drawable,Drawable,Drawable,Drawable)设置文本框内文本与图形的间距
android:drawableStartsetCompoundDrawablesWithIntrinsicBounds(Drawable,Drawable,Drawable,Drawable)在文本框开始处绘制图像
android:editable设置文本框是否允许被编辑
android:ellipsizesetEllipsize(TextUitls,TruncateAt)当显示文本超过了TextView的宽度时,如何处理文本
android:emssetEms(int)设置文本框的宽度
android:heightsetHeight(int)设置文本框的高度
android:fontFamilysetTypeface(Typeface)设置文本框内文本的字体
android:gravitysetGravity(int)设置文本框内文本的对齐方式
android:hintsetHint(int)设置文本框内容为空时,文本框内默认显示的提示文字
android:inputTypesetRawInputType(int)设置文本框输入方式
android:linessetLines(int)设置文本框默认占几行
android:maxEmssetMaxEms(int)设置文本框最大宽度
android:maxHeightsetMaxHeight(int)设置文本框最大高度
android:maxLenghthsetMaxLenghth(int)设置文本框最大字符长度
android:maxWidthsetMaxWidth(int)设置文本框最大宽度
android:maxLinessetMaxLines(int)设置文本框最多占几行
android:maxEmssetMaxEms(int)设置文本框最小宽度
android:minHeightsetMinHeight(int)设置文本框最小高度
android:minLenghthsetMinxLenghth(int)设置文本框最小长度
android:minWidthsetMinWidth(int)设置文本框最小宽度
android:minLinessetMinLines(int)设置文本框最少占几行
android:passworddsetTransformatinMethod(TransformatinMethod)设置文本框是一个密码框
android:phoneNumbersetKeyListener(KeyListener)设置文本框只接受电话号码
android:scrollHorizontallysetHorizontallyScrolling(boolean)设置文本框不够显示全部内容时是否允许水平滚动
android:selectAllOnFocussetSelectAllOnFocus(boolean)如果文本框内的内容可选择,设置是否当它获得焦点时自动选择所有文本
android:shawdowColorsetshadowLayer(float,float,float,int)设置文本框内文本的阴影的颜色
android:shawdowDxsetshadowLayer(float,float,float,int)设置文本框内文本的阴影在水平方向的偏移
android:shawdowDysetshadowLayer(float,float,float,int)设置文本框内文本的阴影在垂直方向的偏移
android:shawdowRadiussetshadowLayer(float,float,float,int)设置文本框内文本的阴影的模糊程度,值越大,阴影越模糊
android:singleLinesetTransformationMethod()设置文本框是否为单行模式
android:textsetText(CharSequence)设置是否将文本框文本的内容
android:textAllCapssetAllCaps(boolean)设置是否将文本框中所有字幕显示为大写字母
android:textAppearance设置文本框的颜色、字体、大小等样式
android:textColorsetTextColor(ColorStateList)设置文本框中文本的颜色
android:textColorHighlightsetHighlightColor(int)设置文本框被选中时的颜色
android:textColorHintsetHintTextColor(int)设置文本框中提示文本的颜色
android:textColorLinksetLinkTextColor(int)设置文本框中链接的颜色
android:textIsSelectablesetTextSelectedable()设置该文本框不能编辑时,文本框内的文本是否可以被选中
android:textSizesetTextSize(float)设置文本框的字体大小
android:textStylesetTypeface(Typeface)设置文本框内字体风格,如粗体、斜体等
android:widthsetWidth(int)设置该文本框的宽度

* ellipsize的属性值有:*
–none:不做任何处理;
–start:在文本开始处截断,并显示省略号
–middle:在文本中间处截断,并显示省略号
–end:在文本结尾处截断,并显示省略号
–marquee:使用marquee滚动动画显示文本

实例1:圆角边框、渐变色的TextView

这里写图片描述

  • app/src/main/res/layout/textview_test.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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.textviewtest.MainActivity">
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:orientation="vertical"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="带边框的文本"
            android:textSize="24pt"
            android:background="@drawable/bg_border"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="圆角渐变背景的文本"
            android:textSize="24pt"
            android:background="@drawable/bg_border2"/>
    </LinearLayout>
</RelativeLayout>

第一个文本框的背景是由xml文件定义的,该文件放在Drawable里面,该xml文件也可以当初Drawable使用。下面为两个Drawable文件

  • app/src/main/res/drawable/bg_border.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--设置背景颜色透明-->
    <solid android:color="#0000"/>
    <!--设置红色边框-->
    <stroke android:width="4px" android:color="#f00"/>
</shape>
  • app/src/main/res/drawable/bg_border2.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <!--指定圆角矩形的四个圆角半径-->
    <corners android:topLeftRadius="20px"
             android:bottomRightRadius="30px"
             android:bottomLeftRadius="20px"
             android:topRightRadius="30px"/>
    <!--指定边框线条的宽度和颜色-->
    <stroke android:width="4px" android:color="#f0f"/>
    <!--指定渐变背景颜色,使用sweep类型的渐变,颜色从红色-绿色-蓝色-->
    <gradient android:startColor="#f00"
              android:centerColor="#00f"
              android:endColor="#0f0"
              android:type="sweep"/>

</shape>

此处Activity的代码省略,简单的添加布局文件就可以了看到显示效果。

三、EditText的功能与用法

EditText最重要的属性是inputType,用于将EditText设置为指定类型的输入组件,inputType能接受的属性值非常丰富,比如:numberPassword、number、date、phone……

实例2:用户输入界面设计

这里写图片描述

  • app/src/main/res/layout/edittext_test.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:stretchColumns="1">
    <TableRow>
        <TextView
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="用户名:"
            android:textSize="24dp"/>
        <EditText
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:hint="请填写登陆账号"
            android:selectAllOnFocus="true"/>
    </TableRow>

    <TableRow>
        <TextView
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="密码:"
            android:textSize="24dp"/>
        <EditText
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:inputType="numberPassword"
            android:selectAllOnFocus="true"/>
    </TableRow>
    <TableRow>
        <TextView
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="年龄:"
            android:textSize="24dp"/>
        <EditText
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:inputType="number"
            android:selectAllOnFocus="true"/>
    </TableRow>
    <TableRow>
        <TextView
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="生日:"
            android:textSize="24dp"/>
        <EditText
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:inputType="date"
            android:selectAllOnFocus="true"/>
    </TableRow>
    <TableRow>
        <TextView
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="电话号码:"
            android:textSize="24dp"/>
        <EditText
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:inputType="phone"
            android:hint="请填写正确的电话号码"
            android:selectAllOnFocus="true"/>
    </TableRow>
</TableLayout>

四、按钮(Button)组件的功能和用法

Button主要是在UI界面生成一个按钮,按钮可以共用户单击,当用户单击按钮后,会触发一个onClick事件。按钮使用很简单,可以通过指定android:background属性为按钮增加背景颜色或背景图片,背景图片可以考虑使用自定义的drawable对象使得按钮更加多样化。

实例3:按钮和可变按钮

这里写图片描述
这里写图片描述
- app/src/main/res/layout/button_test.xml
-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="带阴影的文字按钮"
        android:shadowDx="5"
        android:shadowDy="5"
        android:shadowColor="@color/colorAccent"
        android:shadowRadius="2"
        android:textSize="12pt"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="普通按钮"
        android:textSize="10pt"
        android:background="@drawable/m1"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="图片按钮"
        android:textSize="12pt"
        android:background="@drawable/btn_selector"
        />

</LinearLayout>

图片按钮的背景图片也为自定的的xml文件,通过自定义xml可以使的Button更加多样化。下面为Drawable下的xml文件。

  • app/src/main/res/drawable/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/m1"/>

    <!--指定松开时的图片-->
    <item android:state_pressed="false"
          android:drawable="@drawable/m2"/>
</selector>

五、单选钮(RadioButton)和复选框(CheckBox)的功能与用法

单选钮(RadioButton)和复选框(CheckBox)直接继承了Button类,但是他们与普通按钮不同的是,他们多了一个可选中的功能,因此都可额外指定android:checked属性,设置默认情况是否被选中。RadioButton和CheckBox不同之处在于,一组RadioButton只能选中其中一个,通常和RadioGroup一起使用,而CheckBox能选中多个。

实例4:利用单选框和复选框获取用户信息

这里写图片描述
- app/src/main/res/layout/radiobtn_checkbtn_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="match_parent">
<TableRow>
    <TextView android:text="性别:"
        android:textSize="12pt"
        android:layout_width="30pt"
        android:layout_height="wrap_content"/>
    <RadioGroup android:orientation="horizontal"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:id="@+id/rg">
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/male"
            android:text="女"
            android:textSize="24dp"
            android:checked="true"/>
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/female"
            android:text="男"
            android:textSize="24dp"/>
    </RadioGroup>
</TableRow>

<TableRow>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="喜欢的颜色:"
        android:textSize="10pt"/>
    <LinearLayout android:layout_height="wrap_content"
                  android:layout_width="wrap_content"
                  android:orientation="vertical"
        android:layout_gravity="center_horizontal">
    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="红色"/>
    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="白色"/>
    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="蓝色"/>

    </LinearLayout>
</TableRow>
    <TextView android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</TableLayout>
  • app/src/main/java/org/MainActivity.java
import android.app.Activity;
import android.os.Bundle;
import android.widget.RadioGroup;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.radiobtn_checkbtn_layout);
        RadioGroup rg=(RadioGroup) findViewById(R.id.rg);
        final TextView message=(TextView)findViewById(R.id.message);
        rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){
            @Override
            public void onCheckedChanged(RadioGroup radioGroup,int checkedId){
                String tip=checkedId==R.id.male?
                        "您的性别是女人":"您的性别是男人";
                message.setText(tip);
            }
        });

    }
}

六、状态开关按钮(ToggleButton)和开关(Switch)的功能和用法

状态开关按钮(ToggleButton)和开关(Switch)也是Button派生出来额,本质也是按钮。从功能上面看ToggleButton和Switch与CheckBox复选框很相似,都可以提供两种状态,不过ToggleButton和Switch通常用于切换程序中的某种状态。

ToggleButton支持的xml属性

xml属性相关方法说明
android:checkedsetChecked(boolean)设置按钮是否被选中
android:textOff设置按钮状态关闭时显示的文本
android:textOn设置按钮状态打开时显示的文本

Switch支持的xml属性及相关方法

xml属性相关方法说明
android:checkedsetChecked(boolean)设置开关是否被选中
android:switchMinWidthsetSwitchMinWidth(int)设置开关的最小宽度
android:swithPaddingsetSwitchPadding(int)设置开关与标题之文本间的空白
android:textOffsetTextOff(CharSequence)设置开关状态关闭时显示的文本
android:textOnsetTextOn(CharSequence)设置开关状态打开时显示的文本
android:textStylesetSwitchTypeface(Typeface)设置开关的文本风格
android:thumbsetThumbResource(int)指定使用自定义Drawable绘制该开关的开关按钮
android:tracksetTrackResource(int)指定使用自定义Drawable绘制该开关的开关轨道

实例5:利用开关控制布局状态

  • app/src/main/res/layout/togglebtn_switch_layout.xml
    这里写图片描述
    这里写图片描述
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
<ToggleButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/toggle"
    android:textOff="横向排列"
    android:textOn="纵向排列"
    android:checked="true"/>
    <Switch
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/switcher"
        android:textOff="横向排列"
        android:textOn="纵向排列"
        android:checked="true"/>
    <LinearLayout
        android:id="@+id/test"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="btn1"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="btn2"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="btn3"/>
    </LinearLayout>
</LinearLayout>
  • app/src/main/java/org/MainActivity.java
import android.app.Activity;
import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.Switch;
import android.widget.ToggleButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
public class ToggleTest extends Activity {
    ToggleButton toggleButton;
    Switch switcher;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.togglebtn_switch_layout);
         toggleButton=(ToggleButton)findViewById(R.id.toggle);
         switcher =(Switch)findViewById(R.id.switcher);
        final LinearLayout test= (LinearLayout)findViewById(R.id.test);
       OnCheckedChangeListener listener=new OnCheckedChangeListener()
        {
            public void onCheckedChanged(CompoundButton button,boolean isChecked) {
                 if (isChecked) {
                test.setOrientation(LinearLayout.VERTICAL);
                toggleButton.setChecked(true);
                switcher.setChecked(true);
                } else {
                test.setOrientation(LinearLayout.HORIZONTAL);
                toggleButton.setChecked(false);
                switcher.setChecked(false);
                 }
             }
        };
        toggleButton.setOnCheckedChangeListener(listener);
        switcher.setOnCheckedChangeListener(listener);


    }
}

七、时钟(AnalogClock和TextClock)的功能与用法

时钟UI组件是两个很简单的UI组件,AnalogClock和TextClock都会显示时间,不同的是TextClock显示数字时钟,可以显示当前秒数,AnalogClock显示模拟时钟,不会显示当前秒数。

1.TextClock本身就继承了TextView,也就是说,它也是一个文本框,只是显示的内容固定是当前的时间。TextClock以24小时制或者12小时制来显示时间,格式由相关属性控制。
TextClock支持的xml属性及其方法

xml属性相关方法说明
android:format12HoursetFormat12Hour(CharSequence)设置该时钟以12小时制显示
android:format24HoursetFormat24Hour(CharSequence)设置该时钟以24小时制显示
android:timeZonesetTimeZone(String))设置该时钟的时区

2.AnalogClock则继承; View组件,它重写了View的OnDraw方法,他会在View上绘制模拟时钟。
AnalogClock相关属性及方法

xml属性说明
android:dial设置该模拟时钟的表盘显示图片
android:hand_hour设置该模拟时钟的时针显示图片
android:hand_minute设置该模拟分针的表盘显示图片

实例6:手机时钟

这里写图片描述

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:gravity="center_horizontal">
<!--定义模拟时钟-->
  <AnalogClock
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"/>
    <!--定义数字时钟-->
  <!--24小时格式:android:format12Hour="yyyy年MM月dd日 H:mm EEEE"
    12小时格式:android:format12Hour="yyyy年MM月dd日 h:mma EEEE"  -->
    <TextClock
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="10pt"
        android:textColor="#ff00f0"
        android:format12Hour="yyyy年mm月dd日 h:mma EEE"/>
    <!--定义模拟时钟,自定义表盘,时钟,分针-->
    <AnalogClock
        android:layout_width="208dp"
        android:layout_height="220dp"
        android:dial="@drawable/dial"
        android:hand_minute="@drawable/time"/>
</LinearLayout>

八、计时器(Chronometer)

Chronometer和TextClock相似,也继承了TextView,因此都会显示一段文本,但是Chronometer不显示当前时间,它显示从某个时间段开始,一共过去了多少时间。它只提供了一个方法,android:format属性,用于指定计时器的计时格式。除此之外,它提供了以下的方法:

  • setBase(long base) 设置计时器的起始时间
  • setFormat(String format) 设置显示时间的格式
  • start() 开始计时
  • stop()结束计时
  • setOnChronometerTickListener(Chronometer.OnChronometerTickListener listener)为计时器绑定监听事件,当计时器改变时触发该监听。

    实例7:计时器

    这里写图片描述
    这里写图片描述

  • app/src/main/res/layout/chronometer_test.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:gravity="center_horizontal">
    <Chronometer
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/ch"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:gravity="center_horizontal">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/begin"
        android:text="开始"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/end"
            android:text="结束"/>
    </LinearLayout>
</LinearLayout>
  • app/src/main/java/org/MainActivity.java
import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.Button;
import android.widget.Chronometer;

public class ChronometerTest extends Activity {
    Chronometer ch;
    Button begin;
    Button end;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.chronometer_test);
        ch=(Chronometer)findViewById(R.id.ch);
        begin=(Button)findViewById(R.id.begin);
        end=(Button)findViewById(R.id.end);
        begin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ch.setBase(SystemClock.elapsedRealtime());
                ch.start();
                begin.setEnabled(false);
                end.setEnabled(true);
            }
        });
        end.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ch.stop();
               end.setEnabled(false);
                begin.setEnabled(true);
            }
        });
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值