有些简单的图形完全可以用代码实现,减少了程序大小也提高了运行效率,layer-list实现布局和RelativeLayout相似,一层一层往上放,最后的item节点放置在最上面。
新建layer-list和新建drawable资源中的shape一样,将标签select换成layer-list即可。
一、实现同心圆
外面一个环型里面一个圆形搞定。
效果图:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape
android:innerRadius="30dp"
android:shape="ring"
android:thickness="2dp"
android:useLevel="false">
<solid android:color="@color/theme" />
</shape>
</item>
<item
android:bottom="30dp"
android:left="30dp"
android:right="30dp"
android:top="30dp">
<shape android:shape="oval">
<solid android:color="@color/theme" />
<size
android:width="30dp"
android:height="30dp" />
</shape>
</item>
</layer-list>
也可以外面一个圆加个边框,里面一个小圆,外圆设置成透明颜色的话和上图是一样的效果。
效果图:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:dither="true"
android:shape="oval">
<solid android:color="@color/red" />
<stroke
android:color="@color/theme"
android:width="1dp" />
</shape>
</item>
<item
android:bottom="20dp"
android:left="20dp"
android:right="20dp"
android:top="20dp" >
<shape
android:shape="oval" >
<solid android:color="@color/theme" />
<size
android:width="30dp"
android:height="30dp" />
</shape >
</item >
</layer-list>
自己定义一个选中和一个未选中状态的样式,调用资源文件直接代码:
选择selector.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/radio_button_t" android:state_selected="true" />
<item android:drawable="@drawable/radio_button_f" />
</selector>
写个style:
<!--自定义RadioButton主题-->
<style name="radio_button_style">
<item name="android:button">@null</item>
<item name="android:drawableStart">@drawable/selector</item>
<item name="android:drawablePadding">5dp</item>
<item name="android:background">@null</item>
</style>
看属性button设置成null,将系统的按钮置空,drawableStart设置按钮样式位置的,这里是设置按钮在文字的左边,你可以自己设置上下左右。将自定义样式的传进去即可。
drawablePadding设置按钮和文字的距离,设置背景为空,不然就会出现点击效果很恐怖,吓尿。
在布局文件中调用:
<RadioGroup
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rb_owner_login"
style="@style/radio_button_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="@string/owner_login"
android:textSize="15sp" />
<RadioButton
android:id="@+id/rb_clerk_login"
style="@style/radio_button_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/clerk_login"
android:textSize="15sp" />
</RadioGroup>
加阴影效果等,可以用在RadioButton的选中和未选中状态,导航栏选中等也是同样的道理,自己多多体会吧。selestor中环或者圆统一使用,别用了环又用圆,会有误差的。