Button 在布局文件中定义监听器,文字阴影,自定义图片,代码绘制样式,添加音效的方法
1.Button自己在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:background="#DFDDDE"> <!-- 设定onclick属性,然后在activity中定义相应的方法 --> <!-- 通过xml布局中通过button的android:onClick属性指定一个方法, 以替代在activity中为button设置OnClickListener。 -->
<Button android:id="@+id/my_button_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Button自己绑定点击事件" android:layout_marginTop="16dp" android:onClick="buttonListener"/> </LinearLayout>
对应的方法
/**当用户点击按钮时,Android系统调用buttonListener(View)方法。 * 为了正确执行,这个方法必须是public并且仅接受一个View类型的参数 * @param v button传过来的view对象 * 需要注意的是这个方法必须符合三个条件: 1.public 2.返回void 3.只有一个参数View,这个View就是被点击的这个控件。 */ public void buttonListener(View v){ switch (v.getId()) { case R.id.my_button_id: Toast.makeText(getApplicationContext(), "button自己绑定一个触发函数", 0).show(); break; default: break; } }
2.自定义点击,按下的样式
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="16dp" android:background="@drawable/button_selector" android:text="自定义按钮样式" />
button_selector.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/login_button2" /> <item android:state_focused="true" android:drawable="@drawable/login_button2" /> <item android:drawable="@drawable/login_button" /> </selector>
3.用代码来设定按钮普通/按下后的图片样式
<Button android:id="@+id/style_button_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="16dp" android:text="用代码动态设定点击样式" />
代码中用onTouchListener监听器:
Button styleBt = (Button)findViewById(R.id.style_button_id); styleBt.setBackgroundColor(Color.parseColor("#b9e3d9"));
styleBt.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction()==MotionEvent.ACTION_DOWN){ //v.setBackgroundResource(R.drawable.bar_color); v.setBackgroundColor(Color.WHITE); } else if(event.getAction()==MotionEvent.ACTION_UP){ v.setBackgroundColor(Color.parseColor("#b9e3d9")); } return false; } });
4.用shape画的按钮
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="#FFFFFF" /> <!-- 设置按钮的四个角为弧形 --> <!-- android:radius 弧形的半径 --> <corners android:radius="5dip" /> <!-- padding:Button里面的文字与Button边界的间隔 --> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape>
用法:
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/shape" android:layout_marginTop="16dp" android:text="用shape画的圆角按钮" />
5.用style来指定样式
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape> <gradient android:startColor="#0d76e1" android:endColor="#0d76e1" android:angle="270" /> <stroke android:width="1dip" android:color="#f403c9" /> <corners android:radius="2dp" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape> </item> <item android:state_focused="true"> <shape> <gradient android:startColor="#ffc2b7" android:endColor="#ffc2b7" android:angle="270" /> <stroke android:width="1dip" android:color="#f403c9" /> <corners android:radius="2dp" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape> </item> <item> <shape> <gradient android:startColor="#CEEDEB" android:endColor="#ffffff" android:angle="-90" /> <stroke android:width="1dip" android:color="#f403c9" /> <corners android:radius="5dip" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape> </item> </selector> <!-- gradient 主体渐变 startColor开始颜色, endColor结束颜色 , angle开始渐变的角度(值只能为90的倍数,0时为左到右渐变,90时为下到上渐变,依次逆时针类推) stroke 边框 width 边框宽度,color 边框颜色 corners 圆角 radius 半径,0为直角 padding text值的相对位置 -->
6.指定按钮的音效
先定义对象
private SoundPool sp;//声明一个SoundPool private int music;//定义一个整型用load();来设置suondID
对事件做处理
sp= new SoundPool(10, AudioManager.STREAM_SYSTEM, 5);//第一个参数为同时播放数据流的最大个数,第二数据流类型,第三为声音质量 music = sp.load(this, R.raw.click,1); //把你的声音素材放到res/raw里,第2个参数即为资源文件,第3个为音乐的优先级 Button musicBt = (Button)findViewById(R.id.music_button_id); musicBt.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub sp.play(music, 1, 1, 0, 0, 1); } });
7.加文字阴影的方式(设定阴影的偏移量和宽度)
<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:shadowColor="#aa5" android:shadowDx="5" android:shadowDy="5" android:shadowRadius="1" android:textSize="25sp" android:text="shadow" />