首页 文章 精选 留言 我的

精选列表

搜索[独立开发者],共10000篇文章
优秀的个人博客,低调大师

推荐开发者使用 Material Design 组件

为了保证您的应用与用户设备中安装的其他应用在视觉和行为上保持一致,我们推荐您遵循Material Design 规范,因为用户从一个应用中学习的操作模式可以无缝衔接地在另一个应用中使用。 Material Design 规范 https://material.io/design/introduction Android 用户希望您的应用在视觉和行为上与系统保持一致。您在设计视觉和导航模式时应该遵循 Material Design 规范… ——d.android.com/design 您可以使用Material Design Components(MDC) 组件库来实现这一目的。本文将列出使用 MDC 的优势,从而说明我们推荐使用它的原因。 Material Design Components https://github.com/material-components/material-components-android d.android.com/design https://developer.android.google.cn/design 组件 MDC 提供了系统标准组件的 Material 版本,例如Buttons、Toolbars、CheckBox等等,使用这些组件能轻松实现 Material 风格。如果您使用了MaterialComponents主题,当您 inflate 一个 layout (通过 MDC 的View Inflater) 时,被实例化是 Material 组件而不是标准组件,因此您不需要对布局进行重大的更新就能轻松实现 Material 风格。 <!-- Copyright 2019 Google LLC. SPDX-License-Identifier: Apache-2.0 --> <!-- 标准组件 Button 将会被替换为 MaterialButton --><Button ... /> <!-- 您甚至可以使用 MaterialButton 特定的属性 --><Button ... app:icon="@drawable/foo"/> <!--如果您想用具有向后兼容能力的 AppCompatButton 而不是 MaterialButton,您可以这样做 --><androidx.appcompat.widget.AppCompatButton.../> Buttons https://material.io/develop/android/components/buttons Toolbars https://material.io/develop/android/components/app-bars-top CheckBox https://material.io/develop/android/components/checkboxes View Inflater https://developer.android.google.cn/reference/com/google/android/material/theme/MaterialComponentsViewInflater 所有 Material 组件都继承自对应的AppCompat组件,因此它们享有相同的向后兼容能力和新版本的 bug 修复。 Material 组件在对应的系统标准组件和AppCompat组件的基础上拓展出更多样式和功能,例如MaterialButton拥有以下多种样式: https://material.io/develop/android/components/buttons ​​​​​​​ <!-- Copyright 2019 Google LLC. SPDX-License-Identifier: Apache-2.0 --> <!-- Contained button --><Button ... style="?attr/materialButtonStyle"/> <!-- Text button --><Button ... style="?attr/borderlessButtonStyle"/> <!-- Outlined button --><Button ... style="?attr/materialButtonOutlinedStyle"/> 我最喜欢的功能之一是使用MaterialTextView替换TextView,它新增的功能可以很方便地在TextAppearance中设置行高。 MaterialTextView https://material.io/develop/android/components/material-text-view 新增的功能 https://medium.com/androiddevelopers/whats-your-text-s-appearance-f3a1729192d 除了拓展现有组件的功能外,MDC 还提供了一系列全新的组件。您可能知道Bottom Navigation、Bottom Sheet和Floating Action Button,但未必听说过Chips、Date Picker和Time Picker。 Bottom Navigation https://material.io/develop/android/components/bottom-navigation-view/ Bottom Sheet https://material.io/develop/android/components/bottom-sheet-behavior/ Floating Action Button https://material.io/develop/android/components/floating-action-button/ Chips https://material.io/develop/android/components/chip/ Date Picker https://material.io/develop/android/components/picker Time Picker https://github.com/material-components/material-components-android/blob/master/docs/components/TimePicker.md MDC 提供的全部组件列单,请查阅——组件: https://material.io/components Material 主题 Material 主题可以更系统地自定义Material Design 样式来体现您的产品品牌。Material 主题包括颜色、字体样式和形状属性。对其进行自定义将自动应用到您用于构建应用的组件上。 Material 主题 https://material.io/design/material-theming/ 颜色 https://material.io/design/color/ 字体样式 https://material.io/design/typography/ 形状 https://material.io/design/shape/ 您可以将 Material 主题理解为创建设计系统的设计系统。您只需配置好颜色、字体样式和形状,即可得到一套基于您品牌的完整设计系统。 Nick Rout在以下文章中分别深入地介绍了这三个子系统: 打造 Material 颜色主题 | 实现篇 打造 Material 字体样式主题|实现篇 打造 Material 形状主题 | 实现篇 Nick Rout https://medium.com/@ricknout 深色主题 MDC 组件遵循 Material 的深色主题背景规范实现了深色主题。在深色主题下,许多组件都将调整它们的颜色,并且在阴影不可见的情况下添加了 elevation 叠加层以表现高度变化。 深色主题背景规范 https://material.io/design/color/dark-theme.html Chris Banes在下面这篇文章中深入介绍了 MDC 的深色主题: 使用 Material Design 组件实现深色主题 Chris Banes https://chrisbanes.medium.com/ Material 动效 Material Design 还针对转场动画制定了规范。现在,MDC 不仅提供了规范,还将这些模式实现为 Transition 以便您在应用中使用。 规范 https://material.io/design/motion/the-motion-system.html Hunter Stich在下面这篇文章中介绍了 Material Motion 库: 使用 Material Design 组件实现 Material 动效 Hunter Stich https://medium.com/@hunter_stich 使用 Compose Jetpack Compose是 Android 系统的下一代 UI 工具包,目前已正式发布。它会提供 Material 风格的组件和主题。尽早使用 MDC 将为未来迁移至 Jetpack Compose 做好准备 — 它们使用了相同的概念、设计名词和组件。您甚至可以使用类似MDC-Android Compose主题适配器的库来简化迁移过程,该库将 XML 实现的 MDC 主题转换为 Compose 的MaterialTheme。 Jetpack Compose https://developer.android.google.cn/jetpack/compose MDC-Android Compose主题适配器 https://github.com/material-components/material-components-android-compose-theme-adapter MaterialTheme https://developer.android.google.cn/reference/kotlin/androidx/compose/material/package-summary#materialtheme 推荐使用 Material 希望您已经清楚我们推荐使用Material Design Components构建 Android UI 的原因。我们近期更新了在 Android Studio 中通过File > New Project菜单新建的模版,这些模版为您预设置了 Material 主题并使用了 MDC,因此您可以更容易的开始使用 MDC。如果您还没有迁移到 MDC,请查看我们的迁移指南: https://medium.com/androiddevelopers/migrating-to-material-components-for-android-ec6757795351 Material Design Components https://github.com/material-components/material-components-android 近期更新 https://developer.android.google.cn/studio/preview/features#mdc-templates

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

扫码支付集成开发者指南

本帖仅供参考,非官方demo 一、文档地址 文档地址:点击【查看】 sdk下载:点击【查看】 官方demo下载地址:点击【查看】 二、开发前准备工作 1、签约:[url]https://openclub.alipay.com/read.php?tid=276&fid=72[/url] 2、创建应用:[url]https://openclub.alipay.com/read.php?tid=1606&fid=72[/url] 3、生成密钥:[url]https://openclub.alipay.com/read.php?tid=1833&fid=69[/url] 4、下载服务端sdk:[url]https://docs.open.alipay.com/54/106370/[/url] 如何签约以及签约无法成功等相关签约问题:[

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

开发者指南-Android如何绘制View

Android画的操作是由Framework层来进行处理的,整个 draw是从根View开始的,ViewGroup向子View发出 draw的请求,然后子View负责自己重画它们的invalid区域。Drawing一个Layout必须通过两个步骤: 1. 测量。measure() 从根节点到叶子节点依次测量,这样每个View都会存有各自的dimension.在我们的程序种我们可以重写onMeasure来设置更为精确的content大小,重写完后必须调用setMeasureDimension来存储View的宽和高 。 2.布局。layout也是从父节点到子节点,父节点根据刚才传递进来的measure信息来拜访它们的子节点。 当一个视图的measure()方法返回时,它的getMeasuredWidth()和getMeasuredHeight() 值必须被设置,以及所有 这个视图子节点的值。一个view的measure的宽度和高度值必须符合父视图的限制。这确保在度量过程之后,所有父节点接受所有它们的子节点的度量值。一个父视图可能会在其子视图上多次调用measure()方法。比如,父视图可能会通过未指定的尺寸调用measure来找到它们的大小,然后使用实际数值再次调用measure(),如果所有子视图未做限制的尺寸总合过大或过小(也即是,如果子视图之间不能对各自占据的空间达成共识的话,父视图将会干预并且使用第二个过程的规则)。 View.MeasureSpec 用于子View告诉父View它们想如何被测量和怎么放置。而 LayoutParams则是描述了View的宽和高是多少。对于每一个区域可以指定如下的值: 一个准确的数值。 ·FILL_PARENT,这意味着视图想和父视图一样大(减掉填充padding)。 WRAP_CONTENT,这意味着视图只想有刚好包装其内容那么大(加上padding)。 对于不同的ViewGroup子类,有相应的LayoutParams子类。比如,相对布局RelativeLayout有它自己的LayoutParams子类,这包含了能够让子视图横向和竖向居中显示的能力。 度量规格(MeasureSpecs)被用来沿着树从父到子的下传度量需求。一个MeasureSpecs可以是下面三种模式之一: UNSPECIFIED:父视图来决定其子视图的理想尺寸。比如,一个线性布局可能在它的子视图上调用measure() on its child,通过设置其高度为UNSPECIFIED 以及一个宽度为EXACTLY 240,来找出这个子视图在给定240像素宽度的情况下需要显示多高。 EXACTLY:父视图用来给子视图强加一个准确的尺寸。子视图必须使用这个大小,并确保其所有的后代将适合这个尺寸。 AT_MOST:这被父视图用来给子视图强加一个最大尺寸。子视图必须确保它自己以及所有的后代都适合这个尺寸。 本文转自 最牛傻蛋 51CTO博客,原文链接:http://blog.51cto.com/zuiniuwang/718274,如需转载请自行联系原作者

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

Android开发者指南(17) —— Designing For Performance

性能优化 Android应用程序运行的移动设备受限于其运算能力,存储空间,及电池续航。由此,它必须是高效的。电池续航可能是一个促使你优化程序的原因,即使他看起来已经运行的足够快了。由于续航对用户的重要性,当电量耗损陡增时,意味这用户迟早会发现是由于你的程序。 虽然这份文档主要包含着细微的优化,但这些绝不能成为你软件成败的关键。选择合适的算法和数据结构永远是你最先应该考虑的事情,但这超出这份文档之外。 简介 写出高效的代码有两条基本的原则: *不作没有必要的工作。 *尽量避免内存分配。 明智的优化 这份文档是关于Android规范的细微优化,所以先确保你已经了解哪些代码需要优化,并且知道如何去衡量你所做修改所带来的效果(好或坏)。开发投入的时间是有限的,所以明智的时间规划很重要。 (更多分析和笔记参见总结。) 这份文档同时确保你在算法和数据结构上作出最佳选择的同时,考虑API选择所带来的潜在影响。使用合适的数据结构和算法比这里的任何建议都更有价值,优先考虑API版本带来的影响有助于你找到更好的实现。(这在类库代码中更为重要,相比应用代码) (如果你需要这样的建议,参见Josh Bloch'sEffective Java, item 47.) 在优化Android程序时,会遇到的一个棘手问题是,保证你的程序能在不同的硬件平台上运行。虚拟机版本和处理器各部相同,因此运行在之上的速度也大不一样。但这并且不是简单的A比B快或慢,并能在设备间做出排列。特别的,模拟器上只能评测出一小部分设备上体现的东西。有无JIT的设备间也存在着巨大差异,在JIT设备上好的代码有时候会在无JIT的设备上表现的并不好。 如果你想知道一个程序在设备上的具体表现,就必须在上面进行测试。 避免创建不必要的对象 对象创建永远不会是免费的。每个线程的分代GC给零时对象分配一个地址池以降低分配开销,但往往内存分配比不分配需要的代价大。 如果在用户界面周期内分配对象,就会强制一个周期性的垃圾回收,给用户体验增加小小的停顿间隙。Gingerbread中提到的并发回收也许有用,但不必要的工作应当被避免的。 因此,应该避免不必要的对象创建。下面是几个例子: *如果有一个返回String的方法,并且他的返回值常常附加在一个StringBuffer上,改变声明和实现,让函数直接在其后面附加,而非创建一个短暂存在的零时变量。 *当从输入的数据集合中读取数据时,考虑返回原始数据的子串,而非新建一个拷贝.这样你虽然创建一个新的对象,但是他们共享该数据的char数组。(结果是即使仅仅使用原始输入的一部分,你也需要保证它的整体一直存在于内存中。) 一个更彻底的方案是将多维数组切割成平行一维数组: *Int类型的数组常有余Integer类型的。推而广之,两个平行的int数组要比一个(int,int)型的对象数组高效。这对于其他任何基本数据类型的组合都通用。 *如果需要实现一个容器来存放元组(Foo,Bar),两个平行数组Foo[],Bar[]会优于一个(Foo,Bar)对象的数组。(例外情况是:当你设计API给其他代码调用时,应用好的API设计来换取小的速度提升。但在自己的内部代码中,尽量尝试高效的实现。) 通常来讲,尽量避免创建短时零时对象.少的对象创建意味着低频的垃圾回收。而这对于用户体验产生直接的影响。 性能之谜 前一个版本的文档给出了好多误导人的主张,这里做一些澄清: 在没有JIT的设备上,调用方法所传递的对象采用具体的类型而非接口类型会更高效(比如,传递HashMapmap比Map map调用一个方法的开销小,尽管两个map都是HashMap).但这并不是两倍慢的情形,事实上,他们只相差6%,而有JIT时这两种调用的效率不相上下。 在没有JIT的设备上,缓存后的字段访问比直接访问快大概20%。而在有JIT的情况下,字段访问的代价等同于局部访问,因此这里不值得优化,除非你觉得他会让你的代码更易读(对于final ,static,及static final变量同样适用) 用静态代替虚拟 如果不需要访问某对象的字段,将方法设置为静态,调用会加速15%到20%。这也是一种好的做法,因为你可以从方法声明中看出调用该方法不需要更新此对象的状态。 避免内部的Getters/Setters 在源生语言像C++中,通常做法是用Getters(i=getCount())代替直接字段访问(i=mCount)。这是C++中一个好的习惯,因为编译器会内联这些访问,并且如果需要约束或者调试这些域的访问,你可以在任何时间添加代码。 而在Android中,这不是一个好的做法。虚方法调用的代价比直接字段访问高昂许多。通常根据面向对象语言的实践,在公共接口中使用Getters和Setters是有道理的,但在一个字段经常被访问的类中宜采用直接访问。 无JIT时,直接字段访问大约比调用getter访问快3倍。有JIT时(直接访问字段开销等同于局部变量访问),要快7倍。在Froyo版本中确实如此,但以后版本可能会在JIT中改进Getter方法的内联。 对常量使用Static Final修饰符 考虑下面类首的声明: 编译器会生成一个类初始化方法<clinit>,当该类初次被使用时执行,这个方法将42存入intVal中,并得到类文件字符串常量strVal的一个引用。当这些值在后面被引用时,他们通过字段查找进行访问。 我们改进实现,采用final关键字: 类不再需要<clinit>方法,因为常量通过静态字段初始化器进入dex文件中。引用intVal的代码,将直接调用整形值42;而访问strVal,也会采用相对开销较小的“字符串常量”(原文:“sring constant”)指令替代字段查找。(这种优化仅仅是针对基本数据类型和String类型常量的,而非任意的引用类型。但尽可能的将常量声明为static final是一种好的做法。 使用改进的For循环语法 改进for循环(有时被称为“for-each”循环)能够用于实现了iterable接口的集合类及数组中。在集合类中,迭代器让接口调用hasNext()和next()方法。在ArrayList中,手写的计数循环迭代要快3倍(无论有没有JIT),但其他集合类中,改进的for循环语法和迭代器具有相同的效率。 这里有一些迭代数组的实现: zero()是当中最慢的,因为对于这个遍历中的历次迭代,JIT并不能优化获取数组长度的开销。 One()稍快,将所有东西都放进局部变量中,避免了查找。但仅只有声明数组长度对性能改善有益。 Two()是在无JIT的设备上运行最快的,对于有JIT的设备则和one()不分上下。他采用了JDK1.5中的改进for循环语法。 结论:优先采用改进for循环,但在性能要求苛刻的ArrayList迭代中,考虑采用手写计数循环。 (参见Effective Javaitem 46.) 在私有内部内中,考虑用包访问权限替代私有访问权限 考虑下面的定义: 需要注意的关键是:我们定义的一个私有内部类(Foo$Inner),直接访问外部类中的一个私有方法和私有变量。这是合法的,代码也会打印出预期的“Value is 27”。 但问题是,虚拟机认为从Foo$Inner中直接访问Foo的私有成员是非法的,因为他们是两个不同的类,尽管Java语言允许内部类访问外部类的私有成员,但是通过编译器生成几个综合方法来桥接这些间隙的。 内部类会在外部类中任何需要访问mValue字段或调用doStuff方法的地方调用这些静态方法。这意味着这些代码将直接存取成员变量表现为通过存取器方法访问。之前提到过存取器访问如何比直接访问慢,这例子说明,某些语言约会定导致不可见的性能问题。 如果你在高性能的Hotspot中使用这些代码,可以通过声明被内部类访问的字段和成员为包访问权限,而非私有。但这也意味着这些字段会被其他处于同一个包中的类访问,因此在公共API中不宜采用。 合理利用浮点数 通常的经验是,在Android设备中,浮点数会比整型慢两倍,在缺少FPU和JIT的G1上对比有FPU和JIT的Nexus One中确实如此(两种设备间算术运算的绝对速度差大约是10倍) 从速度方面说,在现代硬件上,float和double之间没有任何不同。更广泛的讲,double大2倍。在台式机上,由于不存在空间问题,double的优先级高于float。 但即使是整型,有的芯片拥有硬件乘法,却缺少除法。这种情况下,整型除法和求模运算是通过软件实现的,就像当你设计Hash表,或是做大量的算术那样。 了解并使用类库 选择Library中的代码而非自己重写,除了通常的那些原因外,考虑到系统空闲时会用汇编代码调用来替代library方法,这可能比JIT中生成的等价的最好的Java代码还要好。典型的例子就是String.indexOf,Dalvik用内部内联来替代。同样的,System.arraycopy方法在有JIT的Nexus One上,自行编码的循环快9倍。 (参见Effective Javaitem 47.) 合理利用本地方法 本地方法并不是一定比Java高效。最起码,Java和native之间过渡的关联是有消耗的,而JIT并不能对此进行优化。当你分配本地资源时(本地堆上的内存,文件说明符等),往往很难实时的回收这些资源。同时你也需要在各种结构中编译你的代码(而非依赖JIT)。甚至可能需要针对相同的架构来编译出不同的版本:针对ARM处理器的GI编译的本地代码,并不能充分利用Nexus One上的ARM,而针对Nexus One上ARM编译的本地代码不能在G1的ARM上运行。 当你想部署程序到存在本地代码库的Android平台上时,本地代码才显得尤为有用,而并非为了Java应用程序的提速。 (参见Effective Javaitem 54.) 结语 最后:通常考虑的是:先确定存在问题,再进行优化。并且你知道当前系统的性能,否则无法衡量你进行尝试所得到的提升。 这份文档中的每个主张都有标准基准测试作为支持。你可以在code.google.com“dalvik”项目中找到基准测试的代码。 这个标准基准测试是建立在Caliper Java标准微基准测试框架之上的。标准微基准测试很难找到正确的路,所以Caliper帮你完成了其中的困难部分工作。并且当你会察觉到某些情况的测试结果并想象中的那样(虚拟机总是在优化你的代码的)。我们强烈推荐你用Caliper来运行你自己的标准微基准测试。 同时你也会发现Traceview对分析很有用,但必须了解,他目前是不不支持JIT的,这可能导致那些在JIT上可以胜出的代码运行超时。特别重要的,根据Taceview的数据作出更改后,请确保代码在没有Traceview时,确实跑的快了。 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/616199,如需转载请自行联系原作者

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

Android开发者指南(19) —— Guide Index

开发指南 欢迎来到android开发指南!这篇开发指南能就关于文档方面的一些主要平台特性为开发Android应用提供实际指导。这探讨的是关于android背后的思想,例如构建应用的框架,以及使用工具开发,测试和为平台发布软件。 开发指南涵盖了大部分的Android平台文档,除了一些对API框架的引用资料。找关于API的说明请移步Reference。 开发指南被分割成以下几部分: ØAndroid基础(Android Basics) Android的最初定位——是什么,提供什么,以及你的应用程序如何用它。 Ø关于框架(Framework Topics) 讨论一些Android框架和API的特定部分。关于框架的介绍,请先参看Application Fundamentals。然后根据需要浏览其他的主题——从设计用户界面和设置资源文件到存储数据和使用权限。 Ø关于Android Market(Android Market Topics) 这个主题主要涉及Android Markert发布和付费应用的一些内容,例如,如何在执行许可协议和应用收费。 Ø开发(Developing) 为Android开发和测试工具,以及测试结果提供指导。 Ø发布(Publishing) 关于如何部署和发布你的应用程序。 Ø最佳实践(Best Practices) 为了程序更高效率以及用户的使用体验更佳而推荐的一些程序编写技巧。 ØWeb应用程序(Web Applications) 关于如何在Android设备上创建无缝Web应用程序以及可嵌入基于web内容的Android应用。 Ø附录(Appendix) 一些参考信息和说明,例如常见问题,学术用语,和其他的一些信息。 Android编程的第一步是下载SDK(软件开发工具包)。更多的信息请参看SDK栏。 在你拥有SDK之后,开始看看Dev Guide.如果你想通过快速的看一些代码来开始,那么Hello World教程可以让你轻松的通过”HELLO WORLD”应用来了解一个Android application的基本(组成).Application Fundamentals(程序基本原理)文档是一个开始学习程序框架基本(知识)的好地方。 如果需要进一步的帮助,建议加入一个或者更多的Android讨论组,请到Developer Forums页面寻求更多信息。 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/639067,如需转载请自行联系原作者

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

Android开发者指南(3) —— Other Tools

正文 Other Tools 本文介绍了在开发Android应用程序时可以使用的其他工具。 所有的工具都位于Android SDK的<sdk>/tools/文件夹下。 android Android是一个重要的开发工具,用于: *创建、删除和查看Android虚拟设备(AVDs),参见Android Virtual Devices *创建、更新Android项目,参见Developing in Other IDEs *更新Android SDK中的平台、插件和文档,参见Adding SDK Components 如果使用带有ADT插件的Eclipse作为开发环境,可以直接在该IDE中使用这一工具。在Eclipse中创建Android项目,参见Developing In Eclipse,在Eclipse中更新SDK,参见Adding SDK Components。 mksdcard mksdcard工具可以快速创建用于模拟器中的FAT32格式的在磁盘镜像,来模拟手机设备中的SD卡,用法是: 下表列出了命令先项/参数: 参数 描述 -l 磁盘镜像的卷标 size 要创建的磁盘镜像的大小,以字节为单位。也可以通过在大小后添加“K”或“M”字母以指定KB或MB为单位。例如:1048576K,1024M. file 磁盘镜像的路径和文件名 当创建完磁盘镜像以后,可以在启动模拟器时通过-sdcard参数来加载它,更多信息可参见Android Emulator dx Dx工具可以从.class文件中生成Android字节码。该工具将目标文件转换成Dalvik可执行格式(.dex格式)文件以供运行,也可以用可供识别的格式输出类文件的信息和运行单元测试。详细用法可以使用dx –help来获得帮助。 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582289,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

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

用户登录
用户注册