zoukankan      html  css  js  c++  java
  • 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>

    运行效果:如图

    点击下载:源代码

  • 相关阅读:
    应用中心无法访问时后台插件列表访问慢的优化
    HTML5 地理定位 【来自百度应用分享平台】
    快捷键补充
    进击的雨燕------------在导航上的UISearchController实现动画效果
    iOS -------- 应用程序引用系统通讯录
    字典和JSON格式字符串相互转换
    进击的雨燕--------------------Swift ? !
    Objective-C多继承的实现
    进击的雨燕------------iOS8中UIAlertController
    进击的雨燕-------------------高级运算符
  • 原文地址:https://www.cnblogs.com/skywang12345/p/3113871.html
Copyright © 2011-2022 走看看