[Android UI]基礎組件的學習——ToggleButton的使用及樣式修改

前陣子忙着校招面試什麼的,就放下了學習,罪過罪過。國慶前找到了一份實習,本來想着自己應該可以從UI跳到邏輯了,結果發現大佬問了我一下UI組件,我發現原來有這麼多都沒用過的,乖乖繼續學習好了(給大佬們拖後腿真是很愧疚啊啊啊啊)。


****************************************************************

ToggleButton(切換按鈕)是一個用來“開關”的組件,可以設置初始狀態,也可以自定義樣式。這裏先看看這個組件的初始樣子(我用的是genymotion模擬器):



ToggleButton是由Button下的CompoundButton派生出來的,因此很多屬性都和Button一致。它自己的屬性主要是下面這幾個:

android:disabledAlpha:""	//設置按鈕在禁用時的透明度
android:textOff:""		//按鈕沒有被選中時顯示的文字
android:textOn:""		//按鈕被選中時顯示的文字

disabledAlpha目前我還沒有用到,但這個屬性的取值範圍爲0到1,默認值爲0.5。

textOff和textOn則是按鈕上不同狀態的文字。當checked屬性爲true(選中狀態)時,togglebutton會顯示textOn的文字;當checked屬性爲false(未選中狀態)時,togglebutton會顯示textOff的文字。如果不設置textOn和textOff,這兩個屬性的屬性值則默認爲On和Off。

另外,ToggleButton還有checked屬性設置初始狀態是選中還是未選中狀態。如果不添加checked屬性,則checked默認是false,即未選中狀態。


相對應Button的點擊事件,ToggleButton也有它的選中事件。以下代碼是ToggleButton用來響應監聽器,彈出Toast的:

xml佈局:

<ToggleButton>
    android:id="@+id/togglebutton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textOn="打開"
    android:textOff="關閉"
</ToggleButton>

MainActivity:
public class MainActivity extends AppCompatActivity{
    private ToggleButton tb;
    @Override
    protected void OnCreat(Bundle savedInstanceState){
        super.OnCreat(savedInstanceState);
        setContentView(R.layout.activity_main);
        tb = (ToggleButton)findViewById(R.id.togglebutton);
        tb.setOnCheckedChangeListener(new CompoundButton.OnCheckedListener(){
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
                if(isChecked){
                    Toast.makeText(MainActivity.this, "it's on now", Toast.LENGTH_SHORT).show();
                }else{
                    Toast.makeText(MainActivity.this, "it's off now", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

來看看這段代碼的效果:



當然這個樣子的切換狀態開關按鈕我們看的比較少,一般來說手機上看見的都是這個樣子的:



通過自定義樣式,我們也可以將ToggleButton變成這個樣子。

1.使用圖片切換

使用圖片切換,通過selector根據狀態切換圖片,這個不用多說,非常簡單。

toggle_drawable_selector:

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

xml:
<ToggleButton
        android:id="@+id/tb1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/toggle_drawable_selector"
        android:textOn="@null"
        android:textOff="@null"/>

來看看效果(第一個togglebutton):



爲了隱藏文字,我用了@null作爲屬性值設置了textOn和textOff。

這裏能看到的是,如果使用圖片的話,wrap_content會讓這個圖片放大失真,而第二個togglebutton則是圖片原有大小(使用了圖片原有大小設置width和height)。

另外,使用圖片只支持切換,而不支持按鈕的滑動(畢竟是一體的圖片嘛)。


2.自定義可拖動的ToggleButton

可拖動的ToggleButton需要自定義類,重寫方法,主要是依靠觸碰事件手指滑動的距離進行判斷切換。這部分先馬克一下,因爲Android裏可以直接使用switch進行自定義樣式完成一個可拖動的切換開關,簡單便捷。ToggleButton參考的是這篇博文:

Android UI(ToggleButton)詳解



****************************************

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章