本文章已授权微信大众号郭霖(guolin_blog)转载。
该控件能够便当调试呼应数据,如下图所示:
控件的款式参阅以下这个网站:
JSON在线解析解析及格式化验证
项目的GitHub:JSOjvm调优NRecyclerView
项目Demo的GitHub:JSONRecyclerViewDemo
概述
控件是以RecyclerView为基础,文本会出现相应的色彩以反映对应的类型,假定https协议值的类型为JSONObject或许JSONArray,该数据对应http 302的视图能够翻开或许缩短,除此https认证之外,文本的巨细或许色彩都能够自定义更改。
文本分为以阅读器的前史下七种类型:
- 一般文本:冒号jvm参数、花括号、中括号、逗号、Object{…}和Arrayandroid什么意思[]。
- key类型的文本
- String类型的文本
- Numberjvm内存结构类型的文本
- Boolean类型的文本
- url文本
- nullHTTPS文本
默许文本色彩如下所示:
<color namejvm废物收回机制="d阅读器前史记载删了怎样找回efault_text_color">#3https认证33333</color>
<color name="defaujvm优化lt_key_color">android/yunos;#92278f</color>
<color name="default_string_color">#3ab54a</color>
<color name="default_number_color">#25android平板电脑价格aae2&lhttpwatcht;/color>
<color name="default_boolean_color">#f98280</color>
<android是什么手机牌子col阅读器拜访过于频频不能用or name="default_url_color">#61d2d6</color>
<colhttpwatchor nandroid平板电脑价格ame="default_null_color">#jvm参数f1592a</cojvm优化lor>
运http 404用办法
运用办法如下所示:
导入到项目
先在主项HTTP目的build.gradle文件增加http://www.baidu.com如下代码:
aandroid下载llprojects {
repositorijvm废物收回机制es {
...
maven { url 'https://jitpack.io' }
}
}
然后在你想要运用的模块中增加依赖,对应的build.ghttps域名radle文件代码如下所示:
dependencies {
implementation 'com.github.TanJihttp 500aJunBeyond:JSONRecyclerView:1.0.0'
}
增加到视图
然后将JsonRecyclerVhttp 500iew增加到android/yunosxml文件中,代码如下所示:
<com.tanjiajun.jsonrecyclerview.view.JSONRecyclerView
android:id="@+iandroid手机d/rv_json"
android:layout_width="matAndroidch_paandroid是什么手机牌子rent"
android:layout_height="match_parent" />
或许经过addView相关的办法增加到视图中,代码如下所示:
val rvJson = JSONRecyclerHTTPView(this)
linearLayout.addView(rvJson)
咱们可阅读器怎样检查前史阅读记载以经过sjvm功能调优etStyle办法改动款式,代码如下所示:
rvJsandroid手机on.setStyles(textColor = ContextCompat.getColor(this,R.color.black))
绑定数据
经过bindData办法绑定数据,接受JSON字Android符串、JSONObject和JSONArray三种jvm参数类型的数据。
当咱们数据类型是JSON字符串的时分,能够调用以下办法:
// JSONRecyclerView.kt
/**
* 绑定JSON字符串数据。
* Bind the json string data.
*
* @param jsonString Thhttps域名e json string to bind.(要绑定的JSONjvm内存结构字符串。)
*/
fun bindData(jsonStringandroid手机: String) =
adahttp协议pter.bindData(jsonString阅读器的阅读前史怎样删去)
当咱们数据类型是JHTTPSSONObject的时分,能够调用以下办法:
// JhttpclientSONRecyclerView.kt
/**
* 绑定JSONObject数据。
* Bind the json objec阅读器怎样翻开网站t data.
*
* @param jsonObjvm内存模型ject The json object to bind.(要绑定的JSONObject。)
*/
fun bindData(jsonObject: JSONObjejvm内存模型ct) =
adapter.bindData(jsonObject)
当咱们数据类型是JSONArray的阅读器的阅读前史怎样删去时分,能够调用以下办法:
// JSONRecyclerView.kt
/**
* 绑定JSONArray数据。
* Bind the json array data.
*
* @param jsonArray The json array to bind.(要绑定的JSONArray。)
*/
fun biandroid是什么手机牌子ndDhttps和http的差异ata(jsonArray: JSONAr阅读器ray) =
adapter.bindData(jsonArray)阅读器前史上的痕迹在哪里
示例代码
代码如下所示:
package cHTTPSom.tanjiajun.jsonrecyclerviewdemo
import android.os.Bunhttps域名dle
import阅读器前史记载设置 androihttp协议dx.appcompat.app.AppCompatActivity
import cohttp 500m.tanjiajun.jsonrecyclerview.view.JSONRecycler阅读器看过的视频在哪里View
/**
* Created by TanJiaJ阅读器前史记载删了怎样找回un on 6/1/21.
*/
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savjvm功能调优edInstanceState)
setCohttp://www.baidu.comntentVhttp协议iew(R.layout.activity_main)
findViewById<JSONRecyclerView>(R.id.rv_json).bindData(
"{n" +
" "string":"string",n" +
"jvm调优 "number":100,n" +
" "boolean":true,n" +
" "android什么意思url":"https://github.com/TanJiaJunBeyond/JSONRecyclerV阅读器前史记载删了怎样找回iew",n" +
" "JSONObject"阅读器怎样翻开网站:{n" +
" "string":"string",n" +
" "number":100,n" +
" "boolean":trandroid什么意思uen" +
" }android下载装置,n" +
" "JSONArrahttps和http的差异y":[n" +
" {n" +
" "string":"string",n" +HTTP
" "jvm废物收回机制number":100,n" +
" "https域名boolean":truen" +
" }n" +
" ]n" +
"}"
)
}
}
中心代码
大部分代码都有中英文对应的注释,可能有些阅读器的前史当地翻译地不太好,请各位见谅哈。
上面也提到了,该控件是以Randroid平板电脑价格ecyclerView为基础,涉及到JsonItemView、JsonViewAdapter和JsonRecyclerView三个类。
JSONItemView
该类用于展现每一条数据对应的视jvm优化图,用到的布局文件是item_json_view.xml,它承继LinearLayout,有四个要害的变量,代码如下所示:
// Jjvm优化SONItemView.kt阅读器前史记载删了怎样找回
privajvm调优te lateinit var tvLeft: TextView
private lateinit var ivIcon: ImageView
private lateinit vaandroid是什么手机牌子r tvRight: TextView
/**
* Set the sandroid下载caled pixel text size.
* 设置文本巨细。Android
*/
var textSize = DEFAULT_TEXT_SIZE_Sandroid下载P
set(value) {
// 规划是[12.0F,30.0F]
field = when {
value < 12.0F -> 12.0F
value > 3阅读器怎样翻开网站0.0F -> 30.0F
else -> value
}
// 设置左面android平板电脑价格文本的文字巨细
tvLeft.textSize = field
// 设置展现翻开和缩短图标的巨细
val size = TypedValue.applyDimension(
TypedValue.COMPLEhttps协议X_UNIT_DIP,
field,
resources.displayMetrics
).toInt()
ivIcon.layoutParams = (ivIcon.layoutParamshttps安全问题 as LinearLayoHTTPSut.LayoutParams).apply {
width = size
height = size
}
// 设置右边文本Android的文字巨细
tvRight.textSize = field
}
-
变量tvLeft是左面的TextView,用于展现key相关的文本。
-
变量ivIcon是中心的ImageView,用于展现翻开或许缩短的图标
-
变量tvRight是右边的TextView,用于展现valujvm内存模型e相关的文本。
-
变量textSi阅读器怎样检查前史阅读记载ze是public的变量,能够经过该变量改动文本的巨细,要注意的是,单位是sp,无论是赋多大或许多小值,文本https和http的差异的最小值是12sp,最大值是30sp。
JSONViewAdapter
该类用于处理不同类型的数据和点击相关的逻辑,它承继RecyclerView.Adapter,首要涉及到如下几个要害的办法androidstudio装置教程:
onBindViewHolder办法
代码如下所示:
// JSONViewAdapter.kt
override fun onBindViehttp 302wHolder(holderandroidstudio装置教程: JSONViewAdapter.JsonItemViewHolder, position: Int) {
with(holder.jsonItemView) {
textSize = this@JSONViewAdapter.textSize
setRightColojvm参数r(textColor)
jhttps协议sonObject?.lhttp署理et { binhttps认证dJSONObjectData(position, it) }
jsonArray?.let { bindJSONArrayData(position, it) }
}
}
作用是将数据绑定到视图,假定数据类型是JSONObject,就调用bindJSONObjectData办法,假定数据类型是JSONArray,就调用bindJSONArrayData办法。
handleValue办法
代码如下所示:
// JSONViewAdapter.ktandroid下载
/**
* Handle the styling of the right part of the json item vieandroidstudio装置教程w (i.e., the part that shows the value).
* 处理JsonItemVijvm功能调优ew右边部分的款式(即展现值的部分)。
*
* @param value The value to be displayed in the json item view.(要在JsonItemViehttps安全问题w展现的value。)
* @param itemView The json item view to be processed.(要处理的JsonItemView方针。)
* @param ajvm内存模型ppendComma Whether to append commas.(是否附加逗号。)
* @param hierarchy The number of view hierarchies.(View的层次结构数量。)
*/
private fun handleValue(
value: Any?,
itemView: JSONItemView,
appendComma: Boolean阅读器下载,
hierarchyjvm参数: Int
) {
itemView.showRight(ShttpclientpannableStringBuilder().apply {
when (value) {
is Number ->
// 处理值为Number类型的款式
handleNumberValue(itemView, value)
is Boolean ->
// 处理值为Boolean类型的款式jvm是什么
handleBooleanValue(itemView, value)
is String ->
// 处理值为String类型的款式
handleStringValue(itemView, value)
is JSONObject ->
// 处理值为JSONObject类型的样阅读器怎样翻开网站式
handleJhttps协议SONObjectValue(itemjvm调优Vihttpwatchew, value, appendComma, hierarchy)
is JSONArray -&android的drawable类gt;
// 处理值为JSONArray类型的款式
hanjvm功能调优dleJSONArrayValue(itemView, value, appendComma, hierarchy)
else ->
// 处理值为JVMnull的款式
handleNullValue(itemView)
}
if (appendComhttp署理ma) append(",")
})
}
onClick办法
假定数据类型是JSOjvm废物收回机制NObject或许JSONArray的话,能够经过点击来翻开或许缩短视图,代码如下所示:
假定是榜初度翻开jvm调优,就调用performFirstExpand办法,不然就调用阅读器前史记载删了怎样找回performClicjvm内存结构k办法,代码如下所示:
// JSONViewAdapter.kt
override fun onClick(v: View?) {
// 假定itemView的子View数量https域名是1,就证明这是榜初度翻开
(itemView.childCount == 1)
.yes { performFirstExpand() }
.otherwisjvm功能调优e { performClick() }
}
performFirstExp阅读器怎样检查前史阅读记载and办法
该办法用于榜初度翻开jvm是什么JSONObject或许JSONArray对应的itemView,代码如下所示:
// JSONViewAdapter.kt
/**
* The first time the view corresponding to a JSONObject or JSONArray is expanded.
* 榜初度翻开JSONObject或许JSONArray对应android下载装置的itemView。
*/
private fun performFirstExpand() {
isExpanded = true
itemViandroid的drawable类ew.showIchttpwatchon(false)
itemView.https安全问题tag = itemView.getRightText()
itemView.s阅读器下载howRight(if (isJsonObject) "{" else "[")
// 翻android下载装置开该层级以下的视图
val array: JSandroidstudio装置教程ONArray? =
if (isJsonObject) (value as JSONObject).names() else value ashttps和http的差异 JSONArray
val length = array?.length() ?: 0
for (i in 0 untiljvm原理 length) {
itemView.addViewNoInvalidate(JSONItemView(itemView.context)http 404.apply {
textSize = this@JSONViewAdapter.textSize
setRightandroid平板电脑价格Color(textColor)
val ch阅读器的前史ildValue = array?.opt(i)
isJsonObject阅读器看过的视频在哪里
.yes {
handleJSONObject(
key = childValue as String,
value = (value as JSONObject)[childValue],
appendComma = i < length - 1,
hiandroid是什么手机牌子erarchy = hierarchy
)
}
.other阅读器下载wise {
handleJSONArray(
value = childValue,
appendComma = i < lehttps和http的差异ngth - 1,
hierarchy = hierarchy
)
}
})
}
// 展现该层级毕竟的一个视图
itemView.addViewNoI阅读器nvalidate(JSONItemView(itemView.contjvm优化ext).apply {
textSize = this@JSONV阅读器怎样检查前史阅读记载iewAdapter.textSize阅读器拜访过于频频不能用
setRight阅读器怎样翻开网站Color(textColorandroid下载装置)
showRight(
StringBuilder(getHierarchyStr(hijvm内存模型erarchy - 1))
.append(阅读器怎样检查前史阅读记载if (isJsonObject) "}" else "]")
.append(if (appendComma) "," else "")
)
})
// 重绘itemView
itemView.requestLayout()
itemView.invalidate()
}
performClick办法
该办法用阅读器怎样检查前史阅读记载于点击后翻开或许缩短,代码如下所示:
/**
* Click to expand or collapse.
* 点击后翻开或许缩短androidstudio装置教程。
*/
private fun performClick() {
itemView.sAndroidh阅读器前史上的痕迹在哪里owIcon(isExpanded)
val rightText =androidstudio装置教程 itemView.getRightText()
itemVie阅读器怎样检查前史阅读记载w.showRight(itemView.tag as CharSequencandroid体系e)
itemView.tag = rightText
for (i in 1 until itemHTTPView.childCount) {
// 假定翻开的话,就把子View都设成可见状况,不然就设为躲藏状况
itemView.getChiljvm废物收回机制dAt(i).visibility = if (isExpanded) View.GONE else Vjvm调优iew.VISIBLE
}
isExpajvm是什么nded = !isExpanded
}
假定数据类型是url的话,能够经过点击来翻开android下载阅读器检查,代码如下所示:
/**
* Click to expand or collapse.
* 点击后翻开或许缩短。
*/
private fun performClick() {
itemView.showIcon(isExpanded)
val rightText = itemView.getRightText()
itemView.showRight(itemView.tag as CharSequencjvm内存模型e)
itemView.tag = rightText
for (i in 1 until itemView.childCount) {
// 假定翻开的话,就把子View都设成可见状况,不然就设为躲藏状况
item阅读器前史记载设置View.getChildAt(i).visibility = if (isExpanded) View.GONE else View.VISIBLE
}
isExpanded = !isExpanded
}
判别是否是url类型的正则表达式如下所示,注释现已写得很https域名详细,这儿就不再赘jvm是什么意思述:
private val urlAndroidPatterhttp协议n: Pattern = Pattern.compile(
// 验证是否是http://、https://、ftp://、rtsp://、mms://其间一个
"jvm功能调优^((http|https|ftp|rtsp|mms)?://)android体系?" +
// 判别字符是否为FTP地址(ftp://user:password@)
// 判别字符是否为0到9、小写字母a到z、_、!、androidstudio装置教程~、*、'、(、)、.、&am阅读器前史记载设置p;、=、+、$jvm参数、%、-其间一个jvm调优,匹配零次或许一https认证次
"(([0-9a-z_!~*'().&=+$%-]+: )?"jvm是什么意思 +
// 判别字符是否为0到9、小写字阅读器前史记载删了怎样找回母a到z、_、!、~、*、'、(、)、.阅读器前史记载删了怎样找回、&https认证;、阅读器怎样翻开网站=、+、$、%、-其间一个,匹配一次或许多次
"[0-9a-z_!~*'().&=+$%-]+" +
// @
"@)?" +
// 判别字符是否为IP地址,比如:192.168.255.255
// 判别字符是否匹配1+[0到9,匹配两次]android什么意思,例如:192
"((1d{2}" +
// 或许
"|" +
// 判别字符是否匹配2+[0到4,匹配一次]+[0到9,匹配一jvm是什么意思次],例如:225
"2[0-4]d" +
// 或许
"|" +
// 判别字符是否匹配25+[0到5,匹配一次],例如:255
"25[0-5]" +
// 或许
"|" +
// 判别字符是否匹配[1到9,匹配一次]+[0到9,匹配一次],例如:25
"[1-9]d" +
// 或许
"|" +
// 判别字符是否匹配1到9,匹配一次,例如:5
"[1-9])" +
// 判别字符是否匹配.(1d{2}|2[0-4]d|25[0-5]|[1-9]d|d),匹配三次
"(.(" +
// 判别字符是否匹配1+[0到9,匹配两次],例如:192
"1d{2}" +
// 或许
"|" +
// 判别字符是否匹配2+[0到4,匹配一次]+[0到9,匹配一次],例如:225
"2[0-4]d" +
// 或许
"|" +
// 判别字符jvm内存模型是否匹配25+[0到http 3025,匹配一次],例如:255
"2android下载5[0-5]" +
// 或许
"|" +
// 判别字符是否匹配[1到9]+httpwatch[0到9],例如:25
"[1-9]d" +
// 或许
"|" +
// 判别字符是否匹配android下载装置0到9,匹配一次,例如:阅读器的前史5
"d))" +
// 匹配三次
"{3}" +
// 或许
"|" +
// 判别字符是否为域名(Domain Name)
// 三级域名或许以上,判别字符是否为0到9、小写字母a到z、_、!、~、*、'、(、)、-其间一个,android下载装置匹配零次或许多次,然后加上.,例如:www.
"([0-9a-z_!~*'()-]+.)*" +
// 二级域名,长度不能超过63个字符,先判别第一个字符是否为0到9、小写字母a到z其间一个,匹配一次android体系,然后判别第二个字符是否为0到9、小写字母a到z、-其间一个,最多匹配61次,https和http的差异这两个字符匹配零次或许jvm参数一次,毕竟判别第三个字符是否为0到9、小写字母a到z其间一个,然后加上.
"([0-9a-z][0-9a-z-]{0,61阅读器前史记载设置})?[0-9a-z]" +
// 尖端域名,判别字符是否为小写字母a到z其jvm功能调优间一个,匹配最少两次、最多六次,例如:.com、.cn
".[a-zjvm调优]{2,6})" +
// 端口号,判别字符是否匹配:+[0到9,匹配最少一次、最多四次],匹配零次或许一次
"(:[0-9]{1,4})?" +
// 判别字符是否为斜杠(/),匹配零次或许一次,假定没有文件名,androidstudio装置教程就不需要斜杠
"((/?)|" +
// 判别字符是否为httpwatch0到9、小写字母a到zjvm内存结构、大写字母A到Z、_、!、~、*、'、(、)、.、android手机;、?、:、@http 302、&、=、+、$、,、%、#、-其间一个,匹配一次或许jvm废物收回机制多次
"(/[0-9a-zA-Z_!~*'(jvm调优){}.;?:@&=+$,%#-]+)+" +
// 判别字符是否为斜杠(/),匹配零次阅读器拜访过于频频不能用或许一次
"/?)$"
)
该正则表达式可视化图如下所示:
JSONRecyclerView
该类用于将要处理的android手机数据以列表的方法展现到视图,注jvm内存模型释写得比较清楚,这儿就不再赘述了,代码如下所示:
// JSONRecychttp://192.168.1.1登录lerView.kt
package com.tanjiajun.jsonrecyclerview.vieandroidstudio装置教程w
import android.content.Context
import android.util.AttributeSet
import androidx.annotation.阅读器怎样翻开网站ColorHTTPSInt
ijvm功能调优mport androidx.core.content.ContextCompat
imp阅读器怎样翻开网站ort androidx.recyclerview.widget.LinearLayoutManager
i阅读器前史记载设置mport androidx.recyclerview.widget.RecyclerView
import com.tanjiajun.jsonrecyclerview.DEFAULT_TEXT_SIZE_SP
import com.tanjiajun.jsonrecyclerview.R
importhttps认证 com.tanjiajun.jsonrecyclerview.adapter.JSONVjvm功能调优iewAdapter
import org.json.JSONArray
iandroid什么意思mport org.json.Jhttp 404SONObject
/**
* Created by TanJiaJ阅读器拜访过于频频不能用un on 3/24/21.
*/
class J阅读器SONRecyclerView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : RecyclerView(context, attrs, defStyleAttr) {
private val adapter = JSONViewAdapter(context)
init {
layoutManager = LinearLayoutManager(context)
setAdapter(adapter)
}
/**
* 绑定JSON字符串数据。
* Bind the json string data.
*
* @param jsonString Theandroid下载装置 json string to bind.(要绑定的JSON字符串。)
*/
fun bindData(jsonString: String) =
adapter.bindData(jsonString)
/**
* 绑定JSONObjecandroid是什么手机牌子t数据。
* Bind the json objecandroid什么意思t data.
*
* @param jsonObject The json object to bind.(要绑定的JSONObject。)
*/
fun bindData(jsonObject: JSONObject) =
adapter.bindDandroidstudio装置教程ata(jsonObject)
/**
* 绑定JSONArray数据。
* Bind the json array data.
*
* @param jsonArray Thhttp 500e json array to bind.(要绑定的JSONArray。)
*/
fun bindData(jsonA阅读器前史上的痕迹在哪里rray: JSONArray) =
adapter.bindData(jsonArray)
/http署理**
* 设置http署理JsonItemViehttp://192.168.1.1登录w的款式。
* Set the json item view styles.
*
* @param textSize The size of all text.(一切Android文本的巨细。)
* @param textColor The normal text color.(一般文本的色彩)
* @param kejvm内存结构yColor The color of the text of typehttp 500 key.(key类型文本的色彩。)
* @param stringColor The colhttps和http的差异or of the text o阅读器的前史f type String.(字符串类型android手机文本的色彩。)
* @parhttps协议am numberHTTPSColor The color of the text of type Number.(Numandroid平板电脑价格ber类型文本的色彩。)
* @param booleanColor The color of text of type Boolean.(Boolean类型文本的色彩。)
* @param urlColor The color of url text.(url文本的色彩。)
* @paandroid下载装置r阅读器的阅读前史怎样删去am nulljvm调优Color The color of null text.(阅读器的前史null文本的色彩。)
*/
@Jvmhttps认证Overloads
fun setStyles(
textSiz阅读器拜访过于频频不能用eandroid体系: Float = DEFAULT_TEXT_SIZE_SP,
@Cojvm参数lorInt textColor: Int = ContextCompat.getColor(context, R.cojvm优化lor.default_text_color),
@ColorInt kejvm参数yColor: Int = ContextCompat.getColor(context, R.color.dehttp协议fault_key_cjvm是什么意思olor),
@ColorInt stringCoandroid什么意思lor: Inhttpclientt = ContextCompajvm是什么意思t.getColor(c阅读器的前史ontext, R.color.defhttps和http的差异ault_string_color),
@ColorInt numberColor: Int = ContextCompat.getColor(con阅读器的前史text阅读器前史上的痕迹在哪里, R.colojvm原理r.default_number_color),
@ColorInt boandroid体系oleanColor: Int = ContextCompat.getColor(
context,
R.color.default_boolean_color
),
@ColorInt urlColor: Int = Contextjvm原理Compat.getColor(context, R阅读器.color.default_url_color),
@ColorInt nullColor: Intandroid下载装置 = ContextCompat.getColor(context, R.color.default_null_color)
) {
with(adapter) {
this.textSize = when {
textSize < MIN_TEXT_SIZE ->https和http的差异; MIN_TEXT_Sandroid下载装置IZE
textSize &gandroidstudio装置教程t; MAX_TEXT_SIZE -> MAX_TEXT_SIZE
else -> textSize
}
this.textCojvm调优lor = textColor
this.keyColor = keyColor
this.stringColor = stringColor
this.numberColor = numberColor
this.booleanColor = booleanColor
this.urlColor = urlColor
this.nullColor = nullColor
// 改写列表
noti阅读器看过的视频在哪里fyData阅读器前史记载设置SetChanged()
}
}
private companandroid的drawable类ion object {
const val MIN_TEXT_SIZE = 12.0F
const val MAX_TEXT_SIZE = 24.0F
}
}
题外话
介绍一android是什么手机牌子个android是什么手机牌子将jvm调优正则表达式可视化的网站,网址如下:
Regexper
我的GitHub:TanJiaJunBeyond
Android通用结构:Android通用结构
我的:谭嘉俊
我的简书:谭嘉俊
我的CSDN:谭jvm调优嘉俊