android 定制个性按钮 控件

2024-03-31 08:18

本文主要是介绍android 定制个性按钮 控件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://www.cnblogs.com/jiaozihardworking/archive/2012/02/15/2352711.html


【注:次博客长期荒置,因此附上这个工程的下载链接:http://pan.baidu.com/share/link?shareid=81046&uk=1158065893  有兴趣可以下载看看】

既然是要做app,那么如果全都用android自带的控件的话界面就太单调和难看了,所以每个app都有自己的风格和外观,那么,现在就来研究一下如何做一个自己中意的控件吧~

首先,新建一个android工程,我就命名为buttonTest了。

在给activity.java文件动手脚之间,我比较喜欢先搞定xml文件,我们这里测试两个控件,一个是自制按钮,一个是自制textview控件,道理是一样的,就是为了告诉大家这个适用于任意的控件。

首先我们在main.xml文件(我就懒得换名字了)里添加三个控件,每个控件都可以给它很多属性,具体查看可以输入android: 然后后面就自动出现了它的所有属性:

然后这里我们只给出需要的。注意第一行那个android:id="@+id/mybutton",这个意思是,给这个控件一个名字,这个名字是存在之前提到过的R.java文件里的,因为是添加一个名字,所以用了+id,如果是引用string.java文件里的string字符串的话,就只需要@string/nameofstring 。不需要加好了,具体我们看代码:

 

main.xml文件如下:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@drawable/bg"><Buttonandroid:layout_width="55px"android:layout_height="55px"android:id="@+id/button"android:background="@drawable/buttonstyle"android:layout_margin="10px"/><TextViewandroid:layout_width="wrap_content"  android:layout_height="wrap_content"android:textColor="#000000"android:layout_margin="10px"android:id="@+id/text"android:text="@string/shorttext"android:background="@drawable/textview"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="10px"android:id="@+id/text2"android:textColor="#000000"android:text="@string/longtext"android:background="@drawable/textview"/></LinearLayout>
复制代码

可以看到三个控件我都给了个ID,是因为我要在activity的java文件里给它一个listener,也就是说要对这个控件进行操作,这是后话了。

里面的text内容我放在了string.xml文件里了。

其中的 android:background="@drawable/xxxxxx" 这一行,就是针对这个控件定制的类型,xxxx是定义这个类型用的文件。

那么这个文件怎么来呢~?其实就是右键点工程,新建android的xml文件,然后选择Drawable,最下面的root element选择selector,然后在res文件夹下就会生成一个叫做drawable的文件夹,里面就放着你定义的文件:

然后我们就可以点开这个文件,给刚才定义的空间覆上属性了,我就随意上网找了两个图,然后放在了drawable-hdpi里(真不负责任啊),然后buttonstyle的内容如下:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<selectorxmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="false" android:drawable="@drawable/button" /><item android:state_pressed="true" android:drawable="@drawable/b_pressed" /><item android:state_focused="true" android:drawable="@drawable/b_pressed"/> 
</selector>
复制代码

其实就是针对不同的状态给图就可以了。

然后呢 这个button就完成了。

效果如下:

在按下的状态下它是蓝色的图,我就不截了。

当然,这个并不能满足我们,因为很多时候,按钮上是要定义文字的。

但是如果只用一个图片做背景,那么因为长宽的问题,背景图片经常就会被拉伸的很难看,所以,这里就要提到一个android自带的工具,叫做draw9patch。我们找到android的sdk文件夹,里面有个叫tool的文件夹,里面就放了这个工具,我们点开它(会慢,耐心等下),发现界面很单纯:

它虽然长得很单纯,但是效果可是华丽丽的哦~

我们找到一个希望放文字的图片素材进来,然后她会自动给图片的四周放大一个像素,来让我们定义拉伸时候的重复像素。

这里我用了苹果短信的气泡:


右边就是拉伸的效果,很理想吧~大家看到,图片的四边被我点了四个点,就是这4个点起到的作用,原理就是:

在拉伸的时候,它会复制这四个点范围内的像素,而不是一味的拉伸。

换句话说,拉伸的时候,图像会复制这4个点对应的行列,而不会影响其它的像素。

我稍微把这个图画个示意:

被红线框起来的部分,就是横向或者纵向拉伸的时候被不断复制的地方,而其它地方拉伸的时候并不影响

这样,我们把这个图用在textview的定制文件里,textview.xml的内容如下:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<selectorxmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="false" android:drawable="@drawable/bubble" /><item android:state_pressed="true" android:drawable="@drawable/bu_pressed" /><item android:state_focused="true" android:drawable="@drawable/bu_pressed"/> </selector>
复制代码

OK了,为了能看效果,我在activity文件里动了点手脚,文件完整内容如下:

复制代码
package android.button;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;public class ButtonTestActivity extends Activity {/** Called when the activity is first created. */private Button button;private TextView text;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);text = (TextView)findViewById(R.id.text);button = (Button)findViewById(R.id.button);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub
                Toast.makeText(getApplicationContext(), "clicked",Toast.LENGTH_SHORT).show();}});text.setOnLongClickListener(new OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {// TODO Auto-generated method stub
                Toast.makeText(getApplicationContext(), "long clicked",Toast.LENGTH_SHORT).show();return false;}});}}
复制代码



好了,让我们运行看看吧~


第二个我添加了长按的监听,长按时显示蓝色,成功~ OK,功成身退。~


这个临时的工程我会保存一段时间,如果有谁想看一下做参考(虽然很没有含金量)的话可以留下邮箱~


这篇关于android 定制个性按钮 控件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/863858

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存