在本文中,我们将带你了解用自定义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自定义按钮)
- (15)各种Button 与排列 OutlineButton,ButtonBar,Expanded,RaisedButton,StadiumBorder,FlatButton.icon
- Android ToggleButton
- Android ToggleButton:状态切换的Button
- Android 控件 --ToggleButton
用自定义Button实现ToggleButton(html自定义按钮)
原文转自:http://marshal.easymorse.com/archives/3045
在最简单的自定义按钮的基础上,实现一个类似ToggleButton的功能。
点击一个按钮,就会有按下的效果,再点击会弹起。
主要是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
效果
至于倒数第二行和倒数第一行的效果为啥一样。。可能是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
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和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
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实现ToggleButton和html自定义按钮的分享已经结束,谢谢您的关注,如果想了解更多关于(15)各种Button 与排列 OutlineButton,ButtonBar,Expanded,RaisedButton,StadiumBorder,FlatButton.icon、Android ToggleButton、Android ToggleButton:状态切换的Button、Android 控件 --ToggleButton的相关知识,请在本站进行查询。
本文标签: