首页 文章 精选 留言 我的

精选列表

搜索[组件化],共10000篇文章
优秀的个人博客,低调大师

android用户界面-组件Widget-进度条ProgressBar

android的进度条有对话框进度条、标题进度条和水平进度条 一、对话框进度条 创建步骤 1、覆盖Activity的onCreateDialog()方法,并在其中创建对话框。 2、调用Activity的showDialog()方法,显示进度条对话框。 /Chapter04_UI_ProgressBar01/src/com/amaker/test/MainActivity.java 代码 packagecom.amaker.test; importandroid.app.Activity; importandroid.app.Dialog; importandroid.app.ProgressDialog; importandroid.content.DialogInterface; importandroid.os.Bundle; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; publicclassMainActivityextendsActivity{ privateButtonmyBtn; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); myBtn=(Button)findViewById(R.id.Button01); myBtn.setOnClickListener(newOnClickListener(){ publicvoidonClick(Viewv){ showDialog(0); } }); } @Override protectedDialogonCreateDialog(intid){ ProgressDialogdialog=newProgressDialog(this); //可以不显示标题 dialog.setTitle("测试对话框"); dialog.setIndeterminate(true); dialog.setMessage("程序正在加载请稍后!"); dialog.setCancelable(true); dialog.setButton(Dialog.BUTTON_POSITIVE,"确定", newDialogInterface.OnClickListener(){ @Override publicvoidonClick(DialogInterfacedialog,intwhich){ dialog.cancel(); } } ); returndialog; } } 二、标题栏进度条 1、调用Activity的requestWindowFeatures()方法,获得进度条。 2、调用Activity的setProgressBarIndeterminateVisibility()方法,显示进度条对话框。 /Chapter04_UI_ProgressBar02/src/com/amaker/test/MainActivity.java 代码 packagecom.amaker.test; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.View; importandroid.view.Window; importandroid.view.View.OnClickListener; importandroid.widget.Button; publicclassMainActivityextendsActivity{ /**Calledwhentheactivityisfirstcreated.*/ privateButtonb1,b2; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setContentView(R.layout.main); b1=(Button)findViewById(R.id.Button01); b2=(Button)findViewById(R.id.Button02); b1.setOnClickListener(newOnClickListener(){ publicvoidonClick(Viewv){ setProgressBarIndeterminateVisibility(true); } }); b2.setOnClickListener(newOnClickListener(){ publicvoidonClick(Viewv){ setProgressBarIndeterminateVisibility(false); } }); } } 三、水平进度条 创建步骤 1、在布局文件中声明ProgressBar。 2、在Activity中获得ProgressBar实例。 3、调用ProgressBar的incrementProgressBy()方法增加和减少进度。 /Chapter04_UI_ProgressBar03/src/com/amaker/test/MainActivity.java 代码 packagecom.amaker.test; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.ProgressBar; publicclassMainActivityextendsActivity{ privateButtonb1,b2; ProgressBarprogressBar; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); b1=(Button)findViewById(R.id.Button01); b2=(Button)findViewById(R.id.Button02); progressBar=(ProgressBar)findViewById(R.id.ProgressBar01); b1.setOnClickListener(newOnClickListener(){ publicvoidonClick(Viewv){ progressBar.incrementProgressBy(1); } }); b2.setOnClickListener(newOnClickListener(){ publicvoidonClick(Viewv){ progressBar.incrementProgressBy(-1); } }); } } /Chapter04_UI_ProgressBar03/res/layout/main.xml 代码 <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ProgressBar android:id="@+id/ProgressBar01" style="?android:attr/progressBarStyleHorizontal" android:layout_width="200dip" android:layout_height="wrap_content" android:max="100" android:progress="50" ></ProgressBar> <Button android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="增加"></Button> <Button android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="減少"></Button> </LinearLayout> 本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1080695

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

Android应用程序组件Content Provider应用实例(3)

下面是ArticlesAdapter类的实现,它实现在src/shy/luo/ArticlesAdapter.java文件中: packageshy.luo.article; importjava.util.LinkedList; importshy.luo.providers.articles.Articles; importandroid.content.ContentResolver; importandroid.content.ContentUris; importandroid.content.ContentValues; importandroid.content.Context; importandroid.content.IContentProvider; importandroid.database.Cursor; importandroid.net.Uri; importandroid.os.Bundle; importandroid.os.RemoteException; importandroid.util.Log; publicclassArticlesAdapter{ privatestaticfinalStringLOG_TAG="shy.luo.article.ArticlesAdapter"; privateContentResolverresolver=null; publicArticlesAdapter(Contextcontext){ resolver=context.getContentResolver(); } publiclonginsertArticle(Articlearticle){ ContentValuesvalues=newContentValues(); values.put(Articles.TITLE,article.getTitle()); values.put(Articles.ABSTRACT,article.getAbstract()); values.put(Articles.URL,article.getUrl()); Uriuri=resolver.insert(Articles.CONTENT_URI,values); StringitemId=uri.getPathSegments().get(1); returnInteger.valueOf(itemId).longValue(); } publicbooleanupdateArticle(Articlearticle){ Uriuri=ContentUris.withAppendedId(Articles.CONTENT_URI,article.getId()); ContentValuesvalues=newContentValues(); values.put(Articles.TITLE,article.getTitle()); values.put(Articles.ABSTRACT,article.getAbstract()); values.put(Articles.URL,article.getUrl()); intcount=resolver.update(uri,values,null,null); returncount>0; } publicbooleanremoveArticle(intid){ Uriuri=ContentUris.withAppendedId(Articles.CONTENT_URI,id); intcount=resolver.delete(uri,null,null); returncount>0; } publicLinkedList<Article>getAllArticles(){ LinkedList<Article>articles=newLinkedList<Article>(); String[]projection=newString[]{ Articles.ID, Articles.TITLE, Articles.ABSTRACT, Articles.URL }; Cursorcursor=resolver.query(Articles.CONTENT_URI,projection,null,null,Articles.DEFAULT_SORT_ORDER); if(cursor.moveToFirst()){ do{ intid=cursor.getInt(0); Stringtitle=cursor.getString(1); Stringabs=cursor.getString(2); Stringurl=cursor.getString(3); Articlearticle=newArticle(id,title,abs,url); articles.add(article); }while(cursor.moveToNext()); } returnarticles; } publicintgetArticleCount(){ intcount=0; try{ IContentProviderprovider=resolver.acquireProvider(Articles.CONTENT_URI); Bundlebundle=provider.call(Articles.METHOD_GET_ITEM_COUNT,null,null); count=bundle.getInt(Articles.KEY_ITEM_COUNT,0); }catch(RemoteExceptione){ e.printStackTrace(); } returncount; } publicArticlegetArticleById(intid){ Uriuri=ContentUris.withAppendedId(Articles.CONTENT_URI,id); String[]projection=newString[]{ Articles.ID, Articles.TITLE, Articles.ABSTRACT, Articles.URL }; Cursorcursor=resolver.query(uri,projection,null,null,Articles.DEFAULT_SORT_ORDER); Log.i(LOG_TAG,"cursor.moveToFirst"); if(!cursor.moveToFirst()){ returnnull; } Stringtitle=cursor.getString(1); Stringabs=cursor.getString(2); Stringurl=cursor.getString(3); returnnewArticle(id,title,abs,url); } publicArticlegetArticleByPos(intpos){ Uriuri=ContentUris.withAppendedId(Articles.CONTENT_POS_URI,pos); String[]projection=newString[]{ Articles.ID, Articles.TITLE, Articles.ABSTRACT, Articles.URL }; Cursorcursor=resolver.query(uri,projection,null,null,Articles.DEFAULT_SORT_ORDER); if(!cursor.moveToFirst()){ returnnull; } intid=cursor.getInt(0); Stringtitle=cursor.getString(1); Stringabs=cursor.getString(2); Stringurl=cursor.getString(3); returnnewArticle(id,title,abs,url); } } 这个类首先在构造函数里面获得应用程序上下文的ContentResolver接口,然后通过就可以通过这个接口来访问ArticlesProvider中的文章信息了。成员函数insertArticle、updateArticle和removeArticle分别用来新增、更新和删除一个文章信息条目;成员函数getAllArticlese用来获取所有的文章信息;成员函数getArticleById和getArticleByPos分别根据文章的ID和位置来获得具体文章信息条目;成员函数getArticleCount直接使用ContentProvider的未公开接口call来获得文章信息条目的数量,注意,这个函数要源代码环境下编译才能通过。 下面是程序主界面MainActivity类的实现,它实现在src/shy/luo/article/MainActivity.java文件中: packageshy.luo.article; importshy.luo.providers.articles.Articles; importandroid.app.Activity; importandroid.content.Context; importandroid.content.Intent; importandroid.database.ContentObserver; importandroid.os.Bundle; importandroid.os.Handler; importandroid.util.Log; importandroid.view.LayoutInflater; importandroid.view.View; importandroid.view.ViewGroup; importandroid.widget.AdapterView; importandroid.widget.BaseAdapter; importandroid.widget.Button; importandroid.widget.ListView; importandroid.widget.TextView; publicclassMainActivityextendsActivityimplementsView.OnClickListener,AdapterView.OnItemClickListener{ privatefinalstaticStringLOG_TAG="shy.luo.article.MainActivity"; privatefinalstaticintADD_ARTICAL_ACTIVITY=1; privatefinalstaticintEDIT_ARTICAL_ACTIVITY=2; privateArticlesAdapteraa=null; privateArticleAdapteradapter=null; privateArticleObserverobserver=null; privateListViewarticleList=null; privateButtonaddButton=null; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); aa=newArticlesAdapter(this); articleList=(ListView)findViewById(R.id.listview_article); adapter=newArticleAdapter(this); articleList.setAdapter(adapter); articleList.setOnItemClickListener(this); observer=newArticleObserver(newHandler()); getContentResolver().registerContentObserver(Articles.CONTENT_URI,true,observer); addButton=(Button)findViewById(R.id.button_add); addButton.setOnClickListener(this); Log.i(LOG_TAG,"MainActivityCreated"); } @Override publicvoidonDestroy(){ super.onDestroy(); getContentResolver().unregisterContentObserver(observer); } @Override publicvoidonClick(Viewv){ if(v.equals(addButton)){ Intentintent=newIntent(this,ArticleActivity.class); startActivityForResult(intent,ADD_ARTICAL_ACTIVITY); } } @Override publicvoidonItemClick(AdapterView<?>parent,Viewview,intpos,longid){ Intentintent=newIntent(this,ArticleActivity.class); Articlearticle=aa.getArticleByPos(pos); intent.putExtra(Articles.ID,article.getId()); intent.putExtra(Articles.TITLE,article.getTitle()); intent.putExtra(Articles.ABSTRACT,article.getAbstract()); intent.putExtra(Articles.URL,article.getUrl()); startActivityForResult(intent,EDIT_ARTICAL_ACTIVITY); } @Override publicvoidonActivityResult(intrequestCode,intresultCode,Intentdata){ super.onActivityResult(requestCode,resultCode,data); switch(requestCode){ caseADD_ARTICAL_ACTIVITY:{ if(resultCode==Activity.RESULT_OK){ Stringtitle=data.getStringExtra(Articles.TITLE); Stringabs=data.getStringExtra(Articles.ABSTRACT); Stringurl=data.getStringExtra(Articles.URL); Articlearticle=newArticle(-1,title,abs,url); aa.insertArticle(article); } break; } caseEDIT_ARTICAL_ACTIVITY:{ if(resultCode==Activity.RESULT_OK){ intaction=data.getIntExtra(ArticleActivity.EDIT_ARTICLE_ACTION,-1); if(action==ArticleActivity.MODIFY_ARTICLE){ intid=data.getIntExtra(Articles.ID,-1); Stringtitle=data.getStringExtra(Articles.TITLE); Stringabs=data.getStringExtra(Articles.ABSTRACT); Stringurl=data.getStringExtra(Articles.URL); Articlearticle=newArticle(id,title,abs,url); aa.updateArticle(article); }elseif(action==ArticleActivity.DELETE_ARTICLE){ intid=data.getIntExtra(Articles.ID,-1); aa.removeArticle(id); } } break; } } } privateclassArticleObserverextendsContentObserver{ publicArticleObserver(Handlerhandler){ super(handler); } @Override publicvoidonChange(booleanselfChange){ adapter.notifyDataSetChanged(); } } privateclassArticleAdapterextendsBaseAdapter{ privateLayoutInflaterinflater; publicArticleAdapter(Contextcontext){ inflater=LayoutInflater.from(context); } @Override publicintgetCount(){ returnaa.getArticleCount(); } @Override publicObjectgetItem(intpos){ returnaa.getArticleByPos(pos); } @Override publiclonggetItemId(intpos){ returnaa.getArticleByPos(pos).getId(); } @Override publicViewgetView(intposition,ViewconvertView,ViewGroupparent){ Articlearticle=(Article)getItem(position); if(convertView==null){ convertView=inflater.inflate(R.layout.item,null); } TextViewtitleView=(TextView)convertView.findViewById(R.id.textview_article_title); titleView.setText("Title:"+article.getTitle()); TextViewabstractView=(TextView)convertView.findViewById(R.id.textview_article_abstract); abstractView.setText("Abstract:"+article.getAbstract()); TextViewurlView=(TextView)convertView.findViewById(R.id.textview_article_url); urlView.setText("URL:"+article.getUrl()); returnconvertView; } } } 在应用程序的主界面中,我们使用一个ListView来显示文章信息条目,这个ListView的数据源由ArticleAdapter类来提供,而ArticleAdapter类又是通过ArticlesAdapter类来获得ArticlesProvider中的文章信息的。在MainActivity的onCreate函数,我们还通过应用程序上下文的ContentResolver接口来注册了一个ArticleObserver对象来监控ArticlesProvider中的文章信息。一旦ArticlesProvider中的文章信息发生变化,就会通过ArticleAdapter类来实时更新ListView中的文章信息。 下面是ArticleActivity类的实现,它实现在src/shy/luo/article/ArticleActivity.java文件中: packageshy.luo.article; importshy.luo.providers.articles.Articles; importandroid.app.Activity; importandroid.content.Intent; importandroid.os.Bundle; importandroid.util.Log; importandroid.view.View; importandroid.widget.Button; importandroid.widget.EditText; publicclassArticleActivityextendsActivityimplementsView.OnClickListener{ privatefinalstaticStringLOG_TAG="shy.luo.article.ArticleActivity"; publicfinalstaticStringEDIT_ARTICLE_ACTION="EDIT_ARTICLE_ACTION"; publicfinalstaticintMODIFY_ARTICLE=1; publicfinalstaticintDELETE_ARTICLE=2; privateintarticleId=-1; privateEditTexttitleEdit=null; privateEditTextabstractEdit=null; privateEditTexturlEdit=null; privateButtonaddButton=null; privateButtonmodifyButton=null; privateButtondeleteButton=null; privateButtoncancelButton=null; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.article); titleEdit=(EditText)findViewById(R.id.edit_article_title); abstractEdit=(EditText)findViewById(R.id.edit_article_abstract); urlEdit=(EditText)findViewById(R.id.edit_article_url); addButton=(Button)findViewById(R.id.button_add_article); addButton.setOnClickListener(this); modifyButton=(Button)findViewById(R.id.button_modify); modifyButton.setOnClickListener(this); deleteButton=(Button)findViewById(R.id.button_delete); deleteButton.setOnClickListener(this); cancelButton=(Button)findViewById(R.id.button_cancel); cancelButton.setOnClickListener(this); Intentintent=getIntent(); articleId=intent.getIntExtra(Articles.ID,-1); if(articleId!=-1){ Stringtitle=intent.getStringExtra(Articles.TITLE); titleEdit.setText(title); Stringabs=intent.getStringExtra(Articles.ABSTRACT); abstractEdit.setText(abs); Stringurl=intent.getStringExtra(Articles.URL); urlEdit.setText(url); addButton.setVisibility(View.GONE); }else{ modifyButton.setVisibility(View.GONE); deleteButton.setVisibility(View.GONE); } Log.i(LOG_TAG,"ArticleActivityCreated"); } @Override publicvoidonClick(Viewv){ if(v.equals(addButton)){ Stringtitle=titleEdit.getText().toString(); Stringabs=abstractEdit.getText().toString(); Stringurl=urlEdit.getText().toString(); Intentresult=newIntent(); result.putExtra(Articles.TITLE,title); result.putExtra(Articles.ABSTRACT,abs); result.putExtra(Articles.URL,url); setResult(Activity.RESULT_OK,result); finish(); }elseif(v.equals(modifyButton)){ Stringtitle=titleEdit.getText().toString(); Stringabs=abstractEdit.getText().toString(); Stringurl=urlEdit.getText().toString(); Intentresult=newIntent(); result.putExtra(Articles.ID,articleId); result.putExtra(Articles.TITLE,title); result.putExtra(Articles.ABSTRACT,abs); result.putExtra(Articles.URL,url); result.putExtra(EDIT_ARTICLE_ACTION,MODIFY_ARTICLE); setResult(Activity.RESULT_OK,result); finish(); }elseif(v.equals(deleteButton)){ Intentresult=newIntent(); result.putExtra(Articles.ID,articleId); result.putExtra(EDIT_ARTICLE_ACTION,DELETE_ARTICLE); setResult(Activity.RESULT_OK,result); finish(); }elseif(v.equals(cancelButton)){ setResult(Activity.RESULT_CANCELED,null); finish(); } } } 在ArticleActivity窗口中,我们可以执行新增、更新和删除文章信息的操作。如果启动ArticleActivity时,没有把文章ID传进来,就说明要执行操作是新增文章信息;如果启动ArticleActivity时,把文章ID和其它信自都传进来了,就说明要执行的操作是更新或者删除文章,根据用户在界面点击的是更新按钮还是删除按钮来确定。 本文转自 Luoshengyang 51CTO博客,原文链接:http://blog.51cto.com/shyluo/966942,如需转载请自行联系原作者

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

发布了Android的App,我要开源几个组件!

做了一款App,本来是毕业设计但是毕业的时候还没有做完,因为大部分时间都改论文去了,你们都懂的。现在毕业了在工作之余把App基本上做完了。为什么说基本上呢,因为我觉得还有很多功能还没实现,还要很多bug,还要很多东西有待研究。我还会继续更(ren)新(jian)版(bu)本(chai)的,即使没多少人下载~! 本来当时命题的时候想的是做学校范围内的照片笔记App,因为毕竟我们上课的笔记都是用手机拍下来的,有时候还会录像,然后会有个小小的社交,类似超级课程表那样的,但是其目的是分享自己上课的时候拍摄的笔记,考试前复(yu)习的时候更方便。但是时间不够没有做成诶,服务器那块PHP也基本上忘的差不多了,而且我也没有服务器。。。 App http://android.myapp.com/myapp/detail.htm?apkName=com.yydcdut.note (可以直接下载) 目前就上了应用宝和Flyme的商店,因为身份证拿回来老家处理档案和户口去了,所以没法申请开发者。 应用信息 习惯了用手机拍照来记录一些重要的事情和资料? 拍完照之后回过头却早已忘记当初拍摄的原因和照片的意义,只恨当初没法在照片上写上一笔! 各种凌乱的照片无法归类整理?想起一张照片却又怎么都找不到? 拍摄的照片不是美美的?拍摄的照片不清晰? 换了手机照片和笔记都没法导过来? PhotosNoter - 就是这样一款: ~能帮你快速整理和分类你的照片 ~能在第一时间将照片分类,永远不会忘记拍下它的理由 ~通过不同的角度来玩转你的照片 ~照片不是美美的话可以滤镜一下下 ~在图片上写写画画 ~第三方登录,云备份 ~想把重要的照片和笔记分享给朋友 大概功能 App实际上可以说是一个相册,只是在相册的基础上加上了笔记这块功能。 相册功能(ImageLoader加载图片) 分类功能 拍照功能(系统和自己写的) 本地上传图片(系统的,后期打算自己写) 文字编辑 滤镜(Camera360 EDIT SDK) 文字编辑 App中我认为的干货 相机的状态机(状态机不对很容易崩哦~还要参数部分)。 照片分为两种,一个是大图,一个是小图,小图是相册界面缩略图的时候加载的,大图是可以照片详情页面的时候加载的。 每个笔记的数据库ID都是某个分类的外键。 图片处理,这是一个老生常谈的了。但是在App中,发现很多这方面的问题我还没有解决。比如红米1s后置摄像头800W,那么拍一张图是3M左右,但是Camera的照片的0度是我们正常手机视角的90度。那么我们需要把这个3M的图片给翻转过来,又不想失分辨率,诶,java臣妾做不到啊!那么现在的解决办法是不去拍摄800W像素的,拍大概400-500W像素的不会OOM的。 沙盒。每次拍完照都是先把数据放到沙盒数据库中,然后再到服务中去作图,做完的话再从数据库中删除掉。作图的Service是和Camera那个Activity绑定的(bind方式),当不再拍照的时候就退出了Service,然后回到相册界面的时候会去判断沙盒数据库中是否有没有做完的图,没有做完的话另外启一个进程的Service继续作图。 图片处理完之后(比如在Service中做完了图之后)通知更新界面,用的是广播。 高斯模糊(网上找的),如果图大的话会非常慢。 activity退出和进入的动画。这块弄了很久,主要是想模仿Android5.0的那种,但是有些界面做出来超级卡,卡到爆。 主题设置,沉浸式状态栏(5.0)。 (后续添加GridView的动画)。 (文字编辑中的Emoji和语音输入)。 (等等等等。。。。。。) 大概想到的只有那么多,在写App的过程中学习到了许多,去看了许多开源的东西,真的学到了好多。所以我也想要开源! 我也要开源 因为整个App技术含量不高,有很多控件都是开源的直接拿来用的,但是在App中我也做了许多控件,打算把他们开源出来。 SlideAndDragListView https://github.com/yydcdut/SlideAndDragListView 欢迎Star! 这个已经放到github上了,但是我还没有整理好,现在抽离出来功能都已经实现了,bug也被我改掉了不少,目前我这边简单测试的话基本上没有什么bug了。接下来我要做的是把控件抽成一个Module。 好消息:我注释写的很详细。 不要问我为什么那么详细,我不会告诉你青轴键盘码起来根本停不下来。 主要功能 item可以侧滑,侧滑之后显示出来的两个button可点击。 item可以拖放移动。 大概实现 ListView中的setOnItemClick()和setOnItemLongClick()都被我覆盖掉了,因为和手势冲突,所以我就自己另外在onTouch中自己定义了LongClick事件。 侧滑是Scroller实现的。 拖放是通过OnDragListener实现的。 Camera&Camera2 MVC 这部分的Camera2部分都还没有写,只写了Camera部分。 https://github.com/yydcdut/Camera-Camera2-MVC 当上面那个弄完之后我就开始弄这个辣。到时候另启一篇文章吧,因为Camera2真的很棒。(N5,N6上基本上支持所以参数,但是像魅族,小米那些5.0的Rom大部分都不支持,还是Legacy-Level的)。 目录结构: 我是天王盖地虎的分割线 我不敢直接开源App,因为我觉得App写的并不是那么的好,而且还要不断的更新版本。但是后面还是回考虑开源出来的。 https://github.com/yydcdut/SlideAndDragListViewhttps://github.com/yydcdut/Camera-Camera2-MVC 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/4732278.html如需转载请自行联系原作者

资源下载

更多资源
Nacos

Nacos

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

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等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册