安卓天天练练(五)CompoundButton
ToggleButton 让我想起了从前jQuery还没有取消toggle方法时是怎么偷懒的。。
注意:
- 如果LinearLayout,与RelativeLayout不同,必须有orientation。用可视化顶部的横着隔开或者竖着隔开的方形按钮也可以选择,例如android:orientation="vertical"
- 三目运算符前面和js一样,那个state是不需要额外带括号的
- 按钮右键点上去有Edit TextOff,TextOn
- 文字右键点上去的Edit Text可以新建string,填好String和R.string.之后自动生成string.xml到/values
- 图片右键点上去有ScaleType可供选择
- 如果AVD启动黑屏,又没有报错,尝试删除旧的AVD新建后start再run as
package com.example.android_8_1; import android.app.Activity;
import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ImageView;
import android.widget.ToggleButton; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); ToggleButton tg = (ToggleButton) findViewById(R.id.toggleButton1);
tg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
// imported from android.widget.CompoundButton
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub
setBulbState(isChecked);
}
});
} public void setBulbState(boolean state) {
ImageView iv = (ImageView) findViewById(R.id.imageView1);
iv.setImageResource(state? R.drawable.btn : R.drawable.btnhover); ToggleButton tg = (ToggleButton) findViewById(R.id.toggleButton1);
tg.setChecked(state);
} }
XML很简单
<LinearLayout 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"
android:orientation="vertical"
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.android_8_1.MainActivity" > <ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@drawable/btn" /> <ToggleButton
android:id="@+id/toggleButton1"
android:layout_width="80dp"
android:layout_height="40dp"
android:layout_gravity="center_horizontal"
android:text="ToggleButton"
android:textOff="关灯"
android:textOn="开灯" /> </LinearLayout>
安卓自带的机制很实用,此例结束。
另外,单选框可以用<RadioGroup></RadioGroup>包起来形成一组,实现单选排斥。
改成一组连动式CompoundButton
package com.example.android_8_1; import com.example.android_8_1.R.id; import android.app.Activity;
import android.os.Bundle;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ImageView;
import android.widget.ToggleButton; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); ToggleButton tg = (ToggleButton) findViewById(R.id.toggleButton1);
tg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
// imported from android.widget.CompoundButton
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub
setBulbState(isChecked);
}
}); CheckBox cb = (CheckBox) findViewById(R.id.checkBox1);
cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub
setBulbState(isChecked);
}
}); RadioButton rb = (RadioButton) findViewById(id.radioButton2);
rb.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub
setBulbState(isChecked);
}
});
} public void setBulbState(boolean state) {
ImageView iv = (ImageView) findViewById(R.id.imageView1);
iv.setImageResource(state ? R.drawable.btn : R.drawable.btnhover); ToggleButton tg = (ToggleButton) findViewById(R.id.toggleButton1);
CheckBox cb = (CheckBox) findViewById(R.id.checkBox1); tg.setText(state ? R.string.onn : R.string.offn);
cb.setText(state ? R.string.offn : R.string.onn);
tg.setChecked(state);
cb.setChecked(state);
RadioButton rb = (RadioButton) findViewById(R.id.radioButton2);
rb.setChecked(state);
rb = (RadioButton) findViewById(R.id.radioButton1);
rb.setChecked(!state);
} }
XML不变。需要注意的是,如果逻辑上貌似通顺但是出现checkbox点下去没反应,一定是黑白颠倒弄反鸟!
比如文字设为onn活着offn,checked(!state)在对radioButton1还是radioButton2。
安卓天天练练(五)CompoundButton的更多相关文章
- 安卓天天练练(十五)改造BasicSyncAdapter
谷歌的官方示例BasicSyncAdapter是Android Studio工程, 把它依样画葫芦到Eclipse上,然后改造成我需要的样式. 看官方示例源码的时候,看到EntryListActivi ...
- 安卓天天练练(十)ListView
ListView不能和ScrollView同时使用,因为它已经包含了滚动支持. 还有个Gallery http://blog.csdn.net/dazlly/article/details/78639 ...
- 安卓天天练练(十一)用list绑数据
之前在练练ListView的时候就有个 BaseAdapter ba = new BaseAdapter() { 用Adapter来绑数据的方法,该方法中 LinearLayout ll=new Li ...
- 安卓天天练练(四)drawable state 属性
今天又作茧自缚(item 写成 itme ╮(╯▽╰)╭ elipse还自动闭合了标签,来回查查查看报错,为啥点击无效呢!) 真欠抽,怪不得上班地铁上被个sb踢到脚趾头(目测有可能是同家公司的..同站 ...
- 安卓天天练练(三)常用组件Toast
要写几句java package com.narumi.android_7_2; import android.app.Activity; import android.os.Bundle; impo ...
- 安卓培训第五天---上传文件SD卡
有关如何将文件上传到先说说SD卡: package com.example.lesson05_02; import java.io.File; import java.io.FileNotFoundE ...
- 安卓自定义控件(五)触控基础MotionEvent
之前去面试,人家说,我这个事件拦截机制写得太少了,还有一个MotionEvent没写,这个确实也很重要,后来我考虑了一下,决定将这篇文章放到自己定义控件里. 先简单再提一下事件分发,事件分发和拦截主要 ...
- 答CsdnBlogger问-关于VR取代安卓的问题
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 安卓未来的发展和命运几何? 现在VR和AR各种火爆,是否安卓能够在洪流中屹立不倒呢? 你好,其实这个 ...
- 20165236 2017-2018-2《Java程序设计》课程总结
20165236 2017-2018-2<Java程序设计>课程总结 一.每周作业链接汇总: 1.我期望的师生关系 2.学习基础和C语言基础调查 3.20165236郭金涛 预备作业3 L ...
随机推荐
- raft 分布式协议 -- mongodb
http://www.mongoing.com/presentations/webinar-raft-consensus-in-mongodb#rd
- HTTP的报文格式,GET和POST的区别
1.HTTP报文格式 HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的.HTTP有两类报文:请求报文和响应报文. 请求报文: 一个HTTP请求报文由请求行( ...
- 【转】cocos2d-x中锚点设置及定位方式
http://blog.csdn.net/wayne5ning/article/details/8160506 说在前面:以下是基于cocos2d-2.0-x-2.0.3作的总结 问题 在cocos2 ...
- Java获取真实的IP地址--转载
// 获取真实IP的方法() public String getIpAddr() { String ip = request.getHeader("x-forwarded-for" ...
- Android开发之ViewPager实现轮播图(轮播广告)效果的自定义View
最近开发中需要做一个类似京东首页那样的广告轮播效果,于是采用ViewPager自己自定义了一个轮播图效果的View. 主要原理就是利用定时任务器定时切换ViewPager的页面. 效果图如下: 主页面 ...
- Spring for Apache Kafka
官方文档详见:http://docs.spring.io/spring-kafka/docs/1.0.2.RELEASE/reference/htmlsingle/ Authors Gary Russ ...
- ASP.NET程序如何更新发布
ASP.NET程序如何更新发布 一.首先右键项目,点击“发布” 然后,新建名称.类型选择文件,然后点击下一步: 点击发布即可! 二.
- ria service 单元测试
https://blogs.msdn.microsoft.com/kylemc/2011/08/18/unit-testing-a-wcf-ria-domainservice-part-1-the-i ...
- 消除热块(hot block)
上篇日志提到了,那么高的负载,是存在数据块读竞争,下面介绍几个方法来消除块竟争 查找块竟争 SELECT p1 "file#", p2 "block#", p3 ...
- oracle 权限管理
系统权限 系统权限需要授予者有进行系统级活动的能力,如连接数据库,更改用户会话.建立表或建立用户等等.你可以在数据字典视图SYSTEM_PRIVILEGE_MAP上获得完整的系统权限.对象权限和系统权 ...