Android控件默认风格解析之SeekBar

在我们开发的时候常常需要更改原生控件的默认效果,有时候某些控件改起来挺费劲的,比如SeekBar的背景与其ProgressBar的进度粗细或者thumb居中现实与否如果弄错,都是个大麻烦,我曾经就为thumb的居中显示问题浪费了很多很多的时间,后来以别的笨拙的办法解决了,现在重新回来看,决定下决心整一下,看看到底是怎么回事。

我们知道,当我们在写一个xml布局的时候,只需要简单的为这个控件指定一个高宽便可以看到它的效果,就像这样:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns: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:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"app:layout_behavior="@string/appbar_scrolling_view_behavior"tools:context=".MainActivity"tools:showIn="@layout/activity_main"><SeekBarandroid:layout_width="match_parent"android:layout_height="wrap_content"android:progress="30"/>
</RelativeLayout>

预览效果图:


我们可以看到这个控件本身是带有一种风格的,那这个风格在哪里被定义了呢?我们一起来找找:

我们当然需要先去SeeBar的类里面找找有什么关键的信息:

我们在SeeBar的重载构造方法中看到一条有用的信息:

    public SeekBar(Context context, AttributeSet attrs) {this(context, attrs, com.android.internal.R.attr.seekBarStyle);}

原来奥秘就在com.android.internal.R.attr.seekBarStyle的里面,我们找找去,seekBarStyle位于platform_frameworks_base-master\core\res\res\values\themes.xml文件中,在该文件中可以发现它的定义:

        <item name="seekBarStyle">@style/Widget.SeekBar</item>

看来它是调用了位于style下的Widget.SeekBar风格,我们再去找找:

    <style name="Widget.SeekBar"><item name="indeterminateOnly">false</item><item name="progressDrawable">@drawable/progress_horizontal</item><item name="indeterminateDrawable">@drawable/progress_horizontal</item><item name="minHeight">20dip</item><item name="maxHeight">20dip</item><item name="thumb">@drawable/seek_thumb</item><item name="thumbOffset">8dip</item><item name="focusable">true</item><item name="mirrorForRtl">true</item></style>

我们找到了它的默认风格配置文件,可以看到它的基本属性都在这里了,来一条一条解释一下这些属性是什么意思:

indeterminateOnly 是否只是用于指示功能,很显然SeekBar除了指示还有拖拽,所以这里是false

progressDrawable 用于progress进度的背景色

indeterminateDrawable 用于progress指示进度的背景色

minHeight,maxHeight 两者相等,用于指定进度条的高度

thumb 用于指定滑动按钮的配置

thumbOffset 用于指定滑动按钮的偏移量,默认是8dp

好,主要的属性解释完,我们贴一下progress_horizontal文件中的内容,看看如何给progressBar配置背景色:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item android:id="@id/background"android:gravity="center_vertical|fill_horizontal"><shape android:shape="rectangle"android:tint="?attr/colorControlNormal"><size android:height="@dimen/progress_bar_height_material" /><solid android:color="@color/white_disabled_material" /></shape></item><item android:id="@id/secondaryProgress"android:gravity="center_vertical|fill_horizontal"><scale android:scaleWidth="100%"><shape android:shape="rectangle"android:tint="?attr/colorControlActivated"><size android:height="@dimen/progress_bar_height_material" /><solid android:color="@color/white_disabled_material" /></shape></scale></item><item android:id="@id/progress"android:gravity="center_vertical|fill_horizontal"><scale android:scaleWidth="100%"><shape android:shape="rectangle"android:tint="?attr/colorControlActivated"><size android:height="@dimen/progress_bar_height_material" /><solid android:color="@color/white" /></shape></scale></item>
</layer-list>

这是个标准的布局文件,我们可以看到在它里面定义了这个属性android:gravity="center_vertical|fill_horizontal",在网上我们经常可以看到各种SeekBar的样式里面是没有填写这个属性的,我们如果直接使用就会遇到thumb与progress的中心不在同一水平位置。

最后再贴一下标准的seek_thumb文件:

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2008 The Android Open Source ProjectLicensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.
--><!-- This is the thumb on the seek bar. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="true"android:state_window_focused="true"android:drawable="@drawable/seek_thumb_pressed" /><item android:state_focused="true"android:state_window_focused="true"android:drawable="@drawable/seek_thumb_selected" /><item android:state_selected="true"android:state_window_focused="true"android:drawable="@drawable/seek_thumb_selected" /><item android:drawable="@drawable/seek_thumb_normal" /></selector>
我们在写自定义属性的时候,只用拷贝这个文件并更改相关的属性就可以。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于模板的文字识别结果结构化处理技术

原文链接&#xff1a;https://cloud.tencent.com/developer/article/1425800 嘉宾 | 向宇波编辑 | suiling来源 | AI科技大本营在线公开课出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;随着行业的发展和技术的成熟&#xff0c;文字识别&#xff08;OCR&…

LeetCode 1008. 先序遍历构造二叉树(已知先序,求二叉搜索树)

文章目录1. 题目2. 解题1. 题目 返回与给定先序遍历 preorder 相匹配的二叉搜索树&#xff08;binary search tree&#xff09;的根结点。 示例&#xff1a;输入&#xff1a;[8,5,1,7,10,12]&#xff0c;已知二叉搜索树的先序&#xff08;根左右&#xff09; 输出&#xff1a…

美团开源 Logan Web:前端日志在 Web 端的实现

1.前言 Logan 是美团点评推出的大前端日志系统&#xff0c;支持多端环境运行&#xff0c;可为客户端、Web、小程序等用户端环境提供前端日志的存储、收集、上报及分析能力&#xff0c;能够帮助开发人员快速定位并解决端上问题&#xff0c;便于及时响应用户反馈与排除异常。 201…

推荐一个快速定位深度学习代码bug的炼丹神器!

文 | McGL源 | 知乎写深度学习网络代码&#xff0c;最大的挑战之一&#xff0c;尤其对新手来说&#xff0c;就是把所有的张量维度正确对齐。如果以前就有TensorSensor这个工具&#xff0c;相信我的头发一定比现在更浓密茂盛&#xff01;TensorSensor&#xff0c;码痴教授 Teren…

研讨会 | 知识图谱引领认知智能+

本文转载自公众号&#xff1a;中国计算机学会。本论坛将于 CNCC2019 中国计算机大会第一天&#xff08;10月17日&#xff09;在苏州金鸡湖国际会议中心 A102 会议室举行&#xff0c;共邀微软、阿里巴巴、华为、小米、浙江大学、苏州大学等机构的专家与你探讨。知识图谱是一种用…

LeetCode 617. 合并二叉树

文章目录1. 题目2. 递归解题1. 题目 给定两个二叉树&#xff0c;想象当你将它们中的一个覆盖到另一个上时&#xff0c;两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠&#xff0c;那么将他们的值相加作为节点合并后的新值&…

BIO,NIO,AIO

BIO,NIO,AIO 介绍一、背景1.1 说明1.2 通信技术整体解决的问题二、Java的I/O演进之路2.1 I/O 模型基本说明2.2 I/O模型Java BIOJava NIOJava AIO2.3 BIO、NIO、AIO 适用场景分析三、BIO,NIO,AIO总结一、背景 1.1 说明 ​ 在Java的软件设计开发中&#xff0c;通信架构是不可避…

学PyTorch还是TensorFlow?

在机器学习领域&#xff0c;面对各类复杂多变的业务问题&#xff0c;构建灵活易调整的模型是高阶机器学习工程师必备的工作能力。然而&#xff0c;许多工程师还是有一个想法上的误区&#xff0c;以为只要掌握了一种深度学习的框架就能走遍天下了。事实上&#xff0c;在机器学习…

Bifrost微前端框架及其在美团闪购中的实践

Bifrost&#xff08;英 [‘bi:frɔst]&#xff09;原意彩虹桥&#xff0c;北欧神话中是连通天地的一条通道。而在漫威电影《雷神》中&#xff0c;Bifrost是神域——阿斯加德&#xff08;Asgard&#xff09;的出入口&#xff0c;神域的人通过它自由穿梭于“九界”&#xff08;指…

设计模式之观察者模式在Listview中的应用

有时候我们会有这么一个需求&#xff0c;在Listview的某个Item上有个按钮&#xff0c;点击这个按钮之后呢&#xff0c;需要对其它的item做一些操作&#xff0c;就像下面这个&#xff1a; 采纳按钮点击之前&#xff1a;采纳按钮点击之后&#xff1a; 简单介绍一下这两张图的意…

新书速递 | 《知识图谱:方法、实践与应用》

本文转载自公众号&#xff1a;博文视点Broadview 。互联网促成了大数据的集聚&#xff0c;大数据进而促进了人工智能算法的进步。近年来知识图谱作为AI领域底层技术被越来越多的人谈起。知识图谱的升温得益于新数据和新算法为规模化知识图谱构建提供了新的技术基础和发展条件&a…

Github Star过万的阿里学长独家干货分享

浅梦是我认识的一位浙大计算机系的学长&#xff0c;目前在阿里从事算法相关的工作。无论在学校还是工作中&#xff0c;他都保持着对新知识的学习和分享。他的github star 1w&#xff0c;世界排名700&#xff0c;参与开发的项目下载量接近30w次。主要涉及「推荐系统」&#xff0…

React Native在美团外卖客户端的实践

MRN简介 MRN&#xff08;Meituan React Native&#xff09; 是基于开源的React Native框架改造并完善而成的一套动态化方案&#xff0c;在开发体验上基本能与原生RN保持一致&#xff0c;同时从业务需求的角度满足从开发、构建、测试、部署、运维的工程化需要。解决了一系列痛点…

论文浅尝 | 使用预训练深度模型和迁移学习方法的端到端模糊实体匹配

论文笔记整理&#xff1a;高凤宁&#xff0c;南京大学硕士&#xff0c;研究方向为知识图谱、实体消解。链接&#xff1a;https://doi.org/10.1145/3308558.3313578动机目前实体匹配过程中实体之间的差异比较微妙&#xff0c;不同的情况下可能会有不同的决策结果&#xff0c;导致…

推荐几个Android开发非常有用的工具(for android studio)

原文地址: http://stormzhang.com/android/2015/05/26/android-tools/ 一晃好久没更新博客了&#xff0c;最近一个月真的很忙&#xff0c;因为公司在准备C轮融资&#xff0c;公司的发展到了一个关键的阶段&#xff0c;自己全部精力投入在公司产品上&#xff0c;这个状态可能还会…

分布式机器学习(下)-联邦学习

原文链接&#xff1a;https://zhuanlan.zhihu.com/p/114028503 本视频来源于Shusen Wang讲解的《分布式机器学习》&#xff0c;总共有三讲&#xff0c;内容和连接如下&#xff1a;并行计算与机器学习&#xff08;上&#xff09;并行计算与机器学习&#xff08;下&#xff09;联…

怎样将Embedding融入传统机器学习框架?

文 | 石塔西源 | 知乎LR本身是一个经典的CTR模型&#xff0c;广泛应用于推荐/广告系统。输入的特征大多数是离散型/组合型。那么对于Embedding技术&#xff0c;如何在不使用深度学习模型的情况下&#xff08;假设就是不能用DNN&#xff09;&#xff0c;融入到LR框架中呢&#x…

推荐系统中的Embedding

推荐系统之Embedding一、什么是embedding&#xff1f;1. 让embedding空前流行的word2vec&#xff1a;2. 从word2vec到item2vec二、Graph Embedding1. 经典的Graph Embedding方法 — DeepWalk2. DeepWalk改进 — Node2vec3. 阿里的Graph Embedding方法EGES三、深度学习推荐系统中…

美团下一代服务治理系统 OCTO 2.0 的探索与实践

本文根据美团基础架构部服务治理团队工程师郭继东在2019 QCon&#xff08;全球软件开发大会&#xff09;上的演讲内容整理而成&#xff0c;主要阐述美团大规模治理体系结合 Service Mesh 演进的探索实践&#xff0c;希望对从事此领域的同学有所帮助。 一、OCTO 现状分析 OCTO 是…

技术动态 | 跨句多元关系抽取

本文转载自公众号&#xff1a;知识工场。第一部分 概述关系抽取简介关系抽取是从自由文本中获取实体间所具有的语义关系。这种语义关系常以三元组 <E1,R,E2> 的形式表达&#xff0c;其中&#xff0c;E1 和E2 表示实体&#xff0c;R 表示实体间所具有的语义关系。如图1所示…