1.优点

  可以代替枚举,静态常量,可以让注解只在代码中存在,编译后就删除,可以省内存。

2.@IntDef

2.1 官网

  https://developer.android.com/reference/kotlin/androidx/annotation/IntDef.html

2.2 java示例

     //1.指定注解的保留策略,RetentionPolicy.SOURCE表示只保留源码中,编译时删除。还有CLASS和RUNTIME
@Retention(RetentionPolicy.SOURCE) //2.定义int 值 ,
//写法1: flag true表示可以用 MODE_STANDARD|MODE_LIST 或者 MODE_LIST & MODE_TABS 这种方式使用,然并卵 ,默认false
@IntDef(flag = true,value = {MODE_STANDARD, MODE_LIST, MODE_TABS})
//写法2:
//@IntDef({MODE_STANDARD, MODE_LIST, MODE_TABS}) //3.定义注解类型
public @interface MODE {
int MODE_STANDARD = ; //默认是 public static final
int MODE_LIST = ;
int MODE_TABS = ;
} //4.使用注解 示例
@MODE int getMode() { return MODE_STANDARD; }
void setMode(@MODE int m) { mode = m; }
int mode;
void testMode(){
int m1 = MODE_LIST;
int m2 = getMode();
setMode(m1);
m2 = getMode(); m2 = m1 | MODE_LIST & MODE_TABS ; }

2.3 kotlin示例

     //1.指定注解的保留策略,AnnotationRetention.SOURCE表示只保留源码中,编译时删除。还有CLASS和RUNTIME
@Retention(AnnotationRetention.SOURCE)
//2.定义int 值 ,
@IntDef(flag = true, value = [MODE_STANDARD, MODE_LIST, MODE_TABS])
//3.定义注解类型
annotation class MODE {
companion object {
const val MODE_STANDARD =
const val MODE_LIST =
const val MODE_TABS =
}
}
//4.使用注解 示例
fun resetMode(@MODE m: Int) {
mode = m
}
var mode: Int = fun testMode() {
val m1 = MODE_LIST resetMode(m1) var m2 = m1 or (MODE_LIST and MODE_TABS) }

3.@StringDef

3.1 官网

https://developer.android.com/reference/androidx/annotation/StringDef.html?hl=en

3.2 java示例

     //1.指定注解的保留策略,RetentionPolicy.SOURCE表示只保留源码中,
@Retention(RetentionPolicy.SOURCE) //2.定义string值 ,它必需在 注解类型 前。
@StringDef({CMD_A8, CMD_E5, CMD_H3}) //3.定义注解类型,
public @interface CMD {
public static final String CMD_A8 = "A8";
public static final String CMD_E5 = "E5";
public static final String CMD_H3 = "H3";
}
//4.使用
void sendData(@CMD String cmd,String data){
//... connect socket ,
// socket.send
}
//5.测试
void testStringDef(){
//sendData("cmd","data");//error ,"cmd"不是 定义的那几个值中的一个。
sendData(CMD_A8,"hello");
}

3.3 kotlin示例

     //1.指定注解的保留策略,AnnotationRetention.SOURCE表示只保留源码中,
@Retention(AnnotationRetention.SOURCE)
//2.定义string值 ,它必需在 注解类型 前。
@StringDef(A8,E5,H9)
//3.定义注解类型,
annotation class CMD {
companion object {
const val A8 = "A8"
const val E5 = "E5"
const val H9 = "H9"
}
} //4.使用
fun sendData(@CMD cmd: String, data: String) {
//... connect socket ,
// socket.send
} //5.测试
fun testStringDef() {
sendData("cmd","data");//error ,"cmd"不是 定义的那几个值中的一个。
sendData(A8, "hello")
}

Contextual Action bar(1) CAB in Android的更多相关文章

  1. Contextual Action bar(3) 两个示例

    一.通过activity启动Context Action Bar 1.主java public class ActivityActionModeFrgmt extends Fragment imple ...

  2. Contextual Action bar(2) 简介,启动,各函数介绍

    一.Context Action Bar简介 它是一个ActionBar,有各种操作项,但它不是始终显示的ActionBar,它需要上下文才显示.样式如下: 二.Context Action Bar的 ...

  3. Android Contextual Menus之二:contextual action mode

    Android Contextual Menus之二:contextual action mode 接上文:Android Contextual Menus之一:floating context me ...

  4. Android设计和开发系列第二篇:Action Bar(Design)

    Action Bar The action bar is a dedicated piece of real estate at the top of each screen that is gene ...

  5. Android系统UI交互控件Action Bar初探

    过年期间,Google正式宣布取消Android系统中MENU键的使用,也就是基于Android 4.0系统的手机都应没有MENU这一固定按键.这无疑是个变革性的改动,在我眼中,这似乎把Android ...

  6. Android设计和开发系列第二篇:Action Bar(Develop—API Guides)

    Action Bar IN THIS DOCUMENT Adding the Action Bar Removing the action bar Using a logo instead of an ...

  7. Android UI开发第二十四篇——Action Bar

    Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式.在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为acti ...

  8. 【转】Android UI开发第二十四篇——Action Bar

    Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式.在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为acti ...

  9. Android学习路径(七)建立Action Bar

    在action bar最今本的形式中,它只在左边展示了activity的标题以及应用的icon. 即使在这样的简单的形式中,它也不过告诉用户如今在应用的哪个activity中,同一时候为你的应用保持一 ...

随机推荐

  1. Django 之 form表单

    Django中的Form表单 1.背景 平时我们在书写form表单时,经常都是手动的去写一些input标签,让用户输入一些功能,进行一些校验的判断,等等.Django中的form表单就能够帮我们去实现 ...

  2. 在centos7下手工安装和配置Nginx

    一.什么是Nginx Nginx("enginex")是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器,在高连接并发的情况下Nginx是Apa ...

  3. Bug不能重现的原因分析及其对策

    摘 要:本文简要分析了无法重现的Bug的可能产生原因,包括环境不一致.缺少最准确的描述和浏览器的不当设置.针对这些原因,本文给出了相应的对策.通过这些措施,可以重现许多以前认为不可重现的Bug.    ...

  4. python读取一个文件的每一行判断是否为素数,并把结果写到另一个文件中

    刚刚学习python的菜鸟,这道题包括:文件的读写,python的参数调用,异常的使用,函数的使用 创建一个文本文件inti_prime.txt 执行命令:python Prime.py init_p ...

  5. dba操作之archivelog清理

    下面的命令用于校验归档日志的有效性,列出无效的归档日志,以及以何种方式清除归档日志,列出几种常用的: crosscheck archivelog all;                        ...

  6. BlueSea笔记<1>--Cricket初探

    最近在看Cricket这个实现了Actor模式的F#开源框架,对其工作方式作了一番探究.首先来看一段简单的例子代码: type Say = | Hello let greeter = actor { ...

  7. java回调机制及其实现

    1. 什么是回调函数 回调函数,顾名思义,用于回调的函数.回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数.回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机.回调 ...

  8. BZOJ_1915_[Usaco2010 Open]奶牛的跳格子游戏_DP+单调队列

    BZOJ_1915_[Usaco2010 Open]奶牛的跳格子游戏_DP+单调队列 Description 奶牛们正在回味童年,玩一个类似跳格子的游戏,在这个游戏里,奶牛们在草地上画了一行N个格子, ...

  9. NOIP提高组2006-金明的预算方案

    链接 分析:依赖型0-1背包问题,对于一个主件,可以挂0个,1个,2个附件,所以最终为4种状态情况下的最大值. #include "iostream" #include " ...

  10. unity3d 公告板

    Unity 自带具有一个平面的原始对象,但一个简单的平面在2D游戏或GUI可能是有用的,在任何情况下作出一个好的开始例子.一个最小的平面包含四个顶点,界定两个三角形的边角. 第一件事就是设置顶点数组. ...