前陣子忙着校招面試什麼的,就放下了學習,罪過罪過。國慶前找到了一份實習,本來想着自己應該可以從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參考的是這篇博文:
****************************************