@act262
2017-03-25T17:26:39.000000Z
字数 3788
阅读 1845
Android
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:oritation="horizontal" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_tag" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text" />
</LinearLayout>
TextView有drawableLeft、drawableTop、drawableRight、drawableBottom
属性可以设置上下左右的Drawable对象来替代上述的实现。
在布局设置,设置了才显示哪个方向的Drawable
android:drawableLeft="@drawable/ic_tag"
代码中设置setCompoundDrawables
,用null或0的参数表示不显示对应的位置(特别需要注意:设置的Drawable是必须是已调用过setBounds方法的,不然看不出效果),或者调用setCompoundDrawablesWithIntrinsicBounds
内部会去处理drawable的bounds.
setCompoundDrawables(Drawable left,Drawable top,Drawable right,Drawable bottom)
Drawable与文字之间的距离可以通过drawablePadding
来设置
android:drawablePadding="10dp"
setCompoundDrawablePadding(int pad)
优点:减少一层布局嵌套;
缺点:特殊的需求这个不好实现,可以考虑使用LayerDrawable
实现一些特殊的需求 layer-list
ListView
提供的分割线方法不能直接控制分割线的样式,但是可以控制分割线Drawable的样式,详细查看这篇文章http://blog.csdn.net/megatronkings/article/details/52156312。
不推荐在布局里面直接插入一个View做为分割线,然后还要在代码中控制显示隐藏。可以使用InsetDrawable
来修饰分割线的留白等来达到设计效果。
setDividerDrawable(Drawable divider)
和setShowDividers(int showDividers)
方法来设置分割线,或者在xml布局中指定android:layout_divider
.设置对应的参数即可显示分割线.
SHOW_DIVIDER_NONE, // 默认的,不显示分割线
SHOW_DIVIDER_BEGINNING, // LinearLayout的开头显示分割线
SHOW_DIVIDER_MIDDLE, // LinearLayout中每个子View之间显示分割线
SHOW_DIVIDER_END // LinearLayout的尾部显示分割线
优点:减少分割线View的数量,直接绘制分割线效率更高.
缺点:不规则的分割线不好实现,可考虑搭配InsetDrawable
实现
还有一些特殊的分割线,搭配各种Drawable可以自定义出来.
example:白色背景,顶部一条红色的分割线
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />
<item android:gravity="top">
<shape android:shape="rectangle">
<solid android:color="#f00" />
<size android:height="2dp" />
</shape>
</item>
</layer-list>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/xxxx" />
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#7fff0000" />
</FrameLayout>
FrameLayout
的前景色。
<FrameLayout
android:layout_width="match_parent"
android:foreground="#7fff0000"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/xxxx" />
</FrameLayout>
布局中设置,可以使用Drawable或者Color
android:foreground="@drawable/xx"
或者在代码中设置
setForeground(Drawable foreground)
使用颜色滤镜,这种需求可以通过设置颜色矩阵来控制更好,ImageView#setColorFilter()
.
对于图片的色阶控制效果相当于设置的蒙层效果.
也可以结合tint
着色器属性来设置其前景/背景,需要考虑版本兼容问题
扩展:可以将图标作为FrameLayout的foreground来使用,可以减少一个View,需要注意对齐位置和拉伸问题
<FrameLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:foreground="@mipmap/ic_player"
android:foregroundGravity="center">
<ImageView
android:id="@+id/iv_thumb"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:background="@mipmap/default_image"/>
<!--<ImageView-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_gravity="center"-->
<!--android:src="@mipmap/ic_player"/>-->
</FrameLayout>
可以设置
getWindow().setBackgroundDrawable(xx);
或者设置透明背景,启动时看上去没启动感觉
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
ViewCompat
,DrawableCompat