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" />
复制代码

 

 

 

源码下载:http://download.csdn.net/detail/shark0017/7592855

posted @   developer_Kale  阅读(915)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
网站流量统计工具
点击右上角即可分享
微信分享提示