首页 文章 精选 留言 我的

精选列表

搜索[人设自定义],共10000篇文章
优秀的个人博客,低调大师

Android 自定义注解之源码注解(RetentionPolicy.SOURCE)

RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃; 源码注解(RetentionPolicy.SOURCE)的生命周期只存在Java源文件这一阶段,是3种生命周期中最短的注解。当在Java源程序上加了一个注解,这个Java源程序要由javac去编译,javac把java源文件编译成.class文件,在编译成class时会把Java源程序上的源码注解给去掉。需要注意的是,在编译器处理期间源码注解还存在,即注解处理器Processor 也能处理源码注解,编译器处理完之后就没有该注解信息了。 示例: package com.mazaiting.annotiontest; import android.support.annotation.IntDef; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * @author mazaiting * @date 2018/1/16 */ public class SourceAnnotation { /**状态值*/ public static final int STATUS_OPEN = 1; public static final int STATUS_CLOSE = 2; public static int mStatus = STATUS_OPEN; public static int getStatus() { return mStatus; } public static void setStatus(@Status int status) { mStatus = status; } public static String getStatusDesc() { if (mStatus == STATUS_OPEN) { return "打开状态"; } else { return "关闭状态"; } } @Retention(RetentionPolicy.SOURCE) @Target(ElementType.PARAMETER) @IntDef({STATUS_OPEN,STATUS_CLOSE}) public @interface Status { } } 定义了一个@Status注解,并用注解@IntDef限定了取值范围,最后将@Status注解用在参数上就行了,这样在使用调用方法的使用只能使用指定的参数{STATUS_OPEN, STATUS_CLOSE},就算用数值1编译器也会提示报错。除了@IntDef注解外还用一个@StringDef注解可以使用,用来处理字符串。 使用: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 报错Must be one of: SourceAnnotation.STATUS_OPEN, SourceAnnotation.STATUS_CLOSE // SourceAnnotation.setStatus(1); /**源码注解*/ SourceAnnotation.setStatus(SourceAnnotation.STATUS_OPEN); }

优秀的个人博客,低调大师

Android Studio 第五十期 - 自定义TabLayout

代码已经整理好,效果如下图: code1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 <com.ui.widget.UnAnimTabLayout android:id= "@+id/tab" android:layout_width= "match_parent" android:layout_height= "match_parent" android:layout_gravity= "center_vertical" android:clipToPadding= "false" android:paddingLeft= "5dp" app:tabBackground= "@drawable/tab_selector_green" app:tabIndicatorColor= "@android:color/white" app:tabIndicatorHeight= "0dp" app:tabMaxWidth= "0dp" app:tabMinWidth= "0dp" app:tabMode= "scrollable" app:tabSelectedTextColor= "@color/white" app:tabTextAppearance= "@style/tab_text_size" app:tabTextColor= "@color/black_common" /> <stylename= "tab_text_size" > <itemname= "android:textSize" >28dp</item> </style> <com.widget.UnAnimTabLayout android:id= "@+id/tab_add" android:layout_width= "match_parent" android:layout_height= "match_parent" android:clipToPadding= "false" android:layout_marginLeft= "@dimen/x20" android:layout_marginRight= "@dimen/x20" app:tabIndicatorColor= "@color/blue3" app:tabIndicatorHeight= "@dimen/x3" app:tabMaxWidth= "0dp" app:tabMinWidth= "0dp" app:tabMode= "scrollable" app:tabSelectedTextColor= "@color/blue3" app:tabTextAppearance= "@style/tab_text_size" app:tabTextColor= "@color/black_common" /> code2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 mCateTabLayout.addOnTabSelectedListener( new TabSelectAdapter(){ @Override public void onTabSelected(TabLayout.Tabtab){ TabUtils.tabSelect(mCateTabLayout,tab); int tag=( int )tab.getTag(); if (tag==- 1 ){ return ; } if (!once_footer){ once_footer= true ; return ; } footer_id=tag; //请求数据bufen set_refresh_data(); } }); mCateTabLayout.post( new Runnable(){ @Override public void run(){ TabUtils.setIndicator(mCateTabLayout, 80 , 80 ); } }); //初始化 tab_add.removeAllTabs(); for (FmNewFoodFenleiBeanitem:list_tab_add){ tab_add.addTab(tab_add.newTab() .setTag(item.getFood_category_id()).setText(item.getFood_category_name())); } 图片1: 图片2: 图片3: 本文转自 吴雨声 51CTO博客,原文链接:http://blog.51cto.com/liangxiao/1963094,如需转载请自行联系原作者

优秀的个人博客,低调大师

【Android Demo】让Android支持自定义的ttf字体

所谓无图无真相,先看效果图: Java代码如下: package yc.android.fonts;import android.app.Activity;import android.graphics.Typeface;import android.os.Bundle;import android.widget.TextView;public class Y_fonts extends Activity {/** Called when the activity is first created. */ @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.main);/* * 必须事先在assets底下创建一fonts文件夹 并放入要使用的字体文件(.ttf) * 并提供相对路径给creatFromAsset()来创建Typeface对象*/ Typeface fontFace = Typeface.createFromAsset(getAssets(), "fonts/STXINGKA.TTF");// 字体文件必须是true type font的格式(ttf);// 当使用外部字体却又发现字体没有变化的时候(以 Droid Sans代替),通常是因为// 这个字体android没有支持,而非你的程序发生了错误 TextView text = (TextView) findViewById(R.id.ttf); text.setTypeface(fontFace); } } PS: 我使用的字体是华文行楷 由于Android系统对字体文件的支持问题,该字体文件2.3.3版本以上有效,2.2版本不支持。 本文转自叶超Luka博客园博客,原文链接:http://www.cnblogs.com/yc-755909659/archive/2012/04/01/2429363.html,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册