在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ 第五章-開(kāi)關(guān)按鈕ToggleButton和Switch
第十八章-ViewPager+FragmentStatePagerAdapter實(shí)現(xiàn)仿微信Tab
第十五章-GridView實(shí)現(xiàn)動(dòng)態(tài)添加和刪除子項(xiàng)
第九章-進(jìn)度條ProgressBar
第十二章-經(jīng)典的ListView
第十四章-GridView控件
第八章-時(shí)間相關(guān)控件
第七章-下拉框Spinner控件
第二章-EditText探秘
第二十章-Android菜單之上下文菜單
第十一章-各種對(duì)話框Dialog集錦
第二十一章-Android菜單之子菜單
第六章-切換類(lèi)TextSwitcher和ImageSwitcher
第十七章-ViewPager切換界面
第五章-開(kāi)關(guān)按鈕ToggleButton和Switch
第二十二章-PopupWindow浮動(dòng)窗
第十六章-幻燈片ViewFlipper
第二十四章-RecyclerView動(dòng)態(tài)添加、刪除及點(diǎn)擊事件
第三章-交互之王Button控件
第二十三章-全新控件RecyclerView
第一章-好玩的TextView
第十三章-ListView擴(kuò)展(多選、全選、反選)
第四章-玩轉(zhuǎn)單選和多選按鈕
第十章-可以拖動(dòng)的ProgressBar-SeekBar
第十九章-Android菜單之選項(xiàng)菜單

第五章-開(kāi)關(guān)按鈕ToggleButton和Switch

public abstract class
CompoundButton
extends Button
implements Checkable
java.lang.Object
   ?    android.view.View
       ?    android.widget.TextView
           ?    android.widget.Button
               ?    android.widget.CompoundButton
Known Direct Subclasses
CheckBox, RadioButton, Switch, ToggleButton

由繼承結(jié)構(gòu)可以看出Switch和ToggleButton都繼承自CompoundButton這一抽象類(lèi)。因此它們屬性和方法都是類(lèi)似的,首先看一下ToggleButton的用法。

ToggleButton

常用的屬性很簡(jiǎn)單就兩個(gè):

  • android:textOff:按鈕關(guān)閉時(shí)顯示的文本
  • android:textOn:按鈕開(kāi)啟時(shí)顯示的文本

開(kāi)關(guān)監(jiān)聽(tīng)為:setOnCheckedChangeListener,覆寫(xiě)onCheckedChanged(CompoundButton buttonView, boolean isChecked)方法,其中isChecked表示是否選中。

用過(guò)小米手電筒APP的用戶都會(huì)對(duì)它的UI有印象,也就是開(kāi)燈時(shí),手機(jī)屏幕里的燈泡也會(huì)亮,關(guān)燈時(shí)手機(jī)屏幕里的燈泡則不會(huì)亮,下面我們就結(jié)合ToggleButton實(shí)現(xiàn)這一功能。 主布局文件(activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/iv"
        android:layout_margin="20dp"
        android:layout_gravity="center"
        android:src="@drawable/off"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ToggleButton
        android:id="@+id/tb"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textOff="關(guān)燈"
        android:disabledAlpha="@android:integer/config_longAnimTime"
        android:textSize="25sp"
        android:layout_margin="20dp"
        android:textOn="開(kāi)燈" />
</LinearLayout>

設(shè)置了一個(gè)ImageView用于顯示燈泡的開(kāi)關(guān),設(shè)置了一個(gè)ToggleButton當(dāng)做開(kāi)關(guān),并設(shè)置了textOff和textOn屬性。

MainActivity.java代碼(MainActivity.java)

public class MainActivity extends AppCompatActivity {
    private ToggleButton toggleButton;
    private ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toggleButton=(ToggleButton)findViewById(R.id.tb);
        imageView=(ImageView)findViewById(R.id.iv);
        toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
     imageView.setImageResource(isChecked?R.drawable.on:R.drawable.off);
            }
        });
    }
}

這里設(shè)置了setOnCheckedChangeListener選擇變化的監(jiān)聽(tīng),并覆寫(xiě)了其onCheckedChanged方法,根據(jù)參數(shù)isChecked判斷要顯示哪張圖片。 運(yùn)行實(shí)例如下:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/5-1.png" alt="這里寫(xiě)圖片描述" />

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/5-2.png" alt="這里寫(xiě)圖片描述" />

選擇關(guān)燈時(shí)燈泡顯示的也是暗的,選擇開(kāi)燈,燈泡相應(yīng)變亮。 有同學(xué)會(huì)說(shuō)這樣的開(kāi)關(guān)按鈕不夠直觀、不夠美觀,下面介紹一下如何自定義ToggleButton的外觀。

首先準(zhǔn)備兩張圖片:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/5-3.png" alt="這里寫(xiě)圖片描述" />

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/5-4.png" alt="這里寫(xiě)圖片描述" />

在drawable文件下創(chuàng)建xml文件,代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/on" android:state_checked="true"/>
    <item android:drawable="@drawable/off" android:state_checked="false"/>
</selector>

設(shè)置了在android:state_checked為true的時(shí)候顯示on圖片,在android:state_checked為false時(shí)顯示off圖片。 在styles.xml文件中添加代碼:

<style name="MySwitch" parent="@android:style/Widget.CompoundButton">
    <item name="android:button">@drawable/switch_button</item>
</style>

布局文件代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ToggleButton
        android:id="@+id/sw"
        style="@style/MySwitch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#00000000"
        android:checked="true"
        android:textOff="@null"
        android:textOn="@null" />
</LinearLayout>

設(shè)置了style屬性,引入我們?cè)O(shè)置的style樣式,并設(shè)置textOff和textOn為@null這樣就不會(huì)在圖片上顯示文字了。運(yùn)行項(xiàng)目實(shí)例如下:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/5-5.png" alt="這里寫(xiě)圖片描述" />

這時(shí)可以看到ToggleButton的外觀改變了。

Switch

這里外觀實(shí)現(xiàn)了Switch的自定義樣式,功能實(shí)現(xiàn)了動(dòng)態(tài)控制WIFI的開(kāi)關(guān)。首先看一下滑塊外觀(switch_bg.xml):

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true" android:drawable="@drawable/enable" />
    <item android:state_pressed="true"  android:drawable="@drawable/press" />
    <item android:state_checked="true"  android:drawable="@drawable/check_on" />
</selector>

這里定義了三種狀態(tài)下的圖片,一種是state_enable(可用狀態(tài))為true時(shí),一種是state_pressed(按下?tīng)顟B(tài)時(shí))為true,一種是state_checked(選擇狀態(tài))為true。每種狀態(tài)對(duì)應(yīng)不同的背景圖片。 對(duì)于滑動(dòng)軌道的背景定義了兩種不同的圖片(track_bg.xml):

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/track_disable" android:state_enabled="false" />
    <item android:drawable="@drawable/track_default" />
</selector>

一種是可用狀態(tài)即默認(rèn)狀態(tài)下顯示track_default圖片,一種是不可用狀態(tài)下,顯示track_default圖片。 主布局文件如下:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center">
    <Button
        android:id="@+id/btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="禁用Switch按鈕"
        android:layout_marginBottom="15dp"
        android:onClick="button_click"/>
        <Switch
            android:id="@+id/sw"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textOff="OFF"
            android:textOn="ON"
            android:layout_alignParentRight="true"
            android:layout_marginRight="20dp"
            android:thumb="@drawable/switch_bg"
            android:track="@drawable/track_bg"
            android:layout_marginBottom="15dp" />
</LinearLayout>

定義了一個(gè)按鈕Button,設(shè)置了其onClick事件用于動(dòng)態(tài)控制Switch是否可用。定義了一個(gè)Switch按鈕,設(shè)置了其thumb即滑塊外觀和track即滑動(dòng)軌道外觀分別為上面定義的兩個(gè)圖片。 MainActivity.java代碼如下:

public class MainActivity extends Activity {
    Button button;
    Switch sw;
    boolean is_enable = true;
    WifiManager wifiManager;
    AudioManager audioManager;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button)findViewById(R.id.btn);
        sw = (Switch)findViewById(R.id.sw);
        sw.setChecked(true);
        audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

        sw.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (buttonView.isChecked()) {
                    wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
                    wifiManager.setWifiEnabled(true);
                } else {
                    wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
                    wifiManager.setWifiEnabled(false);
                }
            }
        });
    }

  public void button_click(View view){
        if(is_enable == true)
        {
            is_enable = false;
            button.setText("啟用Switch按鈕");
        }
        else{
            is_enable = true;
            button.setText("禁用Switch按鈕");
        }
      sw.setEnabled(is_enable);
  }
}

設(shè)置了布爾型的標(biāo)識(shí)位is_enable用于判斷Switch的使能狀態(tài),并動(dòng)態(tài)控制Button按鈕上文本的顯示。實(shí)現(xiàn)了setOnCheckedChangeListener監(jiān)聽(tīng),判斷Switch的選擇與否,根據(jù)isChecked參數(shù)進(jìn)行判斷是否選中。 對(duì)于開(kāi)啟和關(guān)閉WIFI,這里首先通過(guò)getSystemService方法并傳入Context.WIFI_SERVICE常量獲取WifiManager對(duì)象,調(diào)用這個(gè)對(duì)象的setWifiEnable傳入true或者false就可以控制WIFI的開(kāi)啟或關(guān)閉了。注意這里要配置相應(yīng)的權(quán)限,AndroidManifest.xml代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="demo.androidwar.com.switchdemo">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

</manifest>

配置了CHANGE_WIFI_STATE的權(quán)限。 運(yùn)行項(xiàng)目實(shí)例如下:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/5-6.png" alt="這里寫(xiě)圖片描述" /> http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/5-7.png" alt="這里寫(xiě)圖片描述" /> http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/5-8.png" alt="這里寫(xiě)圖片描述" />

第一個(gè)圖片展示開(kāi)啟WIFI的狀態(tài),我們可以在手機(jī)狀態(tài)欄中看到WIFI的狀態(tài)圖標(biāo),第二個(gè)圖片展示關(guān)閉WIFI的狀態(tài),手機(jī)狀態(tài)欄中已經(jīng)看不到WIFI狀態(tài)圖標(biāo)了,第三個(gè)圖片是禁用Switch按鈕的狀態(tài)。