android_基础_switch

121 篇文章 1 订阅

目录:

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=""				设置开关的轨迹,置开关的背景图片,类似于button的background。  	
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="http://schemas.android.com/apk/res/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="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    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="http://schemas.android.com/apk/res/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="http://schemas.android.com/apk/res/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="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    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代码绘制,在这里就不详细说了

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
a 3;b 2;a+ b 等价于 >a a + b; a % b;a a%b;结果a 1; b % a;b b%a;结果b 2; i + i++ ; i i + i ++ ; 2 i + ++i ; i i + ++i ; 3 i + i + i; i i + i + i 3 i + ++i + i ; i i + ++i + i ; 5 i + ++i + ++i ; i i + ++i + ++i ; 6 i i +++ i; i i ++ + i; 3 i i i; i i i; 1 一个等号是赋值运算 整个表达式的值就是左边变量被赋的值 两个等号是比较运算 结果肯定是boolean类型 true false 非 是逻辑运算符 只有一个操作数 取反 是位运算符 对二进制表示的数值进行运算 int a 3; int b 2; boolean b9 a++ > b & a % b++ 1 & a < b ; 3>1 & 3%1 1 a 4 b 1 a 3 b 2 左移 无所谓带符号或无符号 因为最高位会移丢 :"a<<b; "将二进制形式的a逐位左移b位 最低位空出的b位补0 带符号右移:"a>>b; "将二进制形式的a逐位右移b位 最高位空出的b位补原来的符号位 无符号右移:"a>>>b;"将二进制形式的a逐位右移b位 最高位空出的b位补0 十进制的10 >二进制数是 int a 10; int i a; 00000000000000000000000 1010 a的值 11111111111111111111111 0101 i的值 00000000000000000000000000 1 j的值 00000000000000000000 1010000 k的值 0000000000000000000000000 10 m的值 63 31 1 15 1 7 1 3 1 1 1 0 1 00000000000000000111111 1 1+1 2+1 2 2 + 1 2 2 2 + 1 2 2 2 2 +1 2的5次方 1 +2+ 4+ 8+ 16 + 32 63 负的十进制的 1 128 >负的二进制数 1 取绝对值 1 128 2 转换为二进制 000001 00000010000000 一共32位 3 取反加一 111111 32位全是1 11111110000000 一共32位 负的二进制数 >负的十进制数 1 减1取反 或取反加1 0000001 00000010000000 2 转换为十进制正数 1 128 3 乘 1 1 128 1 a>b a: c>d c:d ;运算顺序 2 已知m n k是整型变量 执行下列语句后 m n k分别是多少 int x 3; int y 1; System out println y + x 1 ; y y + x 1 y 1 + 3 1 m n k 8; m + n + k + 1; m m + n + k +1 25 n + k + 1 n n + k +1 k + 1 k k +1; 5 int x 4 y 2 z 3;求表达式 y z++ x的值是多少 表达式运行之后 x y z的值分别是多少 y y z++ x 2 3 3 7 z 4 x 3 练习: int age ; 如果小于18 输出"未成年" > 18 < 120;输出"此人芳龄xxx岁 可以学android" > 120; 输出"妖怪" switch和if else的区别 1 switch 表达式的数据类型只能是byte short int char enum 7 0String if boolean型的表达式 else if boolean型的表达式 2 switch不能做范围判断 if else可以判断范围; 3 switch一旦进入了一个case default 子句 就会一直执行 到遇到break或整个后面的所有语句执行完才结束 if else 只要进了一个分支 就不会再进入其他分支 注意:switch中的case不能是变量 必须是常量 int a 10; int b 20; 要交换a和b里面的值 int temp; temp a; a b; b temp;">a 3;b 2;a+ b 等价于 >a a + b; a % b;a a%b;结果a 1; b % a;b b%a;结果b 2; i + i++ ; i i + i ++ ; 2 i + ++i ; i i + ++i ; 3 i + i + i; i i + i + i 3 i + ++i + i ; i i + ++i + i ; 5 i + ++i + ++i ; i i + ++i + ++i ; 6 i i +++ i; i i [更多]
VR(Virtual Reality)即虚拟现实,是一种可以创建和体验虚拟世界的计算机技术。它利用计算机生成一种模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真,使用户沉浸到该环境中。VR技术通过模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间。 VR技术具有以下主要特点: 沉浸感:用户感到作为主角存在于模拟环境中的真实程度。理想的模拟环境应该使用户难以分辨真假,使用户全身心地投入到计算机创建的三维虚拟环境中,该环境中的一切看上去是真的,听上去是真的,动起来是真的,甚至闻起来、尝起来等一切感觉都是真的,如同在现实世界中的感觉一样。 交互性:用户对模拟环境内物体的可操作程度和从环境得到反馈的自然程度(包括实时性)。例如,用户可以用手去直接抓取模拟环境中虚拟的物体,这时手有握着东西的感觉,并可以感觉物体的重量,视野中被抓的物体也能立刻随着手的移动而移动。 构想性:也称想象性,指用户沉浸在多维信息空间中,依靠自己的感知和认知能力获取知识,发挥主观能动性,寻求解答,形成新的概念。此概念不仅是指观念上或语言上的创意,而且可以是指对某些客观存在事物的创造性设想和安排。 VR技术可以应用于各个领域,如游戏、娱乐、教育、医疗、军事、房地产、工业仿真等。随着VR技术的不断发展,它正在改变人们的生活和工作方式,为人们带来全新的体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值