www.91084.com

GVKun编程网logo

用自定义Button实现ToggleButton(html自定义按钮)

23

在本文中,我们将带你了解用自定义Button实现ToggleButton在这篇文章中,我们将为您详细介绍用自定义Button实现ToggleButton的方方面面,并解答html自定义按钮常见的疑惑,

在本文中,我们将带你了解用自定义Button实现ToggleButton在这篇文章中,我们将为您详细介绍用自定义Button实现ToggleButton的方方面面,并解答html自定义按钮常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的(15)各种Button 与排列 OutlineButton,ButtonBar,Expanded,RaisedButton,StadiumBorder,FlatButton.icon、Android ToggleButton、Android ToggleButton:状态切换的Button、Android 控件 --ToggleButton

本文目录一览:

用自定义Button实现ToggleButton(html自定义按钮)

用自定义Button实现ToggleButton(html自定义按钮)

原文转自:http://marshal.easymorse.com/archives/3045

在最简单的自定义按钮的基础上,实现一个类似ToggleButton的功能。

image

点击一个按钮,就会有按下的效果,再点击会弹起。

主要是MyTextButton的实现中增加覆盖方法:

package com.easymorse.videodemo;

import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.Button;

public class MyTextButton extends Button {

    private boolean checked;

    public MyTextButton(Context context, AttributeSet attrs) { 
        super(context, attrs); 
    }

    @Override 
    public boolean performClick() { 
        this.checked = !this.checked; 
        return super.performClick(); 
    }

    @Override 
    protected int[] onCreateDrawableState(int extraSpace) { 
        if (!checked) { 
            return Button.PRESSED_ENABLED_SELECTED_STATE_SET; 
        } else { 
            return Button.EMPTY_STATE_SET; 
        } 
    } 
}

源代码见:

http://easymorse.googlecode.com/svn/tags/video.demo-0.6.0/

(15)各种Button 与排列 OutlineButton,ButtonBar,Expanded,RaisedButton,StadiumBorder,FlatButton.icon

(15)各种Button 与排列 OutlineButton,ButtonBar,Expanded,RaisedButton,StadiumBorder,FlatButton.icon

效果

至于倒数第二行和倒数第一行的效果为啥一样。。可能是fluttersdk升级了。。之前的api不再生效。。算是留坑!

代码

import ''package:flutter/material.dart'';

class ButtonDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final Widget _floatButtonDemo =
        Row(mainAxisAlignment: MainAxisAlignment.center, children: [
      FlatButton(
        onPressed: () {},
        child: Text("FlatButton"),
        splashColor: Colors.grey,
        textColor: Theme.of(context).accentColor,
        color: Colors.black87,
      ),
      FlatButton.icon(
        icon: Icon(Icons.add),
        onPressed: () {},
        label: Text("FlatButton.icon"),
        splashColor: Colors.grey,
        textColor: Theme.of(context).accentColor,
        color: Colors.black87,
      )
    ]);

    final Widget _raisedButtonDemo =
        Row(mainAxisAlignment: MainAxisAlignment.center, children: [
      Theme(
          // data: ThemeData(),
          data: Theme.of(context).copyWith(
              buttonColor: Theme.of(context).accentColor,
              buttonTheme: ButtonThemeData(
                textTheme: ButtonTextTheme.primary,
                // shape: BeveledRectangleBorder(borderRadius: BorderRadius.circular(5.0)),
                shape: StadiumBorder(),
              )),
          child: RaisedButton(
            onPressed: () {},
            child: Text("RaisedButton"),
            splashColor: Colors.grey,
            textColor: Theme.of(context).accentColor,
            // color: Colors.white,
            // textTheme: ButtonTextTheme.primary,
            elevation: 0.0,
          )),
      SizedBox(
        width: 16.0,
      ),
      RaisedButton.icon(
        icon: Icon(Icons.add),
        onPressed: () {},
        label: Text("RaisedButton.icon"),
        splashColor: Colors.grey,
        textColor: Theme.of(context).accentColor,
        elevation: 12.0,
      )
    ]);

    final Widget _outerLineButtonDemo =
        Row(mainAxisAlignment: MainAxisAlignment.center, children: [
      Theme(
          // data: ThemeData(),
          data: Theme.of(context).copyWith(
              buttonColor: Theme.of(context).accentColor,
              buttonTheme: ButtonThemeData(
                textTheme: ButtonTextTheme.primary,
                // shape: BeveledRectangleBorder(borderRadius: BorderRadius.circular(5.0)),
                shape: StadiumBorder(),
              )),
          child: OutlineButton(
            onPressed: () {},
            child: Text("OutlineButton"),
            splashColor: Colors.grey[100],
            textColor: Colors.black,
            borderSide: BorderSide(color: Colors.black),
            highlightedBorderColor: Colors.grey,
            // textTheme: ButtonTextTheme.primary,
          )),
      SizedBox(
        width: 16.0,
      ),
      OutlineButton.icon(
        icon: Icon(Icons.add),
        onPressed: () {},
        label: Text("OutlineButton.icon"),
        splashColor: Colors.grey,
        textColor: Theme.of(context).accentColor,
      )
    ]);

    final Widget _widthOuterLineButton = Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Container(
          width: 200,
          child: OutlineButton(
            onPressed: () {},
            child: Text("_widthOuterLineButton"),
            splashColor: Colors.grey,
            textColor: Colors.blue,
          ),
        )
      ],
    );
    final Widget _expendOuterLineButton = Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Expanded(
          child: OutlineButton(
            onPressed: () {},
            child: Text("_expendOuterLineButton"),
            splashColor: Colors.grey,
            textColor: Colors.blue,
          ),
        )
      ],
    );
    final Widget _expend2OuterLineButton = Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Expanded(
          flex: 1,
          child: OutlineButton(
            onPressed: () {},
            child: Text("权重 for 1"),
            splashColor: Colors.grey,
            textColor: Colors.blue,
          ),
        ),
        SizedBox(
          width: 15,
        ),
        Expanded(
          //权重属性
          flex: 2,
          child: OutlineButton(
            onPressed: () {},
            child: Text("权重 for 2"),
            splashColor: Colors.grey,
            textColor: Colors.blue,
          ),
        )
      ],
    );
    //一行并列行显示的按钮
    final Widget _buttonBar = Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        ButtonBar(
          children: [
            OutlineButton(
              onPressed: () {},
              child: Text("ButtonBar"),
              splashColor: Colors.grey,
              textColor: Colors.blue,
            ),
            OutlineButton(
              onPressed: () {},
              child: Text("ButtonBar"),
              splashColor: Colors.grey,
              textColor: Colors.blue,
            ),
          ],
        )
      ],
    );
    //对刚才的并排中间添加边距
    final Widget _buttonBarPaddingv = Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Theme(
          data: Theme.of(context).copyWith(
              buttonTheme: ButtonThemeData(
                  padding: EdgeInsets.symmetric(horizontal: 100.0))),
          child: ButtonBar(
            children: [
              OutlineButton(
                onPressed: () {},
                child: Text("ButtonBar"),
                splashColor: Colors.grey,
                textColor: Colors.blue,
              ),
              OutlineButton(
                onPressed: () {},
                child: Text("ButtonBar"),
                splashColor: Colors.grey,
                textColor: Colors.blue,
              ),
            ],
          ),
        )
      ],
    );
    return Scaffold(
      appBar: AppBar(
        title: Text("button Demo"),
        elevation: 0.0,
      ),
      body: Container(
        padding: EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            _floatButtonDemo,
            _raisedButtonDemo,
            _outerLineButtonDemo,
            _widthOuterLineButton,
            _expendOuterLineButton,
            _expend2OuterLineButton,
            _buttonBar,
            _buttonBarPaddingv
          ],
        ),
      ),
    );
  }
}

 

Android ToggleButton

Android ToggleButton

ToggleButton有两种状态:选中和未选择状态,并且需要为不同的状态设置不同的显示文本:

<ToggleButton 
            android:id="@+id/textview_show_all"
            android:layout_width="match_parent"
            android:layout_height="match_parent" 
            android:textOn="ON" //选中显示文本
            android:textOn="OFF" //未选中显示文本
           />

 选中状态显示效果

 

未选中的时候显示效果

 

 

toggleButton.setOnCheckedChangeListener(); // 对应点击事件--- 

public CharSequence getTextOff ();   // 返回按钮未选中时的文本。返回值  文本

public CharSequence getTextOn ();    //返回按钮选中时的文本。  返回值    文本

setBackgroundDrawable (Drawable d);  //设置指定的可绘制(译者注:如图片)为背景

setChecked (boolean checked);     // 改变按钮的选中状态。

setTextOff (CharSequence textOff);   // 设置按钮未选中时显示的文本。

setTextON (CharSequence textOn);   // 设置按钮选中时显示的文本。

onFinishInflate ();//XML文件加载视图完成时调用。这个函数在加载的最后阶段被调用,所有的子视图已经被添加。

drawableStateChanged ();//在视图状态的变化影响到所显示可绘制的状态时调用这个方法。

Android ToggleButton:状态切换的Button

Android ToggleButton:状态切换的Button



Android ToggleButton:状态切换的Button

Android ToggleButton和Android Button类似,但是ToggleButton提供了一种选择机制,可以表达Button处于何种状态,比如常见的WiFi打开或者关闭状态等等这种类似与非门的状态机。
标准的Android ToggleButton样式简单,如果要实现自定义的、表达力丰富的ToggleButton,其中一个方式就是写selector.xml文件作为ToggleButton的background,现在写一个例子。
布局文件activity_main.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"
    tools:context="zhangphil.demo.MainActivity">

    <ToggleButton
        android:id="@+id/toggleButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:checked="true"
        android:textOff="关闭"
        android:textOn="打开"
        android:background="@drawable/selector"/>
</RelativeLayout>


activity_main.xml需要的、位于drawable目录下的selector.xml文件:

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


上层Java代码:

package zhangphil.demo;

import android.app.Activity;
import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.Toast;
import android.widget.ToggleButton;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ToggleButton mToggleButton = (ToggleButton) findViewById(R.id.toggleButton);
        mToggleButton.setOnCheckedChangeListener(mOnCheckedChangeListener);
    }

    private ToggleButton.OnCheckedChangeListener mOnCheckedChangeListener = new ToggleButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            String s="";

            if(isChecked)
                s="打开";
            else
                s="关闭";

            Toast.makeText(getApplication(),s,Toast.LENGTH_SHORT).show();
        }
    };
}


代码运行结果如图:


附录文章:

1,《Android Segmented RadioButton》链接地址:http://blog.csdn.net/zhangphil/article/details/51441677
2,《Android选项切换条SHSegmentControl》链接地址:http://blog.csdn.net/zhangphil/article/details/49720805

Android 控件 --ToggleButton

Android 控件 --ToggleButton

1. 什么是 ToggleButton

ToggleButton 有两种状态:选中和未选中状态

并且需要为不同的状态设置不同的显示文本

2.ToggleButton 属性

android:checked="true"

android:textOff="关"

android:textOn="开"

3. 代码

<!--activity_main.xml-->

<ToggleButton
        android:id="@+id/ToggleButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textOff="关"
        android:textOn="开"
        android:checked="false"/>

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/ToggleButton"
    android:background="@drawable/close"/>
//MainActivity.java

public class MainActivity extends AppCompatActivity {

    private ToggleButton tb;
    private ImageView img;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化控件
        tb = (ToggleButton) findViewById(R.id.ToggleButton);
        img = (ImageView) findViewById(R.id.imageView1);

        //给当前的tb设置监听
        tb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                /**
                 * 当tb被点击的时候,当前的方法会执行
                 *
                 * compoundButton -- 代表被点击控件的本身
                 * b  -- 代表被点击的控件的状态
                 *
                 * 当点击这个tb的时候,更换img的背景
                 */
                img.setBackgroundResource(b?R.drawable.light:R.drawable.close);
            }
        });
    }
}

效果如下:

 

今天的关于用自定义Button实现ToggleButtonhtml自定义按钮的分享已经结束,谢谢您的关注,如果想了解更多关于(15)各种Button 与排列 OutlineButton,ButtonBar,Expanded,RaisedButton,StadiumBorder,FlatButton.icon、Android ToggleButton、Android ToggleButton:状态切换的Button、Android 控件 --ToggleButton的相关知识,请在本站进行查询。

本文标签: