insetdrawable在dialog里的用法

来源:互联网 发布:淘宝数码店铺介绍 编辑:程序博客网 时间:2024/05/03 02:27

昨天在浏览android官网的时候发现一个inset drawable。官方解释是这样写的:A drawable defined in XML that insets another drawable by a specified distance. This is useful when a View needs a background that is smaller than the View's actual bounds.
特别是红色的那段文字,正好可以解决一个困扰我多年的问题。就是怎么可以自定义dialog的与屏幕的间距,因为在平时的layout的文件里,只需要写上layout_margin属性就可以,但是在dialog里却失效了。然后我用了一个很笨的办法暂时解决了,
方法是:设置一个全屏透明的layout,然后将真正的内容放到第一级子layout里。
现在看到了inset drawable的解释,二话不说立马开始尝试:
首先定义一个inset drawable:

<?xml version="1.0" encoding="utf-8"?>
<inset
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:drawable="@drawable/white"
  android:insetLeft="10dp"
  android:insetRight="10dp" 
  android:insetTop="10dp"
  android:insetBottom="10dp">
</inset>

android:drawable指向另一个定义好的资源。
接下来是重点了,insetLeft, insetRight, insetTop, insetBottom是设置背景与真实边界的距离,因为dialog的margin不能用,所以将此drawable设置到dialog的background里。
一测试还真是这个效果。
测试图如下:

先贴上没有使用inset drawable的:

inset drawable在dialog里的用法 - AndroidMan - 我有姿势,我自嚎
没有使用inset drawable的红色边框与屏幕左右重合。

使用了inset drawable的:
inset drawable在dialog里的用法 - AndroidMan - 我有姿势,我自嚎
使用inset drawable后的红色边框留出了间距。

以下是dump出的结构图: 
inset drawable在dialog里的用法 - AndroidMan - 我有姿势,我自嚎
 红色箭头所指是我布局文件的根目录是我layout文件的根。
 之上还有3级一样大小的FrameLayout,是dialog自动加上的,
再看最上面一级,联系第一张图的红框,可以推断出:inset drawable
在实际运行时被转换到了FrameLayout里来实现效果


定义在XML中的一个可绘制资源,它能够用指定的距离嵌入到另一个可绘制资源中。这种资源可在View对象需要的背景比它的实际边界小的时候使用。
文件位置(FILE LOCATION):

res/drawable/filename.xml

文件名被用于资源ID

被编译资源的数据类型(COMPILED RESOURCE DATATYPE):

资源指向一个InsetDrawable对象。

资源引用(RESOURCE REFERENCE):

Java代码中:R.drawable.filename

XML中:@[package:]drawable/filename

语法(SYNTAX):

    <?xml version="1.0" encoding="utf-8"?>
<inset
    
xmlns:android="http://schemas.android.com/apk/res/android"
    
android:drawable="@drawable/drawable_resource"
    
android:insetTop="dimension"
    
android:insetRight="dimension"
    
android:insetBottom="dimension"
    
android:insetLeft="dimension"/>

元素(ELEMENTS):

  <inset>

      定义嵌入的可绘制资源。它必须是根元素。

      属性(ATTRIBUTES):

      xmlns:android

      字符串值,必须的。它定义了XML的命名空间,必须是:http://schemas.android.com/apk/res/android

      android:drawable

      要绘制的资源,必须的,它指向一个要嵌入的可绘制资源。

      android:insetTop

      尺寸值。用尺寸值或Dimension资源定义顶部的嵌入位置。

      android:insetRight

      尺寸值。用尺寸值或Dimension资源定义右边的嵌入位置。

      android:insetBottom

      尺寸值。用尺寸值或Dimension资源定义底部的嵌入位置。

      android:insetLeft

      尺寸值。用尺寸值或Dimension资源定义左边的嵌入位置。

例子(EXAMPLE):

<?xml version="1.0" encoding="utf-8"?>
<insetxmlns:android="http://schemas.android.com/apk/res/android"
    
android:drawable="@drawable/background"
    
android:insetTop="10dp"
    
android:insetLeft="10dp"/>

0 0
原创粉丝点击