天天看点

Android自定义控件及按下效果

在应用程序开发中,经常要对android控件进行自定义来实现界面的风格统一,对网上的资源进行搜索整理如下:

  自定义edittext

  一, 通过改变背景图片来实现edittext的自定义

 (1) 在drawable里添加my_edittext.xml 代码如下:

[xhtml]

view plaincopyprint?

<?xml version="1.0" encoding="utf-8"?>  

<selector xmlns:android="http://schemas.android.com/apk/res/android">  

      <item android:state_focused="true" android:drawable="@drawable/edit1" />  

      <item android:drawable="@drawable/edit" />  

</selector>   

注:正常状态时背景图片为edit,而edit1为edittext为编辑状态  

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_focused="true" android:drawable="@drawable/edit1" />

<item android:drawable="@drawable/edit" />

</selector>

注:正常状态时背景图片为edit,而edit1为edittext为编辑状态

(2) 在value文件下添加 my_edittext_style.xml代码如下:

<resources>     

    <style name="suretouch_edittext_style" parent="@android:style/widget.edittext">  

         //引入drawable下的my_edittext.xml文件   

         <item name="android:background">@drawable/my_edittext</item>   

    </style>   

</resources>  

<resources>

<style name="suretouch_edittext_style" parent="@android:style/widget.edittext">

//引入drawable下的my_edittext.xml文件

<item name="android:background">@drawable/my_edittext</item>

</style>

</resources>

(3)在自己的布局文件中加入自定义样式就完成了。

<edittext  

   android:id="@+id/admin_email"  

   android:layout_width="461dip"          

   android:layout_height="48dip"  

   style="@style/my_edittext_style"  

/>  

<edittext

android:id="@+id/admin_email"

android:layout_width="461dip"

android:layout_height="48dip"

style="@style/my_edittext_style"

/>

使用上面方式实现的搜索框,布局文件如下:

<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"  

    android:layout_width="fill_parent"  

    android:layout_height="260dip">  

    <edittext  

        android:id="@+id/findedittext"  

        android:layout_alignparenttop="true"  

        android:singleline="true"  

        android:layout_width="fill_parent"  

        android:layout_height="wrap_content"  

        android:hint="请输入查询的类容"/>  

    <imageview  

        android:id="@+id/findbutton"  

        android:src="@drawable/findbutton"  

        android:layout_width="wrap_content"  

        android:layout_marginbottom="4dip"  

        android:layout_marginright="2dip"  

        android:adjustviewbounds="true"  

        android:layout_aligntop="@id/findedittext"  

        android:layout_alignright="@id/findedittext"  

        android:layout_alignbottom="@id/findedittext"/>  

</relativelayout>  

<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="260dip">

android:id="@+id/findedittext"

android:layout_alignparenttop="true"

android:singleline="true"

android:layout_height="wrap_content"

android:hint="请输入查询的类容"/>

<imageview

android:id="@+id/findbutton"

android:src="@drawable/findbutton"

android:layout_width="wrap_content"

android:layout_marginbottom="4dip"

android:layout_marginright="2dip"

android:adjustviewbounds="true"

android:layout_aligntop="@id/findedittext"

android:layout_alignright="@id/findedittext"

android:layout_alignbottom="@id/findedittext"/>

</relativelayout>

drawable中的xml文件

[c-sharp]

    <item android:state_pressed="true" android:drawable="@drawable/find0" />  

    <item android:state_focused="true" android:drawable="@drawable/find1" />  

    <item android:state_enabled="true" android:drawable="@drawable/find1" />  

</selector>  

<item android:state_pressed="true" android:drawable="@drawable/find0" />

<item android:state_focused="true" android:drawable="@drawable/find1" />

<item android:state_enabled="true" android:drawable="@drawable/find1" />

图片

Android自定义控件及按下效果

二,自定义edittext的边框

(1)创建自定义myedittext类

package com.util;  

import android.content.context;  

import android.graphics.canvas;  

import android.graphics.color;  

import android.graphics.paint;  

import android.util.attributeset;  

import android.widget.edittext;  

public class myedittext extends edittext {  

    private paint mpaint;  

    private context mcontext;  

    public myedittext(context context) {  

        super(context);  

    }  

//  public myedittext(context context, attributeset attrs, int defstyle) {

//      super(context, attrs, defstyle);

//      // todo auto-generated constructor stub

//  }   

//   

    public myedittext(context context, attributeset attrs) {  

        super(context, attrs);  

        mcontext=context;  

        // todo auto-generated constructor stub

        //定义画笔   

        mpaint = getpaint();  

            //定义笔画粗细样式   

        mpaint.setstyle(paint.style.fill_and_stroke);  

            //定义笔画颜色   

        mpaint.setcolor(color.gray);  

    public void ondraw(canvas canvas){  

        super.ondraw(canvas);  

        int w = getwidth();  

            int h = getheight();  

        //下划线   

    //      canvas.drawline(0,h-1,  w-1, h-1, mpaint);   

        //下边框   

        canvas.drawline(0, h, w, h, mpaint);  

        //右边框   

        canvas.drawline(w, 0, w, h, mpaint);  

        //左边框   

        canvas.drawline(0, 0, 0, h, mpaint);  

        //上边框   

        canvas.drawline(0, 0, w, 0, mpaint);  

}  

package com.util;

import android.content.context;

import android.graphics.canvas;

import android.graphics.color;

import android.graphics.paint;

import android.util.attributeset;

import android.widget.edittext;

public class myedittext extends edittext {

private paint mpaint;

private context mcontext;

public myedittext(context context) {

super(context);

}

// public myedittext(context context, attributeset attrs, int defstyle) {

// super(context, attrs, defstyle);

// // todo auto-generated constructor stub

// }

//

public myedittext(context context, attributeset attrs) {

super(context, attrs);

mcontext=context;

// todo auto-generated constructor stub

//定义画笔

mpaint = getpaint();

//定义笔画粗细样式

mpaint.setstyle(paint.style.fill_and_stroke);

//定义笔画颜色

mpaint.setcolor(color.gray);

public void ondraw(canvas canvas){

super.ondraw(canvas);

int w = getwidth();

int h = getheight();

//下划线

// canvas.drawline(0,h-1, w-1, h-1, mpaint);

//下边框

canvas.drawline(0, h, w, h, mpaint);

//右边框

canvas.drawline(w, 0, w, h, mpaint);

//左边框

canvas.drawline(0, 0, 0, h, mpaint);

//上边框

canvas.drawline(0, 0, w, 0, mpaint);

(2)在布局文件中直接引用自定义控件

//注意这里 如果不行<view class="com.util.myedittext">  

<com.util.myedittext  

android:id="@+id/register_password"  

android:layout_width="461dip"     

android:layout_height="48dip"  

android:layout_x="398dip"  

android:layout_y="353dip"  

android:password="true"  

style="?android:attr/textviewstyle"  

android:background="@null"  

android:textcolor="@null"  

>  

//注意这里 如果不行<view class="com.util.myedittext">

<com.util.myedittext

android:id="@+id/register_password"

android:layout_x="398dip"

android:layout_y="353dip"

android:password="true"

style="?android:attr/textviewstyle"

android:background="@null"

android:textcolor="@null"

Android自定义控件及按下效果

 三,按钮按下效果,非常简单同样是使用selector

   (1) 在drawable中的xml文件中,代码如下:

<selector xmlns:android="http://schemas.android.com/apk/res/android">    

      <item android:state_pressed="false"   

            android:drawable="@drawable/register_up" />    

      <item android:state_pressed="true"   

            android:drawable="@drawable/register_down" />  

      <item android:state_focused="true"   

      <item android:drawable="@drawable/register_up" />    

<item android:state_pressed="false"

android:drawable="@drawable/register_up" />

<item android:state_pressed="true"

android:drawable="@drawable/register_down" />

<item android:state_focused="true"

<item android:drawable="@drawable/register_up" />

   (2) imagebutton在xml布局文件中的代码:

<imagebutton   

    android:id="@+id/register_btn"  

    android:src="@drawable/suretouch_register_button"  

    android:layout_width="158dip"  

    android:layout_height="149dip"  

    android:layout_x="893dip"  

    android:layout_y="270dip"  

    android:scaletype="centercrop"  

    android:background="@null"  

<imagebutton

android:id="@+id/register_btn"

android:src="@drawable/suretouch_register_button"

android:layout_width="158dip"

android:layout_height="149dip"

android:layout_x="893dip"

android:layout_y="270dip"

android:scaletype="centercrop"

分享到:

继续阅读