Android控件之Button

Android控件之Button

 

1 Button介绍

Button是Android提供的按钮控件。它继承于TextView,详细继承关系如下:

java.lang.Object    

  ↳ android.view.View      

    ↳ android.widget.TextView        

      ↳ android.widget.Button

它继承了View和TextView的所有属性。所以,使用时,可以参考View的属性和TextView的属性对Button进行设计。

 

2 Button常用的三种实现方式

方式一: 匿名实现View.OnClickListener接口

匿名实现,即通过匿名类的方式去实现类View.OnClickListener接口。
优点:直观。可以清晰的看到每个Button的点击处理事件。
缺点:当按钮众多的时候,若为每个按钮单独的去采用匿名类的方式实现View.OnClickListener接口,会显得代码很冗余。
public class ButtonTest extends Activity {

    ...

    private Button mButton;

    ...



   

    @Override

    protected void onCreate(Bundle savedInstanceState) {



        ...

        // 按钮实现方式

        mButton.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                // 按键处理...

 } });

        ...

    }  

}

方式二: Activity实现View.OnClickListener接口

Activity通过覆盖onClick()函数来实现View.OnClickListener接口,之后Button的点击事件全部可以在该Activity的onClick()函数中处理。
优点:统一处理所有Button的点击事件。当Button比较多的时候尤其管用。
public class ButtonTest extends Activity implements View.OnClickListener{

    ...

    private Button mButton;

    ...



   

    @Override

    protected void onCreate(Bundle savedInstanceState) {



        ...

        // 按钮实现方式

        mButton.setOnClickListener(this);

        ...

    }  



 @Override public void onClick(View v) {

        // 按键处理...

 }

}

方式三: 在manifest中定义,然后直接在Activity中实现

在manifest中指定Button的控制函数,然后直接在Button所在的Activity中实现该函数接口。
实现方式如下,首先在Layout中定义Button的android:onClick属性
<Button

    ...

    android:onClick="clickReset"

    ...

/>

上面的定义,指定了该Button的控制函数为clickReset。

接着,在Activity中实现clickReset。如下:

public class ButtonTest extends Activity implements View.OnClickListener{



    ...

    public void clickReset(View v) {

        // 按键处理...

 }

    ...

}

 

2 button示例

创建一个activity,包含3个button。

一个button用于减少屏幕亮度:采用方式一实现。

一个button用于增加屏幕亮度:采用方式二实现。

一个button用于重置屏幕亮度:采用方式三实现。

应用层代码

 

package com.skywang.control;



import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.util.Log;

import android.content.ContentResolver;

import android.net.Uri;



import android.provider.Settings;

import android.provider.Settings.SettingNotFoundException;

import android.view.WindowManager;

public class ButtonTest extends Activity implements View.OnClickListener{

    private static final String TAG = "SKYWANG";



    private Button mButtonPlus  = null;

    private Button mButtonMinus = null;

    

    private int mBrightness = 100;

    

    private static final int MIN_BRIGHTNESS = 10;

    private static final int MAX_BRIGHTNESS = 255;

    private static final int STEP_LEN = 10;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.button_test);

        

        // 保存原始的亮度值

        mBrightness = getBrightness();

        

        mButtonPlus = (Button)findViewById(R.id.button_plus);

        mButtonPlus.setOnClickListener(this);



        mButtonMinus = (Button)findViewById(R.id.button_minus);

        mButtonMinus.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                Log.d(TAG, "click button minus");

                // 减少亮度

                minusBrightness();

            }

        });

    }

    

    @Override

    public void onClick(View v) {

        switch (v.getId()) {

            case R.id.button_plus: {

                Log.d(TAG, "click button plus");

                // 增加亮度

                plusBrightness();

                break;

            }

            default:

                break;

        }

    }

    

    // button_reset的实现函数

    public void clickReset(View v) {

        Log.d(TAG, "click reset");

        setBrightness(mBrightness);

    }

    

    /*

     * 获取当前亮度值

     */

    private int getBrightness() {

        int brightness = 0;

        try {

            brightness = Settings.System.getInt(getContentResolver(),

                    Settings.System.SCREEN_BRIGHTNESS);

        } catch (SettingNotFoundException snfe) {

        }   

        return brightness;

    }

    

    /*

     * 设置当前activity的亮度。

     */

    private void setBrightness(int brightness) {

        WindowManager.LayoutParams lp = getWindow().getAttributes();

        lp.screenBrightness = Float.valueOf(brightness) * (1f / 255f);

        getWindow().setAttributes(lp);

        // 若不保存亮度,退出该activity之后,亮度值会还原。

        saveBrightness(getContentResolver(), brightness);

    }

    

    /*

     * 保存亮度值

     */

    private void saveBrightness(ContentResolver resolver, int brightness) {

        Uri uri = android.provider.Settings.System

                .getUriFor("screen_brightness");

        android.provider.Settings.System.putInt(resolver, "screen_brightness",

                brightness);

        resolver.notifyChange(uri, null);

    }



    /*

     * 增加亮度

     */

    private void plusBrightness() {

        int brightness = getBrightness();

        if (brightness < MAX_BRIGHTNESS) {

            int pre=brightness;            

            brightness += STEP_LEN;

            brightness = brightness<MAX_BRIGHTNESS ? brightness: MAX_BRIGHTNESS;

            setBrightness(brightness);

            Log.d(TAG, "plus brightness : "+pre+"->"+brightness);

        } else {

            Log.d(TAG, "max Brightness!");

        }

    }

    

    /*

     * 减少亮度

     */

    private void minusBrightness() {

        int brightness = getBrightness();

        if (brightness > MIN_BRIGHTNESS) {



            int pre=brightness;

            brightness -= STEP_LEN;

            brightness = brightness>MIN_BRIGHTNESS ? brightness: MIN_BRIGHTNESS;

            setBrightness(brightness);

            Log.d(TAG, "minus brightness : "+pre+"->"+brightness);

        } else {

            Log.d(TAG, "min Brightness!");

        }

    }

    

}

layout文件

<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"

    tools:context=".ButtonTest" >



    <Button

        android:id="@+id/button_plus"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/text_plus" />

    

    

    <Button

        android:id="@+id/button_minus"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/text_minus" />



    <Button

        android:id="@+id/button_reset"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:onClick="clickReset"

        android:text="@string/text_reset" />

    

</LinearLayout>

manifest文件

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

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

    package="com.skywang.control"

    android:versionCode="1"

    android:versionName="1.0" >



    <!-- 添加修改设置的权限 -->

    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

    

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="17" />



    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="com.skywang.control.ButtonTest"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />



                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>



</manifest>

 

运行效果:如图

Android控件之Button

 

点击下载:源代码

 

你可能感兴趣的:(android控件)