自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Android唐浮的专栏

遇到问题或想持续学习,请关注公众号“Android唐浮”

  • 博客(242)
  • 资源 (33)
  • 收藏
  • 关注

原创 Activity + Fragment 页面重叠问题

Activity + Fragment 页面重叠问题一、 造成问题的原因根本原因:Activity被销毁并重新创建了,但已经加载过的Fragmen被保存了下来,这时Activity重新创建时又产生了新的Fragment,所以重叠了。问题场景:横竖屏切换报错之后恢复页面内存不足时Activity销毁二、 解决方法为了模拟这一场景,可在手机 开发者选项-> 应用->不保留活动 模拟场景。解决方式一:在Activity回收时不保存状态,这样当Activity销毁时再进入时,就重

2021-10-15 21:57:37 1269

原创 implementation和api的区别

implementation和api的区别为了方便记忆,可以这么理解。implementation 类似于“praivte”,module引用implementation只应用于自身,不会传递。api类似于“public”,其他module如果dependency该module,也可以引用到该module中的资源,会传递。再看看官方文档:implementationGradle 会将依赖项添加到编译类路径,并将依赖项打包到构建输出。不过,当您的模块配置 implementation 依赖

2021-07-20 11:02:00 989

原创 树状图的输出(递归转循环)

树状图的输出(递归转循环)解析树状图的时候,递归算是比较好理解的方式,但是递归在遍历大量的树状图数据时,反而会引起栈溢出,此时就需要转循环了。模拟一个数据{ "name":"1", "child":[ { "name":"2", "child":[ { "name":"4", "child":[

2021-06-16 21:57:17 836

原创 面试官:讲讲TCP的三次握手和四次挥手

面试官:讲讲TCP的三次握手和四次挥手某上市公司遇到过,面试高频题。文章尽量用最简洁的语言方便理解与记忆。一、三次握手(建立链接)A 代表主动链接方,B 代表被动链接方1.1 简单点A->B 你活着吗?B->A 我活着,你呢?A->B 我也活着1.2 复杂点A->B Syn(i)B->A Ack(i+1),Syn(k)A->B Ack(k)1.3 图解Http书中截取1.4 为什么是三次握手?TCP 是面向链接的,也就是建立链接

2021-05-16 21:17:55 558 8

原创 SourceTree 删除记住的账户

SourceTree 删除记住的账户如果是mac,在钥匙串访问 APP中删除对应的账号,然后在sourceTree 中 偏好设置 -> 高级 删除对应的账号。SourceTree 在中文状态下和英文状态下居然功能会不一样,找这个问题太难受了。中文状态下高级按钮不可点击:将sourceTree切换成英文才可以点击:...

2021-05-09 13:21:32 4866 13

原创 Mac 命令行中无目录操作权限。

Mac 命令行中无目录操作权限。将需要执行的命令保存在 .sh 的文件中,依次执行:chmod +x XX.shsudo XX.sh

2021-04-28 21:54:24 588

原创 电脑的喇叭坏了

MacPro 电脑的喇叭坏了。首先我不会修电脑,所以我找到了两种解决办法。大家都知道电脑中为了达到立体声,一般都会有左右两个喇叭,所以在声音的偏好设置中关掉一个。。我还有一台闲置的iphone6,总想对它打点注意,它可以做电脑的音响吗,找了半天虽然没找到官方的方式,但找到了一个还算好用的软件,现在这情况啊,能想到的人家都已经做出来了;它是通过局域网连接的,看电影是有相当的延迟,但是听音乐就无所谓啦。软件名字叫 Airfoil,支持多平台。...

2021-04-28 21:38:38 238

原创 Android 如何在不显示文字时获取文字宽度

Android 如何在不显示文字时获取文字宽度正确方式:在canvas中使用:paint.measureText(text)在TextView中使用:textView.getPaint()..measureText(text)代码示例:package com.demo.myapplication3;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;impo

2021-04-11 12:54:02 290

原创 Canvas 文字对齐方式

Canvas 文字对齐方式常用的画文字的方法public void drawText (String text, float x, float y, Paint paint)x,y 并不是指定文字的中点位置,并且x,y与文字对齐方式有关(通过setTextAlign()指定,默认为left)测试import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import

2021-04-10 23:20:39 1380

原创 换个日志打印类吧

换个日志打印类吧日常观摩别人的代码,发现了一个比较好的日志类,它可以更快捷的定位到日志的位置和线程信息。地址:https://github.com/orhanobut/logger使用步骤参照官方的文档,这里列出一个日志打印的工具类,方便使用import com.orhanobut.logger.Loggerobject PrettyLog { private val TAG = "PrettyLog" /** * 是否开启 Logger */

2021-04-10 15:59:16 99

原创 Android 选择文件返回路径怎么就这么难?

Android 选择文件返回路径怎么就这么难?这个问题纠结了我很长时间,终于有了比较好的解决方案。目前已知适配所有的机型,有问题就留言吧。正确姿势来一遍1. 打开系统自带的文件浏览器并限制类型public void OpenFile(View view) { // 指定类型 String[] mimeTypes = {"*/*"}; Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

2021-03-31 23:37:21 1801 1

原创 Android中Object.requireNonNull和@NonNull

Android中Object.requireNonNull和@NonNullAndroid中的Object.requireNonNull和@NonNull并不能解决报错的问题,相反,是为了更快速的抛出问题、定位问题。问题1: 不加上Object.requireNonNull也会抛出异常,为什么要加上呢?答:这是因为Fail-fast思想, 翻译过来就是, 让错误尽可能早的出现,让开发者可以迅速的定位错误,而不是嵌套的很深发生错误再去排查。问题2: @NonNull 的作用是什么?答: @NonNu

2021-03-31 22:15:41 921

原创 Android Button添加背景后变大?

Android Button添加背景后变大原因:在系统Button自带的样式中,限制了minHeight,minWidth。解决:在写Button组件时将 minWidth minHeight 设置为0dp。 <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/selecto

2021-03-25 14:47:51 844

原创 EventBus 遇到的问题汇总

EventBus 粘性事件接收不到的问题一、起因由于EventBus发送的是对象,我们经常构建一个共用的对象,在共用对象中添加tag,用于方便在接收中区分作用。例如用EventBusHelper工具类发送EventBusMessage对象。二、遇到的问题在发送粘性事件时,在A场景发送了一次,然后还没有接收,然后在B场景又发送了一次,这时B发送的粘性事件可以收到,而A场景的粘性事件被替换掉了。这时因为在EventBus的源码中,粘性事件使用Map集合存储,key为 object.getClass(

2021-03-01 22:25:54 1107

原创 大端小端模式

大端小端模式一、什么是大小端模式大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。举个例子:以 unsigned int value = 0x12345678来表示,unsigned char buf[4]存放。Big-Endian: 低地址存放高位,如下:

2021-02-19 23:38:05 2506

原创 今日头条适配遇到的问题(持续更新...)

今日头条适配遇到的问题(持续更新…)问题 1出现场景:横屏应用,在按home按键或者锁屏,当软件进入后台时,保持手机的竖屏,此时再产生新的Fragment更新UI时,有几率出现适配错误。原因分析:在锁屏或进入后台时,虽然应用固定为横屏,但手机在竖屏状态下,会让软件获取到竖屏状态,以至于新UI产生时,产生宽和高相反的适配效果。解决办法:Issue上的解决办法:https://github.com/JessYanCoding/AndroidAutoSize/issues/248我的解决办法:在

2021-01-29 20:46:42 1136

原创 ByteBuffer数据结构

ByteBuffer的数据结构ByteBuffer 是属于java的nio部分,在编程的高端操作中经常看到它的身影,如果网络编程,比如安卓中的硬编解码(MediaCodeC)中…组成部分byte[] bytes: 用来存储数据int capacity: 用来表示bytes的容量,那么可以想像capacity就等于bytes.size(),此值在初始化bytes后,是不可变的。int limit: 用来表示bytes实际装了多少数据,可以容易想像得到limit <= capacity,此

2021-01-29 20:45:54 227

原创 获取全面屏分辨率的方法

WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE); Point point = new Point(); if (wm != null) { wm.getDefaultDisplay().getRealSize(point); } LogWrapper.d("全面屏实际大小:" + point....

2021-01-13 10:24:36 278

原创 今日头条适配方案造成Dialog显示异常的解决方法

今日头条适配方案造成Dialog显示异常的解决方法产生问题的原因由于该适配方案是更改的全局的density, 对整个项目生效,所以在使用第三方View或者系统的的view时,如果和项目中的设计尺寸差别很大,就会出现很严重的UI问题。解决办法方法一: 尽量所有的视图都使用自定义的视图。方法二: 更改原生Dialog的大小。代码示例一: 根据屏幕宽度, 更改原生Dialog的比例 /** * 显示取消/确认的dialog */ public void sh

2021-01-13 10:20:28 1516

原创 Android 6.0 应用内更新失败

Android 6.0 应用内更新失败场景:在Android设备6.0上, getFilesDir().getAbsolutePath()目录下的apk安装时提示 “解析错误-解析软件包时出现问题”;Environment.getExternalStorageDirectory().getPath() 目录下却可以正常安装。原因:6.0 没有对该apk的运行权限。解决:方法一(尝试失败):chmod("777", apkFile.getAbsolutePath());//apk放在cache

2021-01-04 16:30:40 345

原创 Mac pro 连上wifi 5G提示无ip地址

Mac pro 连上wifi 5G提示无ip地址问题解决现象某品牌双频路由器,2.4G的网能连接上,5G的wifi连接上提示无ip地址。DHCP都是自动分配的,却上不了网。解决进入路由器管理后台,将5Gwifi的信道设置成161...

2020-12-17 20:50:25 4532

原创 Android hid限制设备的两种方式

Android hid限制设备的两种方式方式一:在xml文件中过滤在res文件夹下新建xml文件夹,并新建device_filter.xml文件,在该文件中指定vid和pid。<?xml version="1.0" encoding="utf-8"?><resources> <usb-device vendor-id="1234" product-id="5678" /></resources>在AndroidManifest文件中

2020-09-09 22:23:04 1120

原创 java Int 转 String 后占用内存会变大吗?

java Int 转 String 后占用内存会变大吗?什么是bytebyte,即字节。byte作为java的基本类型之一。它的范围在-128~127,默认值为0。byte 数据类型是8位,1个字节=8bitbyte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一内存分析String 英文字符1个字节 中文2个字节(String的中文字节数要看用的编码集合,如果是utf-8类型的,那么中文占2到3个字节,如果是GBK类型的,那么中

2020-09-09 22:21:43 1258

原创 Unknown host ‘services.gradle.org‘ 的解决办法

Unknown host ‘services.gradle.org’ 的解决办法问题原因AndroidStudio 没有下载过该版本的gradle;由于网络原因,在部分运营商网络下,下载gradle会失败,提示这个错误解决更换某信的运营商网络,或者让手机开启热点重新下载。更换gradle版本,distributionUrl更换本地的其它项目已经下载过的gradle。eg:mac gradle 下载的本地目录在 /Users/User/.gradle/wrapper/dists自己从三

2020-09-09 22:20:22 3909

原创 Android更改原生Dialog的宽高

Android更改原生Dialog的宽高重点代码特别注意:需要在dialog show 之后再去设置。if (mAlertDialog.getWindow() != null) { WindowManager.LayoutParams lp = mAlertDialog.getWindow().getAttributes(); lp.width = 300; // 宽度,可根据屏幕宽度进行计算 lp.gravity = Gravi

2020-09-09 22:19:40 968

原创 can‘t locate SVN/Core.pm in @INC (you may need to install the SVN::Core module)

在用sourceTree时,提交或拉取代码时提示错误:can't locate SVN/Core.pm in @INC (you may need to install the SVN::Core module) (@INC contains: /usr/local/git/lib/perl5/site_perl/5.18.2/darwin-thread-multi-2level /usr/local/git/lib/perl5/site_perl/5.18.2 /usr/local/git/lib/pe

2020-08-16 22:27:23 1688

原创 Android屏幕共享-传输图片

Android屏幕共享-传输图片该篇主要讲解安卓与安卓之间如何截图传输,属于安卓屏幕共享的入门篇。适用场景:安卓屏幕共享工具类应用。效果图效果图demo界面前言目前安卓屏幕共享的方式有很多种软件已经实现,究其根源,无非就是采集-传输-播放的过程,而安卓端无论是截图传输还是硬解码,也一定离不开核心类MediaProjection,它就是Google开放了视频录制的接口(屏幕采集的接口)。比较优秀的软件举例:TeamViewer向日葵Vysor其中Vysor就是通过adb实现无

2020-07-28 22:05:22 3171 1

原创 Android TextView同时设置粗体和斜体

Android TextView同时设置粗体和斜体问题TextView的粗体和斜体无法同时生效,要么显示斜体,要么显示粗体。错误代码:tv_test3.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);tv_test3.setTypeface(Typeface.SANS_SERIF, Typeface.ITALIC);正确示例:tv_test3.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD_IT

2020-07-28 20:58:24 4845

原创 Android修改自定义Dialog的大小

Android修改自定义Dialog的大小重点代码view.setMinimumWidth();public class TestDialog extends Dialog { private Activity mContext; public TestDialog(Context context) { super(context, R.style.test_dialog_style); mContext = (Activity) context;

2020-07-15 21:30:38 1063 1

原创 封装一个简单的崩溃监听类

封装一个简单的崩溃监听类注意:无法监听到OOM和ANR异常CrashUtilsimport android.content.Context;import android.os.Handler;import android.os.Looper;import android.util.Log;import android.widget.Toast;public class CrashUtils { private static String TAG = "CrashUtils";

2020-06-04 22:12:03 221

原创 ScrollView fillViewport 使用

ScrollView fillViewport 使用有一个需求界面中自上而下有两个方块,依次为A、B方块。A 方块的大小不固定,小的时候在屏幕内,大的时候会超过屏幕外。B 的布局,始终在A的下方,屏幕够显示时,在屏幕的最底部,屏幕不够显示时,随着A滑动。fillViewport 引入如果只在外层写了ScrollView,B会紧紧跟随A,B 不会始终在屏幕最底部了。这时在 ScrollView 内加入 fillViewport=true, 就可以实现需求了。效果图 与 layout 测试代

2020-06-04 21:59:56 806

原创 ProgressDialog进度条更改文件单位

ProgressDialog进度条更改文件单位效果图重点部分重点方法:setProgressNumberFormatDownLoadRunnable:模拟下载线程package com.demo.progress;/** * Created by talon on 2020/5/20 * note: 模拟下载线程 */public class DownLoadRunnable implements Runnable { // 模拟数据大小10M private lo

2020-05-24 16:26:07 310

原创 可拖动的组件,可更改为其它View

可拖动的组件,可更改为其它View效果图自定义View源码DragTextViewpackage com.demo.drag;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.ViewGroup;import android.widget.RelativeLayout;/** * Created

2020-05-24 16:24:05 287

原创 Socket 服务端断网时,客户端依旧显示连接状态?

Socket 服务端断网时,客户端依旧显示连接状态?使用socket进行测试:客户端断网时,客户端接到断开回调服务端手动关闭时,客户端接到断网回调服务端运行突然断网时,客户端接收不到断网的回调(分很多场景,参考:https://www.cnblogs.com/549294286/p/5077175.html)为什么在服务端断网时接不到回调呢?这是因为TCP建立的通道被破坏,造成了...

2020-05-05 21:53:02 2088

原创 Socket 分包的原因及解决办法

Socket 粘包分包的原因及解决办法该文章部分引用来自:https://blog.csdn.net/double2hao/article/details/83211334原因socket发生粘包分包实际上是在TCP传输协议对数据的优化,TCP是“流”协议,传输的过程就像流水一样没有边界,没有界限,而实际上我们只需要取出我们发送的部分即可;这里说明下UDP是"数据包"协议,所以在UDP中...

2020-05-05 21:29:49 2731

原创 Java Socket 如何接收byte和String

Java Socket 如何接收byte和String一、发送byte[]与String我们平时是怎么发送byte和String的呢?举例代码:String str = "hello world"+ "\n";byte[] bytes = 图片字节流;// 获取socket输出流OutputStream out = socket.getOutputStream();// 发送字符串...

2020-05-05 21:29:02 4535

原创 Java Socket Tcp 完整示例

Java Socket Tcp 完整示例Clientimport java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.Outpu...

2020-05-05 21:27:39 390

原创 Arouter 无法跳转的问题

Arouter 无法跳转的问题Arouter 原理路由框架会在项目的编译期通过注解处理器扫描所有添加@Route注解的Activity类,然后将Route注解中的path地址和Activity.class文件映射关系保存到它自己生成的java文件中。我们在代码里加入的@Route注解,会在编译时期通过apt生成一些存储path和activity.class映射关系的类文件,然后app进程启动...

2020-02-22 00:00:04 5758

原创 Android使用svg

Android使用svgsvg是什么?Scalable Vector Graphics,可缩放矢量图形。相当于图片是计算出来的,所以相对于传统的图片,svg放大缩小都不会变形。AndroidStudio 如何使用SVG?Android 5.0 及以上系统中引入了 VectorDrawable 来支持矢量图(SVG)创建一个项目对着res点击右键,依次 New->Vector As...

2020-02-21 23:59:06 227

原创 Android 加载长图

Android 加载长图使用库implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.5.0'注意:不要放在ScrollView中,不然滑动可能会冲突。那么加载长图时,如何按宽度填充呢?<com.davemorrissey.labs.subscaleview.SubsamplingScale...

2020-02-21 23:58:19 652 2

AndroidScreenQuick.zip

Android手机之间实现屏幕共享,截图方式实现。博客地址:https://blog.csdn.net/u011368551/article/details/107646443

2020-07-28

DragTextViewDemo.zip

可拖动的组件DragTextView,可改为其它的view,拖动边界不可超过屏幕边界(可更改),代码比较简单,拓展性很高。

2020-05-24

ProgressDialogDemo.rar

ProgressDialog进度条更改文件单位,右下角更改为了m,可自己更改换算成其它单位,也可以参考博客链接的代码。

2020-05-24

GreenDaoDemo.zip

greenDao封装使用,详解:https://blog.csdn.net/u011368551/article/details/102692440

2019-10-22

Canvas动画转视频-前段框架whammy

Canvas动画转视频-前段框架whammy,由于英文比较晦涩难懂,接下来就实践一下体会whammy的用法。

2019-08-30

ScreenRecorderDemo.zip

两个代码类实现的屏幕录制功能。简洁易懂,上手简单。参考代码:https://blog.csdn.net/u011368551/article/details/93798251

2019-06-23

Tinker热修复实战

Tinker热修复实战,博客地址:https://www.jianshu.com/p/86b24b246379

2019-04-17

synchronized与单例的线程安全

synchronized与单例的线程安全问题,博客地址:https://www.jianshu.com/p/486ed9c8662a

2019-04-10

Android保活之循环播放无声音乐

Android保活之循环播放无声音乐,博客地址:https://www.jianshu.com/p/97b2b875df64

2019-04-08

多渠道打包walle

Android打包之快速的多渠道打包walle,参考:https://www.jianshu.com/p/77b409151b78

2019-03-24

windows_red5_live

作用:播放rtmp推流的视频 使用:可以直接替换red5-server/webapps下的live文件夹,也可以将差异化文件移动到live文件夹,一共只有两个文件。

2018-07-16

GridView分组显示StickyGridHeaders

GridView分组显示StickyGridHeaders,GridView分组显示StickyGridHeaders

2018-03-17

Android Dialog中加载GIF

Android Dialog中用Glide加载GIF,Android Dialog中用Glide加载GIF

2018-03-17

Google推荐的图片加载库Glide

Android图片加载框架之Google推荐的图片加载库Glide 博客:http://blog.csdn.net/u011368551/article/details/51167999

2016-04-16

仿微信进度条webView

一个很简单的webView 小demo,webView实现了加载网页与显示网页进度的进度条。

2015-10-07

android BadgeView

android BadgeView Demo,与强迫症头像上的红点类似。 博客:http://blog.csdn.net/u011368551/article/details/47276379

2015-08-04

android全局监听网络

android全局监听网络的例子。 博客地址:http://blog.csdn.net/u011368551/article/details/47272853

2015-08-04

GridView_ImageLoader 实例demo

在加载网络图片时,我们经常遇到OOM错误,这个demo引用了ImageLoader框架,解决了listView滑动时的卡顿,重用机制得到了更好的体验。 特意整理了demo,简单易上手,希望对大家有用。 jar包在libs目录下。

2014-12-04

spinner的使用及问题

spinner 加载时会默认执行一次,为了解决这个办法,引入了一个变量。 可以参考博客: http://blog.csdn.net/u011368551/article/details/41644381

2014-12-01

开机自启,服务,广播,notification的联合使用

本人使用国产手机测试成功。包括重启之后仍然弹出 notification。 杀不死的服务。 定时弹出 notification,重启之后仍然有效。 请勿用小米 测试,后果自负。

2014-11-21

android智能机器人

调用接口,直接和机器人聊天。 如果在断网的情况下,会提示服务器挂了。

2014-09-17

android课表源码

android课表源码,肯定可以run

2014-09-17

android高仿京东商城

模仿京东的页面,保证可以运行,可以仿照着加入项目中,是个不错的布局。

2014-09-17

android 第一次运行时引导界面

看见网上的代码都比较复杂,自己花了点时间写了一个,如果要加入到项目中,还是下载这个比较好,因为代码简单,但是能达到最好的效果,并且自己修改完全看得懂。 期待你的下载 !

2014-09-12

android简单的计算器

很简单的android计算器源码,保证可以运行

2014-09-12

android仿QQ锁屏源码

仿QQ锁屏的源码,保证可以运行。 快去感受酷炫的效果吧

2014-09-12

android查找指定目录下的视频或图片

本来一直想调用系统图库打开指定目录下的图片或者视频,到网上查看了很久,发现只能查看全部,而我需要打开指定文件夹下的,没办法,只有硬着头皮先把文件路径查找出来,再查看。 运行时请注意路径!

2014-09-04

滑动删除Item

很经典的滑动删除,类似于以前三星手机上的滑动拨号,比一般的高端一点!

2014-07-18

别踩白块源码

经典游戏别踩白块源码,自己DIY 嘚瑟一下自己的小伙伴吧 !

2014-07-18

2048游戏完整源码

完整的2048源码,导入即可运行,可以自己DIY游戏哦 !

2014-07-18

FlappyBird源码

代码完整,导入即可运行,学习娱乐都可以,想嘚瑟一下你的小伙伴吗?更改游戏值是非常简单的

2014-07-18

低能耗蓝牙demo

低能耗蓝牙demo,一目了然,配对,连接,等都有。 不懂得参考官方文档 https://developer.android.com/intl/zh-cn/guide/topics/connectivity/bluetooth-le.html

2014-07-14

android将按钮转化为圆角

很简单,看代码就懂,根据文档复制xml进去,然后再让你的按钮引用它就可以看到效果了

2014-05-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除