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

andorid中xml相关

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

android中通过自定义xml实现你需要的shape效果 xml属性配置

在Android开发过程中,经常需要改变控件的默认样式, 那么通常会使用多个图片来解决。不过这种方式可能需要多个图片,比如一个按钮,需要点击时的式样图片,默认的式样图片,然后在写一个selector的xml文件放在drawable文件夹中,但是 这样drawable中的内容就非常多,就容易使apk变大。

那么除了使用drawable这样的图片外,还有其他方法吗?

就谈一下自定义图形shape,Android上支持以下几种属性gradient、stroke、corners、padding、solid等。

 

<shape>
    <!-- 实心 -->
    <solid android:color="#ff9d77" />
    <!-- 渐变 -->
    <gradient android:angle="270" android:endColor="#FFFFFF" android:startColor="#ff8c00" />
    <!-- 描边 -->
    <stroke android:width="2dp" android:color="#dcdcdc" />
    <!-- 圆角 -->
    <corners android:radius="2dp" />
    <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
</shape>

solid:实心,就是填充的意思
android:color指定填充的颜色
gradient渐变
android:startColorandroid:endColor分别为起始和结束颜色

android: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为角的弧度,值越大角越圆。

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

    <item android:drawable="@drawable/y_calendar_btn_delete1" android:state_pressed="false"/>
    <item android:drawable="@drawable/y_calendar_btn_delete2" android:state_pressed="true"/>

</selector>
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <shape>
        <!-- <stroke android:width="1sp" android:color="#c9c9c9" />   边框颜色-->
        <solid android:color="#bac4c5" /><!--填充色-->
        <corners android:radius="5dip" />  <!--圆角弧度-->
    </shape>
  </item>
</layer-list>
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <shape>
        <!-- <stroke android:width="1sp" android:color="#c9c9c9" />   边框颜色-->
        <solid android:color="#bec9c9" /><!--填充色-->
        <corners android:radius="5dip" />  <!--圆角弧度-->
    </shape>
  </item>
</layer-list>

 

 

selector背景选择器

 

关于listview和button都要改变android原来控件的背景,在网上查找了一些资料不是很全,所以现在总结一下android的selector的用法。

首先android的selector是在drawable/xxx.xml中配置的。

先看一下listview中的状态:

把下面的XML文件保存成你自己命名的.xml文件(比如list_item_bg.xml),在系统使用时根据ListView中的列表项的状态来使用相应的背景图片。

drawable/list_item_bg.xml

<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 默认时的背景图片-->
    <item android:drawable="@drawable/pic1" />
    <!-- 没有焦点时的背景图片-->
    <item android:state_window_focused="false" android:drawable="@drawable/pic1" />
    <!-- 非触摸模式下获得焦点并单击时的背景图片-->
    <item android:state_focused="true" android:state_pressed="true"
        android:drawable="@drawable/pic2" />
    <!-- 触摸模式下单击时的背景图片-->
    <item android:state_focused="false" android:state_pressed="true"
        android:drawable="@drawable/pic3" />
    <!--选中时的图片背景-->
    <item android:state_selected="true" android:drawable="@drawable/pic4" />
    <!--获得焦点时的图片背景-->
    <item android:state_focused="true" android:drawable="@drawable/pic5" />
</selector>

或者在listview的item中添加属性android:background=“@drawable/list_item_bg"即可实现,或者在java代码中使用:Drawable drawable = getResources().getDrawable(R.drawable.list_item_bg); 

       ListView.setSelector(drawable);同样的效果。

但是这样会出现列表有时候为黑的情况,需要加上:android:cacheColorHint="@android:color/transparent"

使其透明。

其次再来看看Button的一些背景效果:

android:state_selected是选中

android:state_focused是获得焦点

android:state_pressed是点击

android:state_enabled是设置是否响应事件,指所有事件

根据这些状态同样可以设置button的selector效果。也可以设置selector改变button中的文字状态。

以下就是配置button中的文字效果:

drawable/button_font.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:color="#FFF" />
    <item android:state_focused="true" android:color="#FFF" />
    <item android:state_pressed="true" android:color="#FFF" />
    <item android:color="#000" />
</selector>

drawable/button_color.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <!-- 定义当button 处于pressed 状态时的形态。-->
        <shape>
            <gradient android:startColor="#8600ff" />
            <stroke android:width="2dp" android:color="#000000" />
            <corners android:radius="5dp" />
            <padding android:left="10dp" android:top="10dp"
                android:bottom="10dp" android:right="10dp" />
        </shape>
    </item>
    <item android:state_focused="true">
        <!-- 定义当button获得focus时的形态-->
        <shape>
            <gradient android:startColor="#eac100" />
            <stroke android:width="2dp" android:color="#333333" color="#ffffff" />
            <corners android:radius="8dp" />
            <padding android:left="10dp" android:top="10dp"
                android:bottom="10dp" android:right="10dp" />
        </shape>
    </item>
</selector>

     android:focusable="true"

     android:backgroud="@drawable/button_color"

这样当你使用Button的时候就可以甩掉系统自带的那黄颜色的背景了,实现个性化的背景,配合应用的整体布局非常之有用啊

 

定义shape-xml中的标准格式

 

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <solid android:color="@android:color/holo_orange_light" />
    <stroke
        android:width="1dip"
        android:color="@color/gray" />
    <corners android:radius="10dp" />
</shape>

转载于:https://my.oschina.net/u/660536/blog/376805

相关文章:

  • linux 下压缩大批量文件
  • 跟着实例学习ZooKeeper的用法: Curator扩展库
  • 如何从github上面拷贝源码
  • C++标准 bind函数用法与C#简单实现
  • 混合云服务哪家强? “天翼混合云”欲挑大梁
  • [LeetCode] Sort List
  • 等待超时,请打开设备管理器查看苹果驱动是否正常!
  • 【POJ】2096 Collecting Bugs
  • 【Linux】linux经常使用基本命令
  • [JAVA设计模式]第二部分:创建模式
  • nyoj86-找球号(一) 【set 二分查找 hash】
  • 关于数组集合之间的转换
  • Android Bitmap和Canvas学习笔记
  • 12 redis之aof日志持久化
  • Intersection of Two Linked Lists(链表)
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 08.Android之View事件问题
  • gulp 教程
  • Java Agent 学习笔记
  • javascript数组去重/查找/插入/删除
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • LintCode 31. partitionArray 数组划分
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Python - 闭包Closure
  • 从零开始学习部署
  • 大数据与云计算学习:数据分析(二)
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 前嗅ForeSpider采集配置界面介绍
  • 原生JS动态加载JS、CSS文件及代码脚本
  • ​批处理文件中的errorlevel用法
  • ​一些不规范的GTID使用场景
  • #《AI中文版》V3 第 1 章 概述
  • #AngularJS#$sce.trustAsResourceUrl
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (第27天)Oracle 数据泵转换分区表
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (强烈推荐)移动端音视频从零到上手(下)
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三)c52学习之旅-点亮LED灯
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (五)关系数据库标准语言SQL
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)http协议
  • (转载)OpenStack Hacker养成指南
  • .NET Core 2.1路线图
  • .NET Core中Emit的使用
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法