自定义控件中如何实现按钮之间的共轭?

问题:布局如图

控件BottomLayout为下方的三个ImageButton

意图:将下方的三个按钮实现为时刻有且只有一个被选中(类似微博)

最简单的解决方法:

 1 package com.example.weibo;
 2
 3 import android.content.Context;
 4 import android.util.AttributeSet;
 5 import android.view.LayoutInflater;
 6 import android.view.View;
 7 import android.widget.ImageButton;
 8 import android.widget.LinearLayout;
 9
10
11 public class BottomLayout extends LinearLayout {
12     private ImageButton main;
13     private ImageButton add;
14     private ImageButton account;
15
16     final int home_b = R.drawable.ic_home_black_48dp;
17     final int home_g = R.drawable.ic_home_grey600_48dp;
18     final int add_b = R.drawable.ic_add_circle_black_48dp;
19     final int add_g = R.drawable.ic_add_circle_grey600_48dp;
20     final int account_b = R.drawable.ic_account_box_black_48dp;
21     final int account_g = R.drawable.ic_account_box_grey600_48dp;
22
23     public BottomLayout(Context context,AttributeSet attrs){
24         super(context,attrs);
25         LayoutInflater.from(context).inflate(R.layout.bottom,this);
26         main = (ImageButton)findViewById(R.id.bottom_main);
27         add = (ImageButton)findViewById(R.id.bottom_add);
28         account = (ImageButton)findViewById(R.id.bottom_account);
29         main.setTag("g");
30         add.setTag("g");
31         account.setTag("g");
32
33
34
35
36         main.setOnClickListener(new OnClickListener(){
37             @Override
38             public void onClick(View v){
39                 if (v.getTag()=="g")
40                 {
41                     ((ImageButton)v).setImageResource(home_b);
42                     v.setTag("b");
43                     add.setImageResource(add_g);
44                     add.setTag("g");
45                     account.setImageResource(account_g);
46                     account.setTag("g");
47                 }
48             }
49         });
50         add.setOnClickListener(new OnClickListener(){
51             @Override
52             public void onClick(View v){
53                 if (v.getTag()=="g")
54                 {
55                     ((ImageButton)v).setImageResource(add_b);
56                     v.setTag("b");
57                     main.setImageResource(home_g);
58                     main.setTag("g");
59                     account.setImageResource(account_g);
60                     account.setTag("g");
61                 }
62             }
63         });
64         account.setOnClickListener(new OnClickListener(){
65             @Override
66             public void onClick(View v){
67                 if (v.getTag()=="g")
68                 {
69                     ((ImageButton)v).setImageResource(account_b);
70                     v.setTag("b");
71                     add.setImageResource(add_g);
72                     add.setTag("g");
73                     main.setImageResource(home_g);
74                     main.setTag("g");
75                 }
76             }
77         });
78
79     }
80 }

结果如图:

不过好像没什么意思,明日看看有什么好的方案没有

时间: 2024-10-13 07:28:27

自定义控件中如何实现按钮之间的共轭?的相关文章

设计趋势:网页设计中的幽灵按钮

幽灵按钮——那些透明的.可点击的物体——忽然间就变得无处不在.以狂风暴雨之势席卷正网页设计领域.谁能想到,像按钮这么简单的事物,能够改变我们看待网页设计的方式? 参考:预测网页设计趋势 什么是幽灵按钮? 幽灵按钮有着最简单的扁平外形——正方形.矩形.圆形.菱形——没有填充色,只有一条淡淡的轮廓.除了外框和文字,它完完全全(或者说几乎完全)透明.(因此得名“幽灵”) 这些按钮通常比网页上传统的可点击按钮大,也被置于显要位置,例如屏幕的正中央. 各种类型的网站(包括移动APP)中都能发现幽灵按钮的身

Android中Fragment和Activity之间的互操作代码例子

摘要 本文介绍了Android中一个Activity中有多个Fragment的情况下,Fragment之间如何通过Activity进行互操作. 源代码 源代码地址为:http://download.csdn.net/detail/logicteamleader/8931199 源代码使用ADT编写,ADT版本为2014,Android版本为android-22. 技术要点 1.在Activity中的多个Fragment之间要互操作,一定要通过此Activity,不能直接通信: 2.在Activi

ios7中 丰富多彩的UIViewController之间的切换

转载自:http://onevcat.com/2013/10/vc-transition-in-ios7/ 毫无疑问,ViewController(在本文中简写为VC)是使用MVC构建Cocoa或者CocoaTouch程序时最重要的一个类,我们的日常工作中一般来说最花费时间和精力的也是在为VC部分编写代码.苹果产品是注重用户体验的,而对细节进行琢磨也是苹果对于开发者一直以来的要求和希望.在用户体验中,VC之间的关系,比如不同VC之间迁移和转换动画效果一直是一个值得不断推敲的重点.在iOS7中,苹

Android中Fragment与Activity之间的交互(两种实现方式)

(未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如何创建Fragment混合布局做了详细的分析,今天就来详细说道说道Fragment与宿主Activity之间是如何实现数据交互的. 我们可以这样理解,宿主Activity中的Fragment之间要实现信息交互,就必须通过宿主Activity,Fragment之间是不可能直接实现信息交互的. Fragment与

iOS开发中视图控制器ViewControllers之间的数据传递

iOS开发中视图控制器ViewControllers之间的数据传递 这里我们用一个demo来说明ios是如何在视图控制器之间传递重要的参数的.本文先从手写UI来讨论,在下一篇文章中讨论在storyboard中传递数据. 首先新建一个空工程,并添加一个根视图控制器类,如下图所示: # 在函数didFinishLunchingWithOption中添加几行代码,完成后如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 - (BOOL)application:(UIApplication

XAML: 自定义控件中事件处理的最佳实践

在开发 XAML(WPF/UWP) 应用程序中,有时候,我们需要创建自定义控件 (Custom Control) 来满足实际需求.而在自定义控件中,我们一般会用到一些原生的控件(如 Button.TextBox 等)来辅助以完成自定义控件的功能. 自定义控件并不像用户控件 (User Control) 一样,使用 Code-Behind(UI 与逻辑在一起)技术.相反,它通过把 UI 与逻辑分离而将两者解耦.因此,创建一个自定义控件会产生两个文件,一个是 Generic.xaml,在它里面定义其

委托在Smobiler自定义控件中运用

委托(Delegate) C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托(Delegate) 是存有对某个方法的引用的一种引用类型变量.可以将方法当作另一个方法的参数来进行传递. 委托(Delegate)特别用于实现事件和回调方法.所有的委托(Delegate)都派生自 System.Delegate 类. 使用委托,必须满足4个条件: 声明委托类型: 必须有一个方法包含了要执行的代码: 必须创建一个委托实例: 必须调用(invoke)委托实例. 声明委托 委托声明

自定义组合控件和在自定义控件中使用自定义属性

今天,整理了一下我平时的笔记,写一个比较简单的自定义组合控件,仅供小白参考,大神请绕道,希望能够对大家有一些帮助 首先,得明白为什么我们需要自定义组合控件,它是因为原有控件并不能满足开发的需求,或者说并不能达到我们想要的一种效果,这个时候,就需要我们自己定义一些控件,以达到目的 ![先来看一下效果](http://img.blog.csdn.net/20160716224219109) 个人总结自定义控件的步骤: 1.先写一个布局,这里我用的是一个相对布局,我这里的相对布局就是根布局了 <?xm

JavaScript中this和$(this)之间的区别

jQuery中this和$(this)之间的区别: this返回的是当前对象的html对象,而$(this)返回的是当前对象的jQuery对象 举个正确的Demo实例: $("#textbox").hover( function() { this.title = "Test"; }, fucntion() { this.title = "OK”; } ); 以上的this为html元素即元素textbox,该元素有title属性,因此以上的程序没有错误.如