织梦CMS - 轻松建站从此开始!

欧博ABG-会员注册-官网网址

欧博allbetAndroid 开关控件Switch

时间:2024-07-02 20:03来源: 作者:admin 点击: 54 次
文章浏览阅读1.3w次,点赞2次,收藏30次。目录:1.应用场景与概述2.常用属性3.简单使用4.更改默认Switch的样式5.自定义Switch1.应用场景与概述Switch是在4.0以后推出的,所以要注意开发时的minsdk设置,google在API 21后也推出support v7 包下的Sw

扣扣技术交流群:460189483

目录:
    1.应用场景与概述
    2.常用属性
    3.简单使用
    4.更改默认Switch的样式
    5.自定义Switch
    
1.应用场景与概述
    Switch是在4.0以后推出的,所以要注意开发时的minsdk设置,google在API 21后也推出support v7 包下的SwitchCompa的Material Design
开关控件,对低版本的有了更好的的支持。其实switch的应用场景和ToggleButton类似,多应用于两种状态的切换。
    
2.常用属性   

android:typeface="normal":设置字体类型 android:track="":设置开关的轨迹图片 android:textOff="开":设置开关checked的文字 android:textOn="关":设置开关关闭时的文字 android:thumb="":设置开关的图片 android:switchMinWidth="":开关最小宽度 android:switchPadding="":设置开关 与文字的空白距离 android:switchTextAppearance="":设置文本的风格 android:checked="":设置初始选中状态 android:splitTrack="true":是否设置一个间隙,让滑块与底部图片分隔(API 21及以上) android:showText="true":设置是否显示开关上的文字(API 21及以上)

简单设置:

<pre name="code" class="html"> <Switch android:layout_width="wrap_content" android:layout_height="wrap_content" android:textOff="" android:textOn="" android:switchMinWidth="120dp" android:thumb="@android:color/transparent" android:track="@drawable/switch_track" /> <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android=""> <item android:drawable="@drawable/switch_close" android:state_checked="false" /> <item android:drawable="@drawable/switch_open" android:state_checked="true" /> </selector>

 

效果展示:

这里layout_width:这能设置整个布局的宽度,不能设置具体的Switch的大小,需要使用switchMinWidth属性来设置。

    thumb:文字所携带的背景,设置为背景色进行隐藏。不设置会出现一个背景框。

    track:设置开关的背景图片,类似于button的background。

    textoff、texton:设置开关时的文字显示。
   Switch的点击事件:

private Switch mSwitch; private TextView mText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSwitch = (Switch) findViewById(R.id.switch_); mText = (TextView) findViewById(R.id.text_); // 添加监听 mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked){ mText.setText("开启"); }else { mText.setText("关闭"); } } }); }

3.简单使用
    3.1)主布局  

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="" xmlns:tools="" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.aswitch.MainActivity"> <!-- android:typeface="normal":设置字体类型 android:track="":设置开关的轨迹 android:textOff="开":设置开关checked的文字 android:textOn="关":设置开关关闭时的文字 android:thumb="":设置开关的图片 android:switchMinWidth="":开关最小宽度 android:switchPadding="":设置开关 与文字的空白距离 android:switchTextAppearance="":设置文本的风格 android:checked="":设置初始选中状态 android:splitTrack="true":是否设置一个间隙,让滑块与底部图片分隔 --> <TextView android:id="@+id/switch_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="switch:" /> <Switch android:layout_marginTop="10dp" android:layout_below="@+id/switch_tv" android:id="@+id/switch1" android:typeface="normal" android:textOff="开" android:textOn="关" android:switchMinWidth="40dp" android:switchPadding="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/text" android:layout_marginTop="10dp" android:layout_below="@+id/switch1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> <TextView android:layout_below="@+id/text" android:id="@+id/switch_compat_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="switchCompat:" /> <android.support.v7.widget.SwitchCompat android:layout_marginTop="10dp" android:layout_below="@+id/switch_compat_tv" android:id="@+id/switch_compat" android:typeface="normal" android:switchMinWidth="40dp" android:switchPadding="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/text1" android:layout_marginTop="10dp" android:layout_below="@+id/switch_compat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> </RelativeLayout>

3.2)主布局java类

package com.example.aswitch; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.SwitchCompat; import android.widget.CompoundButton; import android.widget.Switch; import android.widget.TextView; public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener{ private Switch aSwitch; private SwitchCompat aSwitchCompat; private TextView text1,text2,switchText,switchCompatText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //实例化 aSwitch = (Switch) findViewById(R.id.switch1); aSwitchCompat = (SwitchCompat) findViewById(R.id.switch_compat); text1 = (TextView) findViewById(R.id.text); text2 = (TextView) findViewById(R.id.text1); //设置Switch事件监听 aSwitch.setOnCheckedChangeListener(this); aSwitchCompat.setOnCheckedChangeListener(this); } /* 继承监听器的接口并实现onCheckedChanged方法 * */ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { switch (buttonView.getId()){ case R.id.switch1: if(isChecked){ text1.setText("开"); }else { text1.setText("关"); } break; case R.id.switch_compat: if(isChecked){ text2.setText("开"); }else { text2.setText("关"); } break; default: break; } } }

3.3)截图效果

4.更改默认Switch的样式
    4.1)在styles.xml中自定义style

<!--自定义switch的按钮和轨迹颜色theme--> <style name="mySwitch" parent="Theme.AppCompat.Light"> <!-- switch 打开时的按钮的颜色 轨迹颜色默认为30%(看效果就明白30%是怎么回事了)这个颜色 --> <item name="colorControlActivated">@android:color/holo_green_dark</item> <!-- switch关闭时的按钮的颜色 --> <item name="colorSwitchThumbNormal">@color/colorAccent</item> <!-- switch关闭时的轨迹的颜色 30%这个颜色 --> <item name="android:colorForeground">@color/colorPrimaryDark</item> </style>

    4.1)在布局文件中通过android:theme="@style/mySwitch"设置

<android.support.v7.widget.SwitchCompat android:layout_marginTop="10dp" android:layout_below="@+id/switch_compat_tv" android:id="@+id/switch_compat" android:typeface="normal" android:theme="@style/mySwitch" android:switchMinWidth="40dp" android:switchPadding="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" />

5.自定义Switch    

    5.1)导入资源图片thumb.png ,thumb_on.png ,track_nomal.png ,track_on.png ,track_press.png
    
    5.2)实现thumb_selector.xml   

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android=""> <!--选中时的滑块图片--> <item android:drawable="@drawable/thumb_on" android:state_checked="true"/> <!--正常情况滑块图片--> <item android:drawable="@drawable/thumb"/> </selector>

5.3)实现track_selector.xml

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android=""> <!--打开时switch轨迹图片--> <item android:state_pressed="true" android:drawable="@drawable/track_on" /> <!--按压时switch轨迹图片--> <item android:state_checked="true" android:drawable="@drawable/track_press" /> <!--正常状态switch轨迹图片--> <item android:drawable="@drawable/track_nomal" /> </selector>

5.4)主布局actiity_second.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="" xmlns:tools="" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.aswitch.SecondActivity"> <TextView android:id="@+id/CustomSwitchCompat_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="CustomSwitchCompat:" /> <android.support.v7.widget.SwitchCompat android:layout_marginTop="10dp" android:layout_below="@+id/CustomSwitchCompat_tv" android:id="@+id/CustomSwitchCompat" android:layout_width="wrap_content" android:minWidth="40dp" android:minHeight="20dp" android:layout_height="wrap_content" /> <TextView android:id="@+id/custom_result" android:layout_marginTop="10dp" android:layout_below="@+id/CustomSwitchCompat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> </RelativeLayout>

5.5)主布局java类SecondActivity.java  

package com.example.aswitch; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.SwitchCompat; import android.widget.CompoundButton; import android.widget.Switch; import android.widget.TextView; public class SecondActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener{ private SwitchCompat customSwitchCompat; private TextView custom_result,CustomSwitchCompat_tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); //实例化 customSwitchCompat = (SwitchCompat) findViewById(R.id.CustomSwitchCompat); custom_result = (TextView) findViewById(R.id.custom_result); //设置自定义的thumb和track customSwitchCompat.setThumbResource(R.drawable.thumb_selector); customSwitchCompat.setTrackResource(R.drawable.track_selector); //设置Switch事件监听 customSwitchCompat.setOnCheckedChangeListener(this); } /* 继承监听器的接口并实现onCheckedChanged方法 * */ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked){ custom_result.setText("开"); }else { custom_result.setText("关"); } } }

ps:其实自定义的途径还可以通过shape的绘制和java代码绘制,在这里就不详细说了
    
    参考:

(责任编辑:)
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:
发布者资料
查看详细资料 发送留言 加为好友 用户等级: 注册时间:2024-12-22 01:12 最后登录:2024-12-22 01:12
栏目列表
推荐内容