随笔系原创 转载请注明
ToggleButton控件具有checked属性对于要切换状态的功能按钮来说十分好用
这里以phone的开启DTMFTwelveKeyDialer的按钮为例 展示其效果和布局
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <ToggleButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/button_incall" android:drawableTop="@drawable/icon_keyboard_bg" android:textOn="键盘" android:textOff="键盘" android:textSize="32dip" android:textColor="#FFFFFF" /> </LinearLayout>
其中drawableTop引用了icon_keyboard_bg.xml
icon_keyboard_bg.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/icon_keyboard_up_pressed" /> <item android:state_checked="true" android:drawable="@drawable/icon_keyboard_up" /> <item android:state_checked="false" android:drawable="@drawable/icon_keyboard_down" /> <item android:drawable="@drawable/icon_keyboard_down" /> </selector>
这样 即可实现点击按钮时三种不同状态图片的切换了
1. 自然状态下效果
2.按下按钮效果
3.属性checked="true"的效果
实际使用中应该注意国际化的问题 字符串、间距、尺寸的大小不应使用硬编码
还有个小问题 ==> 如何控制drawableTop的图片和文字之间的距离呢
只要使用了android:drawablePadding这个属性就可以了
例如android:drawablePadding="-10dip"就可以缩小图片和文字之间的间距了。
final Drawable drawableTop = getResources().getDrawable(R.drawable.btn_bg_on); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { btn.setCompoundDrawablesWithIntrinsicBounds(null, drawableTop , null, null); }
});