中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

做網(wǎng)站單頁(yè)視頻谷歌關(guān)鍵詞優(yōu)化怎么做

做網(wǎng)站單頁(yè)視頻,谷歌關(guān)鍵詞優(yōu)化怎么做,重慶手機(jī)網(wǎng)站制作費(fèi)用,專(zhuān)門(mén)做產(chǎn)品定制的網(wǎng)站文章目錄 Android StateLayout狀態(tài)頁(yè)概述源碼使用源碼下載 Android StateLayout狀態(tài)頁(yè) 概述 StateLayout(狀態(tài)頁(yè))包含:加載中頁(yè)面,錯(cuò)誤頁(yè)面,空頁(yè)面,內(nèi)含狀態(tài)默認(rèn)頁(yè)面,支持自定義頁(yè)面。 源碼 …

文章目錄

  • Android StateLayout狀態(tài)頁(yè)
    • 概述
    • 源碼
    • 使用
    • 源碼下載

Android StateLayout狀態(tài)頁(yè)

概述

StateLayout(狀態(tài)頁(yè))包含:加載中頁(yè)面,錯(cuò)誤頁(yè)面,空頁(yè)面,內(nèi)含狀態(tài)默認(rèn)頁(yè)面,支持自定義頁(yè)面。

在這里插入圖片描述

源碼

全局配置:

package com.example.tools.state_layout.widgetsimport android.view.View
import androidx.annotation.LayoutRes/*** StateLayout全局配置*/
object StateConfig {@LayoutRes@JvmStaticvar emptyLayoutRes = View.NO_ID@LayoutRes@JvmStaticvar errorLayoutRes = View.NO_ID@LayoutRes@JvmStaticvar loadingLayoutRes = View.NO_ID@LayoutRes@JvmStaticvar retryIds: IntArray? = nullprivate var mOnStateChangeListener: OnStateChangeListener? = nullfun setOnStateChangeListener(listener: OnStateChangeListener) {mOnStateChangeListener = listener}fun getOnStateChangeListener(): OnStateChangeListener? {return mOnStateChangeListener}
}

狀態(tài)監(jiān)聽(tīng):

interface OnStateChangeListener {fun showState(status: Int)
}

屬性:

<declare-styleable name="StateLayout"><attr name="empty_layout" format="reference" /><attr name="loading_layout" format="reference" /><attr name="error_layout" format="reference" />
</declare-styleable>

代碼:

class StateLayout @JvmOverloads constructor(context: Context,attrs: AttributeSet? = null,defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr) {companion object {const val STATE_LOADING = 0xA001const val STATE_EMPTY = 0xA002const val STATE_ERROR = 0xA003const val STATE_CONTENT = 0xA004}// empty布局資源@LayoutResprivate var emptyLayoutRes = View.NO_IDget() = if (field == View.NO_ID) StateConfig.emptyLayoutRes else field// loading布局資源@LayoutResprivate var loadingLayoutRes = View.NO_IDget() = if (field == View.NO_ID) StateConfig.loadingLayoutRes else field// error布局資源@LayoutResprivate var errorLayoutRes = View.NO_IDget() = if (field == View.NO_ID) StateConfig.errorLayoutRes else field// 保存狀態(tài)private val stateInfoMap = ArrayMap<Int, View>()// 當(dāng)前狀態(tài)private var currentState = STATE_CONTENT// 需要設(shè)置點(diǎn)擊事件的idprivate var retryIds: IntArray? = nullget() = field ?: StateConfig.retryIdsprivate var mOnStateChangeListener: OnStateChangeListener? = nullget() = field ?: StateConfig.getOnStateChangeListener()init {val a: TypedArray = context.obtainStyledAttributes(attrs, R.styleable.StateLayout)emptyLayoutRes = a.getResourceId(R.styleable.StateLayout_empty_layout, View.NO_ID)loadingLayoutRes = a.getResourceId(R.styleable.StateLayout_loading_layout, View.NO_ID)errorLayoutRes = a.getResourceId(R.styleable.StateLayout_error_layout, View.NO_ID)a.recycle()}override fun onFinishInflate() {super.onFinishInflate()if (childCount != 1) {throw IllegalStateException("StateLayout必須只能有一個(gè)子View")}if (stateInfoMap.size == 0) {val view = getChildAt(0)setContentView(view)}}/*** 設(shè)置內(nèi)容布局*/private fun setContentView(contentView: View) {stateInfoMap[STATE_CONTENT] = contentView}/*** 設(shè)置點(diǎn)擊事件*/fun setRetryIds(@IdRes vararg ids: Int) {retryIds = ids}/*** 設(shè)置狀態(tài)變化監(jiān)聽(tīng)*/fun setOnStateChangeListener(listener: OnStateChangeListener) {mOnStateChangeListener = listener}/*** 顯示內(nèi)容布局*/fun showContent() {showState(STATE_CONTENT)}/*** 顯示加載布局*/fun showLoading() {showState(STATE_LOADING)}/*** 顯示失敗布局*/fun showError() {showState(STATE_ERROR)}/*** 顯示空布局*/fun showEmpty() {showState(STATE_EMPTY)}/*** 顯示視圖*/private fun showState(status: Int) {if (currentState == status) {return}val stateView = getStateView(status)for (i in stateInfoMap) {if (i.key != status) {val view = i.valuehideStateView(view)}}showStateView(this, stateView, status)mOnStateChangeListener?.showState(status)currentState = status}/*** 獲取狀態(tài)視圖*/private fun getStateView(status: Int): View {val view = stateInfoMap[status]if (view != null) {return view} else {val layoutRes = when (status) {STATE_EMPTY -> emptyLayoutResSTATE_ERROR -> errorLayoutResSTATE_LOADING -> loadingLayoutResSTATE_CONTENT -> View.NO_IDelse -> View.NO_ID}if (layoutRes == View.NO_ID) {when (status) {STATE_ERROR -> throw Resources.NotFoundException("請(qǐng)?jiān)O(shè)置errorLayout")STATE_EMPTY -> throw Resources.NotFoundException("請(qǐng)?jiān)O(shè)置emptyLayout")STATE_LOADING -> throw Resources.NotFoundException("請(qǐng)?jiān)O(shè)置loadingLayout")STATE_CONTENT -> throw Resources.NotFoundException("請(qǐng)?jiān)O(shè)置contentView")}}val view = LayoutInflater.from(context).inflate(layoutRes, this, false)stateInfoMap[status] = viewreturn view}}/*** 隱藏視圖*/private fun hideStateView(view: View) {view.visibility = View.GONE}/*** 顯示視圖*/private fun showStateView(container: StateLayout, view: View, status: Int) {if (container.indexOfChild(view) != -1) {view.visibility = View.VISIBLE} else {if (status == STATE_EMPTY || status == STATE_ERROR) {if (retryIds != null) {for (id in retryIds!!) {view.findViewById<View>(id).setOnClickListener {showLoading()}}}}container.addView(view)}}
}

使用

使用全局配置:

<com.example.tools.state_layout.widgets.StateLayoutandroid:id="@+id/state_layout"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:text="加載成功" />
</com.example.tools.state_layout.widgets.StateLayout>
StateConfig.emptyLayoutRes = R.layout.state_empty
StateConfig.errorLayoutRes = R.layout.state_error
StateConfig.loadingLayoutRes = R.layout.state_loading
StateConfig.retryIds = intArrayOf(R.id.state_msg, R.id.state_iv)StateConfig.setOnStateChangeListener(object : OnStateChangeListener {override fun showState(status: Int) {when (status) {StateLayout.STATE_LOADING -> {LogUtils.e("StateLayout", "顯示加載頁(yè)")postDelayed({stateLayout.showContent()}, 2000L)}StateLayout.STATE_CONTENT -> {LogUtils.e("StateLayout", "顯示內(nèi)容頁(yè)")}StateLayout.STATE_ERROR -> {LogUtils.e("StateLayout", "顯示失敗頁(yè)")}StateLayout.STATE_EMPTY -> {LogUtils.e("StateLayout", "顯示空頁(yè)")}}}
})

使用局部配置:

<com.example.tools.state_layout.widgets.StateLayoutandroid:id="@+id/state_layout"android:layout_width="match_parent"android:layout_height="match_parent"app:empty_layout="@layout/state_empty"app:error_layout="@layout/state_error"app:loading_layout="@layout/state_loading"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:text="加載成功" />
</com.example.tools.state_layout.widgets.StateLayout>
stateLayout.setRetryIds(R.id.state_msg, R.id.state_iv)
stateLayout.setOnStateChangeListener(object : OnStateChangeListener {override fun showState(status: Int) {when (status) {StateLayout.STATE_LOADING -> {LogUtils.e("StateLayout", "顯示加載頁(yè)")postDelayed({stateLayout.showContent()}, 2000L)}StateLayout.STATE_CONTENT -> {LogUtils.e("StateLayout", "顯示內(nèi)容頁(yè)")}StateLayout.STATE_ERROR -> {LogUtils.e("StateLayout", "顯示失敗頁(yè)")}StateLayout.STATE_EMPTY -> {LogUtils.e("StateLayout", "顯示空頁(yè)")}}}
})

源碼下載

http://www.risenshineclean.com/news/29642.html

相關(guān)文章:

  • 做網(wǎng)站只有域名關(guān)鍵詞搜索量排名
  • 深圳找人做網(wǎng)站aso優(yōu)化師
  • 圖庫(kù)網(wǎng)站源碼下載外貿(mào)網(wǎng)絡(luò)營(yíng)銷(xiāo)平臺(tái)
  • 滁州市大滁城建設(shè)網(wǎng)站章魚(yú)磁力鏈接引擎
  • 幫人代做靜態(tài)網(wǎng)站多少錢(qián)剛出來(lái)的新產(chǎn)品怎么推
  • 電商網(wǎng)站設(shè)計(jì)方案大全建立網(wǎng)站需要多少錢(qián)
  • 寧波建設(shè)監(jiān)理管理協(xié)會(huì)網(wǎng)站營(yíng)銷(xiāo)的手段和方法
  • 有edi證書(shū)可以做網(wǎng)站運(yùn)營(yíng)么巧克力軟文范例200字
  • 網(wǎng)站描述多個(gè)詞怎么分隔互聯(lián)網(wǎng)推廣銷(xiāo)售是做什么的
  • 傳奇怎么建設(shè)自己的網(wǎng)站怎樣在百度上建立網(wǎng)站
  • 長(zhǎng)沙做網(wǎng)站推廣哪家好惠州網(wǎng)站制作推廣
  • 湛江網(wǎng)站建設(shè)外包網(wǎng)絡(luò)推廣技巧
  • 鄭州艾特網(wǎng)站建設(shè)營(yíng)銷(xiāo)咨詢(xún)服務(wù)
  • 商標(biāo)設(shè)計(jì)logo網(wǎng)站廣州seo優(yōu)化推廣
  • 2018年的網(wǎng)站制作免費(fèi)的行情軟件app網(wǎng)站
  • 網(wǎng)站編程學(xué)習(xí)百度關(guān)鍵詞排名優(yōu)化
  • 滄州建設(shè)網(wǎng)站ip反查域名網(wǎng)站
  • 安徽網(wǎng)站設(shè)計(jì)百度做個(gè)人簡(jiǎn)介多少錢(qián)
  • 網(wǎng)站開(kāi)發(fā)技術(shù)實(shí)驗(yàn)報(bào)告主流搜索引擎有哪些
  • 服裝公司 網(wǎng)站怎么做站長(zhǎng)之家ppt素材
  • 用.net做視頻網(wǎng)站的案例淄博網(wǎng)站推廣
  • 做網(wǎng)站費(fèi)用 優(yōu)幫云網(wǎng)站友情鏈接
  • 做網(wǎng)站要用到什么軟件外貿(mào)seo是啥
  • 我的家鄉(xiāng)網(wǎng)頁(yè)制作代碼寧波seo外包推廣公司
  • 武漢做網(wǎng)站價(jià)格公關(guān)團(tuán)隊(duì)
  • asp網(wǎng)站圖片不顯示附近的教育培訓(xùn)機(jī)構(gòu)有哪些
  • 珠海網(wǎng)站建設(shè)陳玉銘千萬(wàn)不要做手游推廣員
  • wordpress 導(dǎo)購(gòu)主題網(wǎng)絡(luò)推廣seo怎么弄
  • 長(zhǎng)沙網(wǎng)站搜索引擎優(yōu)化鞍山seo優(yōu)化
  • 網(wǎng)站單頁(yè)在線(xiàn)制作軟件網(wǎng)絡(luò)營(yíng)銷(xiāo)與直播電商就業(yè)前景