Android UI设计系统-android selector 开始自定义样式

Selector的结构描述:

<?xml version="1.0" encoding="utf-8"?>

    <selector xmlns:android="http://schemas.android.com/apk/res/android" >

        <item

            android:color="hex_color"

            android:state_pressed="true/false"

 

“true”表示按下状态使用(例如按钮按下);“false”表示非按下状态使用。

 

            android:state_focused="true/false"

 

“true”表示聚焦状态使用(例如使用滚动球/D-pad聚焦Button);“false”表示非聚焦状态使用。

 

            android:state_selected="true/false"

 

“true”表示选中状态使用(例如Tab打开);“false”表示非选中状态使用。

 

            android:state_active="true/false"

 

“true”表示可勾选状态时使用;“false”表示非可勾选状态使用。(只对能切换可勾选—非可勾选的构件有用。)

 

            android:state_checkable="true/false"

 

“true”表示勾选状态使用;“false”表示非勾选状态使用。

 

            android:state_checked="true/false"

 

true”表示勾选状态使用;“false”表示非勾选状态使用。

 

            android:state_enabled="true/false"

 

“true”表示可用状态使用(能接收触摸/点击事件);“false”表示不可用状态使用。

 

            android:state_window_focused="true/false"

 

“true”表示应用程序窗口有焦点时使用(应用程序在前台);“false”表示无焦点时使用(例如Notification栏拉下或对话框显示)。

 

/>

 

    </selector>

 

 

 

 

shape的结构描述:

 

<shape> 

 

   <!-- 实心 --> 

 

   <solid android:color="#ff9d77"/> 

 

   <!-- 渐变 --> 

 

   <gradient 

 

       android:startColor="#ff8c00"  <!—开始颜色 --> 

       android:endColor="#FFFFFF"  <!—结束颜色 --> 

       android:angle="270" /> 

 

   <!-- 描边 --> 

 

   <stroke 

       android:width="2dp" 

       android:color="#dcdcdc" /> 

 

   <!-- 圆角 --> 

 

   <corners 

       android:radius="2dp" /> 

   <padding 

       android:left="10dp" 

       android:top="10dp" 

       android:right="10dp" 

       android:bottom="10dp" /> 

</shape> 

 

下面是上面属性的说明

solid:实心,就是填充的意思

android:color指定填充的颜色

gradient:渐变

android:startColor和android:endColor分别为起始和结束颜色,ndroid:angle是渐变角度,必须为45的整数倍。

 

另外渐变默认的模式为android:type="linear",即线性渐变,可以指定渐变为径向渐变,android:type="radial",径向渐变需要指定半径android:gradientRadius="50"。

 

 

stroke:描边

android:width="2dp" 描边的宽度,android:color 描边的颜色。

 

我们还可以把描边弄成虚线的形式,设置方式为:

 

android:dashWidth="5dp"

android:dashGap="3dp"

其中android:dashWidth表示'-'这样一个横线的宽度,android:dashGap表示之间隔开的距离。

corners:圆角

android:radius为角的弧度,值越大角越圆。

我们还可以把四个角设定成不同的角度,方法为:

<corners 

       android:topRightRadius="20dp"    右上角 

 

       android:bottomLeftRadius="20dp"    右下角 

 

       android:topLeftRadius="1dp"    左上角 

 

       android:bottomRightRadius="0dp"    左下角 

/> 

这里有个地方需要注意,bottomLeftRadius是右下角,而不是左下角,这个有点郁闷,不过不影响使用,记得别搞错了就行。

还有网上看到有人说设置成0dp无效,不过我在测试中发现是可以的,我用的是2.2,可能修复了这个问题吧,如果无效的话那就只能设成1dp了。

padding:间隔

这个就不用多说了,XML布局文件中经常用到。

具体代码如下:

main.xml: 

<Button 

  android:layout_width="wrap_content" 

android:layout_height="wrap_content" 

android:text="TestShapeButton" 

android:background="@drawable/button_selector"   /> 

 

 

 

 

 

button_selector.xml:

<?xml version="1.0" encoding="utf-8"?> 

<selector 

   xmlns:android="http://schemas.android.com/apk/res/android"> 

 

   <item android:state_pressed="true" > 

 

       <shape> 

 

           <!-- 渐变 --> 

 

           <gradient 

               android:startColor="#ff8c00" 

               android:endColor="#FFFFFF" 

               android:type="radial" 

               android:gradientRadius="50" /> 

           <!-- 描边 --> 

 

           <stroke 

               android:width="2dp" 

               android:color="#dcdcdc" 

               android:dashWidth="5dp" 

               android:dashGap="3dp" /> 

           <!-- 圆角 --> 

           <corners 

               android:radius="2dp" /> 

           <padding 

               android:left="10dp" 

               android:top="10dp" 

               android:right="10dp" 

               android:bottom="10dp" /> 

       </shape> 

   </item> 

   <item android:state_focused="true" > 

       <shape> 

           <gradient 

               android:startColor="#ffc2b7" 

               android:endColor="#ffc2b7" 

               android:angle="270" /> 

           <stroke 

               android:width="2dp" 

               android:color="#dcdcdc" /> 

           <corners 

               android:radius="2dp" /> 

           <padding 

               android:left="10dp" 

               android:top="10dp" 

               android:right="10dp" 

               android:bottom="10dp" /> 

       </shape> 

   </item> 

   <item>       

       <shape> 

           <solid android:color="#ff9d77"/> 

           <stroke 

               android:width="2dp" 

               android:color="#fad3cf" /> 

           <corners 

               android:topRightRadius="5dp" 

               android:bottomLeftRadius="5dp" 

               android:topLeftRadius="0dp" 

               android:bottomRightRadius="0dp"  /> 

           <padding 

               android:left="10dp" 

               android:top="10dp" 

               android:right="10dp" 

               android:bottom="10dp" /> 

       </shape> 

   </item> 

</selector> 

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

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

相关文章

Xamarin效果第十三篇之弹窗PopupPage

在上一篇文章中使用Xamarin实现控制了一下祖传的PLC;基本的功能也就完事了,这不总觉得少点最基本的配置;那就趁着激情还在赶紧再去完善一下,不然激情已过就懒得去摸索了;来看看最终咱实现的视频效果:1、关于弹窗,直接使用开源的PopupPageInstall-Package Rg.Plugins.Popup -Ver…

UIView中常用的方法

UIView 中常见的方法总结 addSubview: 添加一个子视图到接收者并让它在最上面显示出来。 - (void)addSubview:(UIView *)view 讨论 这方法同样设置了接收者为下一个视图响应对象。接收者保留视图。如果你使用removeFromSuperview方法用来把视图移除他的显示列表&#xff0c;那么…

Android studio之如何快速查看页面的布局

Android studio  &#xff0d;&#xff1e; &#xff54;&#xff4f;&#xff4f;&#xff4c;&#xff53; &#xff0d;&#xff1e; &#xff21;&#xff4e;&#xff44;&#xff52;&#xff4f;&#xff49;&#xff44; &#xff0d;&#xff1e; &#xff2c;&…

你们是不是对QQ总在后台莫名其妙更新一些东西很反感

开始 - 运行 - gpedit.msc 打开策略组依次进入 计算机配置——Windows设置——安全设置——软件限制策略——其他规则有人说软件限制策略下面是空的 你在软件限制策略上右键——新建 下面的目录自然就出来了右键——新建路径规则 依次输入如下路径并选择不允许<系统路径>…

GTKmm 学习资料

GTK2.0 中的容器控件与布局技巧 GTK图形化应用程序开发学习笔记&#xff08;一&#xff09;—概述

Android之在linux终端执行shell脚本文件(通过aapt)得到apk包名

1、问题 我们在ubuntu上经常想看到apk的包名,然后在终端通过pidcat.py packageName 过滤日志,我们常用的办法手机连接电脑,然后打开这个app adb shell dumpsys activity top 我们可以看到当前activity的名字和包名,但是如果这是一个apk呢?还没有运行呢?我们可以通过工…

C# 线程问题之争用条件

用多个线程编程并不容易。在启动访问相同数据的多个线程时&#xff0c;会间歇性地遇到难以发现的问题。如果使用任务、并行 LINQ 或 Parallel 类&#xff0c;也会遇到这些问题。为了避免这些问题&#xff0c;必须特别注意同步问题和多个线程可能发生的其他问题。下面探讨与线程…

BFS HDOJ 2102 A计划

题目传送门 题意:中文题面 分析:双层BFS,之前写过类似的题.总结坑点: 1.步数小于等于T都是YES  2. 传送门的另一侧还是传送门或者墙都会死  3. 走到传送门也需要一步 #include <bits/stdc.h> using namespace std;char maze[2][11][11]; int dx[4] {-1, 1, 0, 0}; i…

MVC 之 Partial View 用法

Partial View 顾名思义就是Html代码片段&#xff0c;因此可以用Partial View 把部分的Html或显示逻辑包装起来&#xff0c;方便多次使用。Partial View 需要放在Views/Shared 目录下&#xff0c;任何Controlller 下的Action 或 View 都可以载入。如何载入Partial View?MVC 的 …

Matlab 7.1安装及打不开问题解决

一、安装方法 1、解压[MATLAB.V7.1.Windows版本].MATLAB.V7.1.R14.SP3.CD1.iso,双击setup进行安装,输入用户名,单位,找到crack下的PLP number.txt文件夹的PLP序列,复制粘贴。 2、安装过程中选择[MATLAB.V7.1.Windows版本].MATLAB.V7.1.R14.SP3.CD2和[MATLAB.V7.1.…

Android之在linux终端执行shell脚本直接打印当前运行app的日志

1、问题 我们一般很多时候会需要在ubuntu终端上打印当前运行app的日志,我们一般常见的做法是 1)、获取包名 打开当前运行的app,然后输入如下命令,然后在第一行TASK后面的就可以看到包名 adb shell dumpsys activity top 2)、我们的终端安装了pidcat.py脚本,然后执行如下…

尾调用优化 java_为什么JVM仍然不支持尾调用优化?

拉丁的传说也许您已经知道这一点&#xff0c;但是这个功能并不像听起来那么简单&#xff0c;因为Java语言实际上将堆栈跟踪暴露给程序员。考虑以下程序&#xff1a;public class Test {public static String f() {String s Math.random() > .5 ? f() : g();return s;}publ…

【AngularJS】—— 2 初识AngularJs(续)

前一篇了解了AngularJS的一些简单的使用&#xff0c;这里继续跟着w3c学习一下剩下的内容。 本篇根据w3cschool.cc继续学习AngularJS剩余的内容&#xff0c;包括&#xff1a; 1 事件 2 模块 3 表单 4 数据验证 5 bootstrap CSS风格 6 include包含其他页面 7 应用程序 8 参考手册…

08_drain a node on the swarm

在之前的小节&#xff0c;所有的节点的状态都是运行着的可用状态。swarm manager 可以分配任务给任意可用的节点。有时候&#xff0c;你可能需要对某台服务器进行维护&#xff0c;你需要配置某个节点为drain状态&#xff0c;即排干该节点上面的所有运行的容器。drain状态可以防…

特斯拉为何使用.NET 技术栈?

【精选转载】| 来源/知乎在知乎上有一个帖子非常热闹&#xff1a;“为何特使拉使用.net core技术栈 而不用 java&#xff1f;”1回答1&#xff1a;Kasim作者&#xff1a;Kasim链接&#xff1a;https://www.zhihu.com/question/496204534/answer/2269157872这题我熟啊&#xff0…

java之DocumentBuilderFactory解析xml

1、About documentBuilderFactory API description 1&#xff09;、 javax.xml.parsers 包DocumentBuilderFactory创建DOM模式的解析器对象, DocumentBuilderFactory是抽象工厂类&#xff0c;不能直接实例化&#xff0c;但是有newInstance方法 2&#xff09;、DocumentBuilderF…

java jdk实现快速排序_Java实现快速排序过程分析

快速排序过程没有既不浪费空间又可以快一点的排序算法呢&#xff1f;那就是“快速排序”&#xff01;光听这个名字是不是就觉得很高端呢。假设我们现在对“52 39 67 95 70 8 2552”这个8个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了&#xff0c…

深入理解计算机系统读书笔记

由于这本书的前半部分习题大多是相关计算和简单汇编代码编写&#xff0c;所以当时都是在稿纸上练习的&#xff0c;不过现在那些稿纸似乎也不见了: ( 所以现在仅有后半部分的课后习题代码以及示例练习代码&#xff08;家里作业习题当时并没有做&#xff0c;准备阅读第二遍时再做…

Blazor University (6)组件 — 组件事件

原文链接&#xff1a;https://blazor-university.com/components/component-events/组件事件源代码[1]EventCallback<T> 类是一个特殊的 Blazor 类&#xff0c;可以作为参数公开&#xff0c;以便组件可以在发生感兴趣的事情时轻松通知使用者。一旦声明了 EventCallback&l…

JavaScript匿名函数以及在循环中的匿名函数

一 历史 JavaScript其实是一门奇异的语言&#xff0c;TA的一大特性是没有块级作用域 for(var i0;i<10;i){} console.log(i)大家猜测下值是多少&#xff1f;答案是 10&#xff0c; 虽然我们在一个块内申明了变量&#xff0c;但i却是在全范围内起作用的&#xff0c;所以就引入…