61阅读

android开发-Android开发UI之Button

发布时间:2018-05-11 所属栏目:Android

一 : Android开发UI之Button

前言

最近一直在讲androidUI控件的使用方式,这篇文章讲解一下基本上属于用处最广泛的控件之一的Button控件。如果有过其他平台开发经验的程序员,对按钮是不会陌生的。本篇文章首先讲解一下Android的Button控件的常用事件以及事件绑定和触发,再在Button控件中通过设定属性值来实现图文混排,这个功能是在项目中常用到的。

Button控件

Button继承了TextView。它的功能就是提供一个按钮,这个按钮可以供用户点击,当用户对按钮进行操作的时候,触发相应事件,如点击,触摸。

还有一个ImageButton,它继承自Button,可以在ImageButton中显示一个图片展示给用户看,并且对其Text属性设置值的时候是无效的,其它功能与Button一样。

常用事件

一般对于一个按钮而言,用的最多的就是点击事件,Button间接继承自View,而AndroidUI中的所有事件,都是定义在View中的。在本篇博客中,示例讲解的点击事件、触摸事件,其他事件的使用方式与此类似,只是触发的时机不同而已。此处分别需要实现View.OnClickListener、View.OnTouchListener接口的方法。

  • View.OnClickListener,需要实现onClick(View v)方法,其中v为当前触发事件的控件。
  • View.OnTouchListener,需要实现onTouch(View v , MotionEvent event),其中v为当前触发事件的控件,event包括了触摸时的具体内容,如移动、按下等。

下面使用一个示例讲解一下事件的绑定及触发,在示例中显示两个按钮控件,一个为普通按钮,一个为填充图片的按钮,为它们绑定click事件,当点击事件触发的时候,对其尺寸进行修改,为图片按钮绑定触摸事件,当触摸的时候触发,切换图片显示。

布局代码:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical">
  6. <Button
  7. android:id="@+id/btnChangeSize"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:text="点击修改尺寸"
  11. />
  12. <Button
  13. android:id="@+id/btnChangeImg"
  14. android:layout_width="wrap_content"
  15. android:layout_height="wrap_content"
  16. android:background="@drawable/image1"
  17. />
  18. </LinearLayout>

实现代码:

  1. packagecom.bgxt.buttondemo;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.view.MotionEvent;
  5. importandroid.view.View;
  6. importandroid.view.View.OnClickListener;
  7. importandroid.view.View.OnTouchListener;
  8. importandroid.widget.Button;
  9. //通过实现接口,对其进行click、touch事件的支持
  10. publicclassButtonListenerextendsActivityimplementsOnClickListener,
  11. OnTouchListener{
  12. privateButtonbtnChangeSize;
  13. privateButtonbtnChangeImg;
  14. privateintflag=1;
  15. @Override
  16. protectedvoidonCreate(BundlesavedInstanceState){
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.btn_listener);
  19. btnChangeSize=(Button)findViewById(R.id.btnChangeSize);
  20. btnChangeImg=(Button)findViewById(R.id.btnChangeImg);
  21. //对两个按钮进行事件绑定
  22. btnChangeSize.setOnClickListener(this);
  23. btnChangeImg.setOnClickListener(this);
  24. btnChangeImg.setOnTouchListener(this);
  25. }
  26. @Override
  27. publicbooleanonTouch(Viewv,MotionEventevent){
  28. //获取触发事件的Button控件
  29. Buttonbtn=(Button)v;
  30. if(event.getAction()==MotionEvent.ACTION_UP){
  31. //当触摸时按下,则替换展示图片为image1
  32. btn.setBackgroundResource(R.drawable.image1);
  33. }else{
  34. btn.setBackgroundResource(R.drawable.image2);
  35. }
  36. returnfalse;
  37. }
  38. @Override
  39. publicvoidonClick(Viewv){
  40. Buttonbtn=(Button)v;
  41. if(flag==1
  42. &&btn.getWidth()==getWindowManager().getDefaultDisplay()
  43. .getWidth()){
  44. //如果等于屏幕的宽度,则修改标识flag为-1
  45. flag=-1;
  46. }elseif(flag==-1&&btn.getWidth()<100){
  47. flag=1;
  48. }
  49. //设置button控件尺寸
  50. btn.setWidth(btn.getWidth()+(int)(btn.getWidth()*0.1)*flag);
  51. btn.setHeight(btn.getHeight()+(int)(btn.getHeight()*0.1)*flag);
  52. }
  53. }

展示效果图:

Android开发UI之Button_androidbutton

当点击按钮的时候,按钮被放大,当放大到屏幕宽度时,开始缩小。

Android开发UI之Button_androidbutton

当触摸图标按钮的时候,图像改变。

Android开发UI之Button_androidbutton

图文混排

对于在实际项目中,经常会需要设置按钮展示为图文混排的效果,这样可以通过图表更直观的把按钮的功能展示给用户,又可以有简短的文字说明。虽然ImageButton也可以实现图片按钮的效果,但是对于ImageButton而言,设置Text属性是没有作用的,所以这里不讲解ImageButton的使用。对于Button控件,图文混排需要用到一个android:drawableXxx属性(Xxx为图片所在按钮的方向),这个属性配合android:text,就可以实现图文混排的效果。

下面一个示例,分别展示了上下左右四个方位的图标按钮,并且生成一个通过Java代码动态生成图文混排按钮的。因为Button是继承自TextView的,所以通过代码设置图文混排的方式与TextView类似,都需要用到SpannableString类。

布局代码:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical">
  6. <LinearLayout
  7. android:layout_width="match_parent"
  8. android:layout_height="150dp"
  9. android:orientation="horizontal">
  10. <!--图片在上,项目中常用这样的设置-->
  11. <Button
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:drawableTop="@drawable/image2"
  15. android:text="b1"/>
  16. <!--图片在下-->
  17. <Button
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:drawableBottom="@drawable/image2"
  21. android:drawablePadding="10dp"
  22. android:text="b2"/>
  23. <!--图片在左-->
  24. <Button
  25. android:layout_width="wrap_content"
  26. android:layout_height="wrap_content"
  27. android:drawableLeft="@drawable/image2"
  28. android:text="b3"/>
  29. <!--图片在右-->
  30. <Button
  31. android:layout_width="wrap_content"
  32. android:layout_height="wrap_content"
  33. android:drawablePadding="10dp"
  34. android:drawableRight="@drawable/image2"
  35. android:text="b4"/>
  36. </LinearLayout>
  37. <!--声明一个空的按钮,用于进行代码设置-->
  38. <Buttonandroid:layout_width="200dp"android:layout_height="200dp"android:id="@+id/btnSty"android:layout_marginTop="10dp"/>
  39. </LinearLayout>

Java实现代码:

  1. packagecom.bgxt.buttondemo;
  2. importandroid.app.Activity;
  3. importandroid.graphics.Bitmap;
  4. importandroid.graphics.BitmapFactory;
  5. importandroid.os.Bundle;
  6. importandroid.text.SpannableString;
  7. importandroid.text.Spanned;
  8. importandroid.text.style.ImageSpan;
  9. importandroid.widget.Button;
  10. publicclassButtonStyleextendsActivity{
  11. privateButtonbtnSty;
  12. @Override
  13. protectedvoidonCreate(BundlesavedInstanceState){
  14. //TODOAuto-generatedmethodstub
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.btn_style);
  17. //获取按钮控件
  18. btnSty=(Button)findViewById(R.id.btnSty);
  19. //生成SpannableString,用于图片的载体
  20. SpannableStringspannebleLeft=newSpannableString("left");
  21. Bitmapbitmapleft=BitmapFactory.decodeResource(getResources(),R.drawable.image1);
  22. ImageSpanimageSpanLeft=newImageSpan(ButtonStyle.this,bitmapleft);
  23. spannebleLeft.setSpan(imageSpanLeft,0,4,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  24. SpannableStringspannebleRight=newSpannableString("right");
  25. BitmapbitmapRight=BitmapFactory.decodeResource(getResources(),R.drawable.image2);
  26. ImageSpanimageSpanRight=newImageSpan(ButtonStyle.this,bitmapRight);
  27. spannebleRight.setSpan(imageSpanRight,0,5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  28. //把生成的SpannableString追加到按钮上
  29. btnSty.append(spannebleLeft);
  30. btnSty.append("aLi");
  31. btnSty.append(spannebleRight);
  32. }
  33. }

效果展示:

Android开发UI之Button_androidbutton

总结

对于实际项目而言,一般按钮的样式都会通过额外的XML样式文件包装一下,这个之后再介绍,这里只是介绍一下Button的简单使用。按钮的最多用处就是供用户点击从而触发相应时间,没有什么难点。

二 : DRM | Android开发

在本文档中

概观

Android的DRM框架

Widevine的数字版权管理插件

将Widevine的集成到您的产品

Widevine的DRM安全水平

安全级别的详细信息

本文档介绍Widevine的的DRM安全水平和认证要求。它说明了如何集成和分发Widevine的DRM为您的产品。Widevine的数字版权管理解决方案与Android提供了一个免版税许可协议,我们建议您使用它的保护播放解决方案。

概观

丰富的数字内容的可用性是重要的移动设备上的用户。为了使他们的内容广泛,Android开发和数字内容出版商需要一个一致的DRM实现整个Android生态系统的支持。为了使Android设备上提供数字内容,以确保有至少有一个一致的DRM可以跨所有设备,谷歌提供Widevine的DRM免费兼容的Andr??oid设备上。Widevine的数字版权管理插件在Android 3.0和更高版本的平台,集成与Android的DRM框架,并使用硬件支持的保护,以确保电影的内容和用户凭据。

Widevine的数字版权管理插件所提供的内容保护依赖于底层硬件平台的安全和内容保护功能。硬件设备的功能包括硬件安全引导到建立信任链的安全和保护加??密密钥。内容保护设备的功能,包括解密帧在设备和内容输出保护通过可信的输出保护机制的保护。不是所有的硬件??平台支持上述所有的安全和内容保护功能。安全性从来没有在一个地方,在堆栈实现,而是依赖于硬件,软件和服务的整合。硬件安全功能,受信任的引导机构,和一个孤立的处理安全功能的安全的操作系统的组合以提供一个安全的移动设备是至关重要的。

Android的DRM框架

Android 3.0和更高的平台,提供了一个可扩展的DRM框架,允许应用程序使用的DRM机制的选择,管理保护的内容。对于应用程序开发者,该框架提供了一个抽象的,统一的API,简化了管理保护的内容。API隐藏DRM操作的复杂性,并允许跨多种DRM方案的保护和未受保护的内容一致的操作模式。对于设备制造商,内容所有者和互联网数字媒体提供商的DRM框架插件API提供了一种手段,加入到了Android系统,支持的DRM方案选择的内容保护的安全执法。

注意:我们建议整合Widevine的解决方案,因为它已经实现,并准备供您使用。

Widevine的数字版权管理插件

Widevine的数字版权管理插件内置的Andr??oid DRM框架之上,提供DRM和先进的复制保护功能,在Android设备上。Widevine的DRM可以二进制形式下的免版税许可协议Widevine的。Widevine的数字版权管理插件提供的功能许可,安全分发和保护多媒体内容的播放。受保护的内容固定使用一个加密方案基于开放的AES(高级加密标准)。一个应用程序可以对内容进行解密,只有当它获得许可证Widevine的DRM授权服务器为当前用户。Widevine的DRM功能在Android上以同样的方式,因为它在其他平台上。图1显示了如何Widevine的加密插件融入了Android栈:



图1。 Widevine的加密插件

将Widevine的集成到您的产品

以下各节走了过来,你的产品必须满足不同的安全级别,Widevine的支持和要求支持Widevine的。读取信息后,你需要确定你的目标硬件,集成,和Widevine的钥匙箱配置要求的安全级别。

在Android设备上整合和分发Widevine的数字版权管理,请联系您的Andr??oid开始Widevine的数字版权管理集成的技术客户经理。我们建议你及早参与Widevine的团队与设备开发过程中提供最高级别的保护设备上的内容。认证设备使用Widevine的考验玩家到你的Andr??oid技术客户经理的批准,并提交结果。

Widevine的DRM安全水平

安全性从来没有在一个地方,在堆栈实现,而是依赖于硬件,软件和服务的整合。硬件安全功能,受信任的引导机构,和一个孤立的处理安全功能的安全的操作系统的组合以提供一个安全的移动设备是至关重要的。

在系统层面上,Android提供了Linux内核,用于移动设备的扩展和定制的核心安全功能。在应用框架中,Android提供了一个可扩展的的DRM框架和系统架构数字版权的检查和执法。Widevine的数字版权管理插件与硬件平台,以充分利用可用的安全功能集成。提供的安全性水平,是由硬件平台和集成Android和Widevine的数字版权管理插件的安全功能的组合。Widevine的DRM安全支持下表中所示的三个级别的安全性。

安全级别安全的BootloaderWidevine的重点配置安全硬件或ARM信托开发区Widevine的钥匙箱和视频关键处理硬件视频路径

1级 是 工厂提供的Widevine的密钥 是 从来没有清楚地暴露在主机CPU的密钥 硬件保护的视频路径

第2级 是 工厂提供的Widevine的密钥 是 从来没有清楚地暴露在主机CPU的密钥 硬件保护的视频路径

3级 是* 现场调配Widevine的键 没有 暴露于主机CPU的清除键 清除传送到视频解码器的视频流

*设备实现可能使用受信任的bootloader,在bootloader认证通过OEM密钥存储在系统分区。

安全级别的详细信息

1级

在此实现中,,Widevine的DRM密钥和解密的内容绝不会暴露到主机CPU。只有安全硬件或受保护的安全协处理器使用明确的关键价值和安全硬件媒体内容进行解密。此级别的安全需要Widevine的关键箱的出厂配置,或者需要Widevine的关键盒被保护设备安装在制造时。下面介绍的一些关键点,此安全级别:

设备制造商必须提供一个安全启动。信任链从Bootloader必须穿过任何软件或固件组件涉及安全的实施,如ARM的TrustZone保护应用程序和执法安全的视频路径中的任何成分参与。

Widevine的键框中,然后必须将其加密与一个设备唯一的密钥,该密钥是不可见的软件或探测的方法以外的TrustZone。

Widevine的关键盒在出厂前必须安装或交付给该设备使用经批准的安全的发送机制。

设备制造商必须提供Widevine的等级1 OEMCrypto API实现在信任的环境中执行所有关键处理和解密。

第2级

在此安全级别,Widevine的密钥永远不会暴露到主机CPU。只有安全硬件或受保护的安全协处理器使用明确的键值。的AES加密块执行高通过AES解密的媒体流。将所得的透明媒体的缓冲区返回到CPU传送到视频解码器。此级别的安全需要Widevine的关键箱的出厂配置,或者需要Widevine的钥匙箱保护箱安装在制造时的关键。下面的列表描述此安全级别的一些关键要求:

设备制造商必须提供一个安全启动。从Bootloader的信任链必须穿过任何软件或固件成分参与,如在安全实现的TrustZone保护应用。

Widevine的键框中,然后必须将其加密与一个设备唯一的密钥,该密钥是不可见的软件或探测的方法以外的TrustZone。

Widevine的关键盒在出厂前必须安装或交付给该设备使用经批准的安全的发送机制。

设备制造商必须提供Widevine的等级2 OEMCrypto API实现在信任的环境中执行所有关键处理和解密。

设备制造商必须提供一个引导程序加载签署系统仅适用于图像。对于设备,允许用户加载自定义的操作系统或解锁的bootloader,在设备上获得root权限,设备制造商必须支持以下内容: 设备制造商必须提供一个引导程序,允许一个Widevine的密钥盒,只有当要写入引导程序是处于锁定状态。

Widevine的关键框必须被擦除或设备的bootloader是在锁定状态时是无法存储在一个内存区域。

3级

此安全级别依赖于安全引导程序来验证系统图像。的AES加密块执行AES解密的媒体流和将所得的透明缓冲区返回传递到视频解码器的CPU。

设备制造商必须提供一个引导程序加载签署系统仅适用于图像。对于设备,允许用户加载自定义的操作系统或解锁的bootloader,在设备上获得root权限,设备制造商必须支持以下内容:

设备制造商必须提供一个引导程序,允许一个Widevine的密钥盒,只有当要写入引导程序是处于锁定状态。

Widevine的关键框必须被擦除或设备的bootloader是在锁定状态时是无法存储在一个内存区域。

三 : Android开发UI之Radio、Check、Toggle

前言

这篇文章讲解一下Android平台下,RadioButton、CheckBox以及ToggleButton三个控件的用法,因为这三个控件之中都存在一个选中或是没选中的状态,所以放在一起讲解。

这三个控件均是从Button之中间接继承而来的,所以一些Button中的设置都是通用的,如图文混排,动态修改显示内容,因为之前已经对这些内容进行了说明,如果不清楚朋友可以参见一下另外一篇文章:Android开发UI之Button,所以这篇文章只是就这三个控件的常用方法进行简要说明,并给出示例。

CompoundButton

RadioButton(单选按钮)、CheckBox(复选按钮)、ToggleButton(开关按钮)都继承自android.widget.CompoundButton类,而CompoundButton又继承自Button类,在这个类中封装了一个checked属性,用于判断是否被选中,这也是它与Button的不同,对其进行了扩展,这个属性在这三个控件中的用法是一样的。

一般checked属性通过以下方式来设置与获取:

  • android:checked/setChecked(boolean):设置是否被选中。
  • isChecked():获取是否被选中。

RadioButton

RadioButton,为一个单选按钮,一般配合RadioGroup一起使用,在同一RadioGroup内,所有的RadioButton的选中状态为互斥,它们有且只有一个RadioButton被选中,但是在不同的RadioGroup中是不相互影响的。

下面通过一个简单的示例来说明一下,在示例中会存在两个RadioButton,用于定义性别信息,当用户选中了某个后,点击按钮,把选中的信息提示到屏幕上。

布局代码:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical">
  6. <TextView
  7. android:layout_width="fill_parent"
  8. android:layout_height="wrap_content"
  9. android:text="Gender:"/>
  10. <!--定义一个RadioGroup用于包装RadioButton-->
  11. <RadioGroup
  12. android:id="@+id/gender"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content">
  15. <RadioButton
  16. android:layout_width="wrap_content"
  17. android:layout_height="wrap_content"
  18. android:text="male"/>
  19. <RadioButton
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content"
  22. android:text="female"/>
  23. </RadioGroup>
  24. <Button
  25. android:id="@+id/btnGender"
  26. android:layout_width="fill_parent"
  27. android:layout_height="wrap_content"
  28. android:text="选择性别"/>
  29. </LinearLayout>

实现代码:

  1. packagecom.example.changebutton;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.view.View;
  5. importandroid.widget.Button;
  6. importandroid.widget.RadioButton;
  7. importandroid.widget.RadioGroup;
  8. importandroid.widget.Toast;
  9. publicclassRadioButtonActivityextendsActivity{
  10. privateRadioGroupgroup;
  11. privateButtonbtnGender;
  12. @Override
  13. protectedvoidonCreate(BundlesavedInstanceState){
  14. //TODOAuto-generatedmethodstub
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.radiobutton_layout);
  17. group=(RadioGroup)findViewById(R.id.gender);
  18. btnGender=(Button)findViewById(R.id.btnGender);
  19. btnGender.setOnClickListener(newView.OnClickListener(){
  20. @Override
  21. publicvoidonClick(Viewv){
  22. //获取单选按钮的选项个数
  23. intlen=group.getChildCount();
  24. StringmsgString="";
  25. for(inti=0;i<len;i++){
  26. //RadioGroup中包含的子View就是一个RadioButton
  27. RadioButtonradiobutton=(RadioButton)group.getChildAt(i);
  28. if(radiobutton.isChecked()){
  29. //如果被选中,则break循环,并且记录选中信息
  30. msgString="Youchoosetobea"
  31. +radiobutton.getText().toString();
  32. break;
  33. }
  34. }
  35. if(msgString.equals("")){
  36. Toast.makeText(RadioButtonActivity.this,
  37. "Pleaseselectagender!",Toast.LENGTH_SHORT)
  38. .show();
  39. }else{
  40. Toast.makeText(RadioButtonActivity.this,msgString,
  41. Toast.LENGTH_SHORT).show();
  42. }
  43. }
  44. });
  45. }
  46. }

实现效果:

Android开发UI之Radio、Check、Toggle_togglebutton

CheckBox

CheckBox是一个复选按钮,它的用法与RadioButton很像,但是与之不同的是,它可以多选,所以也无需用一个组控件包裹起来。

这里涉及了一动态添加UI控件的知识,在Android中动态增加控件一般有两种方式:

  1. 为需要操作的UI控件指定android:id属性,并且在Activity中通过setContentView()设置需要查找的布局文件。这样才可以在Activity中,使用findViewById(int)方法找到待操作的控件。
  2. 为需要操作的UI控件单独创建XML文件,在Activity中使用动态填充的方式:getLayoutInflater().inflate(int)的方式获取到XML文件定义的控件。

这里通过一个示例来说明CheckBox的使用,在示例中动态添加了CheckBox的选项,并且对其进行选中之后提示选中信息。上面两种方式都用用到,通过一个chooseMethod(boolean)区分。

布局代码:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. android:id="@+id/checkLayout">
  7. <!--这里只是定义了一个按钮,其他的CheckBox控件在代码中动态添加-->
  8. <Button
  9. android:id="@+id/checkBtn"
  10. android:layout_width="fill_parent"
  11. android:layout_height="wrap_content"
  12. android:text="确定"/>
  13. </LinearLayout>

如果使用动态填充的方式获取CheckBox的话,需要添加一个CheckBox的XML文件,代码如下:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <CheckBoxxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content">
  5. </CheckBox>

实现代码:

  1. packagecom.example.changebutton;
  2. importjava.util.ArrayList;
  3. importjava.util.List;
  4. importandroid.app.Activity;
  5. importandroid.app.AlertDialog;
  6. importandroid.os.Bundle;
  7. importandroid.view.View;
  8. importandroid.view.View.OnClickListener;
  9. importandroid.widget.Button;
  10. importandroid.widget.CheckBox;
  11. importandroid.widget.LinearLayout;
  12. publicclassCheckBoxActivityextendsActivityimplementsOnClickListener{
  13. privateList<CheckBox>checkBoxs=newArrayList<CheckBox>();
  14. privateButtoncheckBtn;
  15. @Override
  16. protectedvoidonCreate(BundlesavedInstanceState){
  17. super.onCreate(savedInstanceState);
  18. chooseMethod(false);
  19. checkBtn=(Button)findViewById(R.id.checkBtn);
  20. checkBtn.setOnClickListener(this);
  21. }
  22. @Override
  23. publicvoidonClick(Viewv){
  24. Strings="";
  25. //循环cheackBoxs
  26. for(CheckBoxc:checkBoxs){
  27. if(c.isChecked()){
  28. //如果选中就添加选中结果到msg中。
  29. s+=c.getText()+"\n";
  30. }
  31. }
  32. if("".equals(s)){
  33. s="您没有选中选项!";
  34. }
  35. //使用对话框弹出选中的信息
  36. newAlertDialog.Builder(this).setMessage(s)
  37. .setPositiveButton("Exit",null).show();
  38. }
  39. privatevoidchooseMethod(booleanb){
  40. String[]checkboxText=newString[]{"Youarestudent?",
  41. "DoyoulikeAndroid?","Doyouhaveagirlfriend",
  42. "Doyoulikeonlineshopping?"};
  43. if(b){
  44. //使用本文中提到的第一种方式,通过Id动态加载
  45. setContentView(R.layout.checkbox_layout);
  46. //获取带填充的布局控件
  47. LinearLayoutlinearLayout=(LinearLayout)this
  48. .findViewById(R.id.checkLayout);
  49. //根据数组,循环添加内容
  50. for(inti=0;i<checkboxText.length;i++){
  51. CheckBoxcheckbox=newCheckBox(this);
  52. checkBoxs.add(checkbox);
  53. checkBoxs.get(i).setText(checkboxText[i]);
  54. //把CheckBox加入到布局控件中
  55. linearLayout.addView(checkbox);
  56. }
  57. }else{
  58. //通过动态填充的方式,找到布局文件
  59. LinearLayoutlinearLayout=(LinearLayout)getLayoutInflater()
  60. .inflate(R.layout.checkbox_layout,null);
  61. for(inti=0;i<checkboxText.length;i++){
  62. //在通过动态填充的方式找到CheckBox的文件
  63. CheckBoxcheckbox=(CheckBox)getLayoutInflater().inflate(
  64. R.layout.cheackbox,null);
  65. checkBoxs.add(checkbox);
  66. checkBoxs.get(i).setText(checkboxText[i]);
  67. linearLayout.addView(checkbox);
  68. }
  69. //最后把这个布局文件加载显示
  70. setContentView(linearLayout);
  71. }
  72. }
  73. }

实现效果

Android开发UI之Radio、Check、Toggle_togglebuttonAndroid开发UI之Radio、Check、Toggle_togglebutton

ToggleButton

ToggleButton,一个开关按钮,有两个状态,大抵的用法与上面两个控件一直,可以通过两个属性显示不同状态时,控件内显示文字的内容不同,属性如下:

  • android:textOff/setTextOff(CharSequence):设置关闭时显示内容。
  • android:textOn/setTextOn(CharSequence):设置打开时显示内容。

ToggleButton,这个控件有一个OnCheckedChangeListener()事件,当开关的状态切换的时候会被触发,其中需要传递一个OnCheckedChangeListener接口的实现内,当被切换时,触发其中的onCheckedChange()方法,可以在其中写需要实现的功能代码。

下面通过一个示例讲解一下ToggleButton的使用,使用一个toggleButton控件,控制一个LinearLayout的布局排列方式。

布局代码:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical">
  6. <ToggleButton
  7. android:id="@+id/togBtn"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:checked="true"
  11. android:textOff="横向排列"
  12. android:textOn="纵向排列"/>
  13. <LinearLayout
  14. android:id="@+id/OriLayout"
  15. android:layout_width="match_parent"
  16. android:layout_height="match_parent"
  17. android:orientation="vertical">
  18. <Button
  19. android:layout_width="wrap_content"
  20. android:layout_height="wrap_content"
  21. android:text="btn1"/>
  22. <Button
  23. android:layout_width="wrap_content"
  24. android:layout_height="wrap_content"
  25. android:text="btn2"/>
  26. <Button
  27. android:layout_width="wrap_content"
  28. android:layout_height="wrap_content"
  29. android:text="btn3"/>
  30. </LinearLayout>
  31. </LinearLayout>

实现代码:

  1. packagecom.example.changebutton;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.widget.CompoundButton;
  5. importandroid.widget.CompoundButton.OnCheckedChangeListener;
  6. importandroid.widget.LinearLayout;
  7. importandroid.widget.ToggleButton;
  8. publicclassToggleButtonActivityextendsActivity{
  9. privateToggleButtontogBtn;
  10. privateLinearLayoutlinearLayout;
  11. @Override
  12. protectedvoidonCreate(BundlesavedInstanceState){
  13. //TODOAuto-generatedmethodstub
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.toggle_layout);
  16. togBtn=(ToggleButton)findViewById(R.id.togBtn);
  17. linearLayout=(LinearLayout)this.findViewById(R.id.OriLayout);
  18. togBtn.setOnCheckedChangeListener(newOnCheckedChangeListener(){
  19. @Override
  20. publicvoidonCheckedChanged(CompoundButtonbuttonView,
  21. booleanisChecked){
  22. //通过判断是否选中,来设置LinearLayout的横向纵向排列
  23. if(isChecked){
  24. linearLayout.setOrientation(1);
  25. }else{
  26. linearLayout.setOrientation(0);
  27. }
  28. }
  29. });
  30. }
  31. }

实现效果:

Android开发UI之Radio、Check、Toggle_togglebuttonAndroid开发UI之Radio、Check、Toggle_togglebutton

总结

以上就讲解了一下CompoundButton抽象类下的三个实现控件类的使用,在Android-4.0之后,又新加入了一个控件Switch,对它的使用与之上介绍的三个控件类似,这里就不再详细讲解了。

转载于

本文标题:android开发-Android开发UI之Button
本文地址: http://www.61k.com/1171489.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1