当前位置: 首页 > wzjs >正文

网站建设时怎么附加数据库wordpress 教育插件

网站建设时怎么附加数据库,wordpress 教育插件,做防护信息的网站,品牌设计有哪些文章目录 Android 自定义View之底部导航栏概述代码定义TabIndex定义Tab定义TabView定义NavigationBarFragmentSwitchHelper管理类使用 源码下载 Android 自定义View之底部导航栏 概述 封装一个通用的底部导航栏控件。 代码 定义TabIndex Retention(AnnotationRetention.SOU…

文章目录

  • Android 自定义View之底部导航栏
    • 概述
    • 代码
      • 定义TabIndex
      • 定义Tab
      • 定义TabView
      • 定义NavigationBar
      • FragmentSwitchHelper管理类
      • 使用
    • 源码下载

Android 自定义View之底部导航栏

概述

封装一个通用的底部导航栏控件。

在这里插入图片描述

代码

定义TabIndex

@Retention(AnnotationRetention.SOURCE)
@IntDef(ONE_INDEX, TWO_INDEX, THREE_INDEX, FOUR_INDEX)
annotation class TabIndex {companion object {const val ONE_INDEX = 0const val TWO_INDEX = 1const val THREE_INDEX = 2const val FOUR_INDEX = 3}
}

定义Tab

data class Tab(@TabIndex val index: Int,val label: String,@DrawableRes val tabIconDefault: Int,@DrawableRes val tabIconSelected: Int,@ColorRes val tabTextColorDefault: Int = R.color.tab_unselect_color,@ColorRes val tabTextColorSelected: Int = R.color.tab_selected_color
)

定义TabView

class TabView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr) {private val paddingVertical = context.resources.getDimension(R.dimen.tab_padding_vertical).toInt()private val iconSize = context.resources.getDimension(R.dimen.tab_icon_size).toInt()private val fontSize = context.resources.getDimension(R.dimen.tab_text_size)init {layoutParams = LayoutParams(0, LayoutParams.WRAP_CONTENT).apply {weight = 1Forientation = VERTICAL}gravity = Gravity.CENTERsetPadding(0, paddingVertical, 0, paddingVertical)}fun setData(tab: Tab) {removeAllViews()addViews(tab)}private fun addViews(tab: Tab) {addView(createIcon(tab.tabIconDefault, tab.tabIconSelected))addView(createText(tab.label, tab.tabTextColorDefault, tab.tabTextColorSelected))}private fun createIcon(@DrawableRes tabIconDefault: Int,@DrawableRes tabIconSelected: Int): ImageView {val drawable = StateListDrawable().apply {addState(intArrayOf(android.R.attr.state_selected),ContextCompat.getDrawable(context, tabIconSelected))addState(StateSet.NOTHING, ContextCompat.getDrawable(context, tabIconDefault))}return ImageView(context).apply {layoutParams = LayoutParams(iconSize, iconSize)setImageDrawable(drawable)isSelected = false}}private fun createText(text: String,@ColorRes textColorDefault: Int,@ColorRes textColorSelected: Int): TextView {val states = arrayOf(intArrayOf(android.R.attr.state_selected),intArrayOf())val colors = intArrayOf(ContextCompat.getColor(context, textColorSelected),ContextCompat.getColor(context, textColorDefault))val colorStateList = ColorStateList(states, colors)return TextView(context).apply {layoutParams = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)setText(text)setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)setTextColor(colorStateList)isSelected = false}}fun selected(isSelected: Boolean) {children.forEach {it.isSelected = isSelected}}
}

定义NavigationBar

class NavigationBar @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr), View.OnClickListener {private val lineView by lazy { createLine() }private val containerView by lazy { createContainer() }private var onItemSelectedListener: ((Int) -> Unit)? = nullprivate var onItemReselectListener: ((Int) -> Unit)? = nullprivate var currentIndex: Int = ONE_INDEXinit {addView(containerView, 0)addView(lineView, 1)}fun setData(tabs: List<Tab>, defaultIndex: Int = ONE_INDEX) {containerView.removeAllViews()addViews(tabs)currentIndex = defaultIndex(containerView.getChildAt(currentIndex) as TabView).selected(true)}private fun addViews(tabs: List<Tab>) {tabs.let {for (tab in it) {containerView.addView(createTabView(tab))}}}private fun createTabView(tab: Tab): TabView {return TabView(context).apply {tag = tab.indexsetData(tab)setOnClickListener(this@NavigationBar)}}private fun createContainer(): LinearLayout {return LinearLayout(context).apply {layoutParams =LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT).apply {orientation = HORIZONTAL}gravity = Gravity.CENTER}}private fun createLine(): View {return View(context).apply {setBackgroundColor(ContextCompat.getColor(context, R.color.tab_line))layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, 1.dp, Gravity.TOP)}}override fun onClick(view: View) {if (view is TabView) {clickTabView(view)}}private var lock = falseprivate fun clickTabView(view: View) {if (lock) {return}lock = trueval selectIndex = view.tag as Intif (selectIndex == currentIndex) {onItemReselectListener?.invoke(selectIndex)} else {(containerView.getChildAt(currentIndex) as TabView).selected(false)(containerView.getChildAt(selectIndex) as TabView).selected(true)onItemSelectedListener?.invoke(selectIndex)currentIndex = selectIndex}lock = false}fun setOnItemSelectedListener(onItemSelectedListener: ((Int) -> Unit)) {this.onItemSelectedListener = onItemSelectedListener}fun setOnItemReselectListener(onItemReselectListener: ((Int) -> Unit)) {this.onItemReselectListener = onItemReselectListener}}

FragmentSwitchHelper管理类

class FragmentSwitchHelper(private val fragmentManager: FragmentManager,@IdRes private val containerId: Int
) {private var currentFragment: Fragment? = nullprivate var currentIndex: Int? = nullfun switchTo(@TabIndex index: Int) {if (currentIndex == index) {return}val transaction = fragmentManager.beginTransaction()currentFragment?.let {transaction.hide(it)}val fragment = Factory.getOrCreateFragment(index, fragmentManager)if (fragment.isAdded) {transaction.show(fragment)} else {transaction.add(containerId,fragment,index.toString())}transaction.commit()currentIndex = indexcurrentFragment = fragment}fun getCurrentIndex() = currentIndexfun getCurrentFragment() = currentFragmentobject Factory {fun getOrCreateFragment(@TabIndex index: Int, fragmentManager: FragmentManager) =when (index) {ONE_INDEX -> fragmentManager.findFragmentByTag(index.toString())?: SimpleFragment.newInstance("ONE")TWO_INDEX -> fragmentManager.findFragmentByTag(index.toString())?: SimpleFragment.newInstance("TWO")THREE_INDEX -> fragmentManager.findFragmentByTag(index.toString())?: SimpleFragment.newInstance("THREE")FOUR_INDEX -> fragmentManager.findFragmentByTag(index.toString())?: SimpleFragment.newInstance("FOUR")else -> throw IllegalStateException("非法参数")}}
}

使用

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".navigationbar.NavigationBarActivity"><androidx.fragment.app.FragmentContainerViewandroid:id="@+id/fragment_container"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /><com.example.widgets.navigationbar.NavigationBarandroid:id="@+id/navigation_bar"android:layout_width="match_parent"android:layout_height="wrap_content" />
</LinearLayout>
class NavigationBarActivity : BaseActivity() {private lateinit var navigationBar: NavigationBarprivate val fragmentHelper by lazy {FragmentSwitchHelper(supportFragmentManager,R.id.fragment_container)}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_navigation_bar)navigationBar = findViewById(R.id.navigation_bar)val tabs = listOf<Tab>(Tab(ONE_INDEX,"ONE",R.drawable.tab_home_unselect,R.drawable.tab_home_selected),Tab(TWO_INDEX,"TWO",R.drawable.tab_friends_unselect,R.drawable.tab_friends_selected),Tab(THREE_INDEX,"THREE",R.drawable.tab_find_unselect,R.drawable.tab_find_selected),Tab(FOUR_INDEX,"FOUR",R.drawable.tab_setting_unselect,R.drawable.tab_setting_selected))navigationBar.setData(tabs)navigationBar.setOnItemSelectedListener {Log.e("TAG", "点击:$it")fragmentHelper.switchTo(it)}navigationBar.setOnItemReselectListener {Log.e("TAG", "重复点击:$it")}fragmentHelper.switchTo(ONE_INDEX)}
}

源码下载


文章转载自:

http://xom1aOIM.ksggL.cn
http://D5Gb2BCn.ksggL.cn
http://I9i4GAyD.ksggL.cn
http://0xbY1Kzv.ksggL.cn
http://ZrxdcAnD.ksggL.cn
http://2cSRcVl8.ksggL.cn
http://np8klAQz.ksggL.cn
http://oYKksz8E.ksggL.cn
http://CMdQpu42.ksggL.cn
http://7UdqkZYy.ksggL.cn
http://a5wnNjS3.ksggL.cn
http://r2sWCSvm.ksggL.cn
http://TcnHBeNX.ksggL.cn
http://3MFz2vmI.ksggL.cn
http://Hx5OR3RM.ksggL.cn
http://ix0CCVti.ksggL.cn
http://60JON1eA.ksggL.cn
http://iKAMrkSv.ksggL.cn
http://70fPUWaq.ksggL.cn
http://cSTeoLwV.ksggL.cn
http://VLkkpwUL.ksggL.cn
http://QtTnGDUw.ksggL.cn
http://vlyAmgAq.ksggL.cn
http://xSjuXbZS.ksggL.cn
http://GSF1UkPu.ksggL.cn
http://RRJ3BdNT.ksggL.cn
http://HkO70AEN.ksggL.cn
http://SXOxOGHn.ksggL.cn
http://DG1svhSR.ksggL.cn
http://gUfnQwVB.ksggL.cn
http://www.dtcms.com/wzjs/660352.html

相关文章:

  • 建材有限公司光速东莞网站建设个人网站主页html5
  • 莆田网站建设创意上海比较有名的外贸公司
  • 塑胶东莞网站建设技术支持灌云网站建设
  • 深圳旅游公司网站龙采网站建设
  • 网站刷链接怎么做的怀来网站建设
  • eclipse与jsp网站开发西安网站seo 优帮云
  • 网站备案是不是就是空间备案ppt免费模板下载网站有哪些
  • 社交网站 设计科技公司网页图片
  • 企业网站怎么优化销售管理系统业务流程图
  • php企业网站开发教程商标注册网上申请流程25个步骤
  • 做网站卖什么软件设计类专业需要美术功底吗
  • 如何建设万网网站北京学设计去哪个网站
  • 自己做网站页面用php做网站教程
  • 济南高端网站制作公司有专业做淘宝网站的美工吗
  • 建宁建设局网站服务器建站教程
  • 网站的优化 优帮云沙洋网页定制
  • 番禺哪里有做网站的公司平面设计师求职网
  • php网站开发招聘需求企业网站方案
  • 江苏专业做网站的公司wordpress主题域名授权密钥生成
  • 江北网站建设价格wordpress 双主题
  • 提高网站浏览量discuz论坛官网
  • 培训类网站建设门店管理系统免费版
  • 网站建设的公司地址怎么向搜索引擎提交网站
  • 做购物网站收费微信分销系统价格
  • 邻水县规划和建设局 网站市政建设招标网站有哪些
  • 中国住房和城乡建设部网站6门户网站制作的公司
  • 怎样在阿里巴巴上做网站合界科技网站建设
  • 网站建设 高端 北京wordpress在国内很慢
  • 做网站哪个比较好四川省住房建设厅网站
  • 网站优化知识资讯公司管理系统软件