首页 文章 精选 留言 我的

精选列表

搜索[API集成],共10000篇文章
优秀的个人博客,低调大师

Android 中文 API (17) —— TextSwitcher

正文 一、结构 public classTextSwitcherextendsViewSwitcher java.lang.Object android.view.View android.view.ViewGroup android.widget.FrameLayout android.widget.ViewAnimator android.widget.ViewSwitcher android.widget.TextSwitcher 二、类概述 ViewSwitcher仅仅包含子类型TextView。TextSwitcher被用来使屏幕上的label产生动画效果。每当setText(CharSequence)被调用时,TextSwitcher使用动画方式将当前的文字内容消失并显示新的文字内容。(译者注:改变文字时增加一些动画效果) 三、构造函数 public TextSwitcher (Context context) 创建一个新的空TextSwitcher 参数 context应用程序上下文 public TextSwitcher (Context context, AttributeSet attrs) 使用提供的context和attributes来创建一个空的TextSwitcher 参数 context应用程序环境 attrs属性集合 四、公共方法 public void addView (View child, int index, ViewGroup.LayoutParams params) 根据指定的布局参数新增一个子视图 参数 child新增的子视图 index新增子视图的位置 params新增子视图的布局参数 抛出异常 IllegalArgumentException当子视图不是一个TextView实例时 public void setCurrentText (CharSequence text) 设置当前显示的文本视图的文字内容。非动画方式显示。 参数 text需要显示的新文本内容 public void setText (CharSequence text) 设置下一视图的文本内容并切换到下一视图。可以动画的退出当前文本内容,显示下一文本内容。 参数 text需要显示的新文本内容 五、代码示例 5.1 摘自APIDemos->View->TextSwitcher 5.1.1 Java public class TextSwitcher1 extends Activity implements ViewSwitcher.ViewFactory, View.OnClickListener{ private TextSwitchermSwitcher; private int mCounter = 0 ; @Override protected void onCreate(BundlesavedInstanceState){ super .onCreate(savedInstanceState); setContentView(R.layout.text_switcher_1); mSwitcher = (TextSwitcher)findViewById(R.id.switcher); mSwitcher.setFactory( this ); Animationin = AnimationUtils.loadAnimation( this , android.R.anim.fade_in); Animationout = AnimationUtils.loadAnimation( this , android.R.anim.fade_out); mSwitcher.setInAnimation(in); mSwitcher.setOutAnimation(out); ButtonnextButton = (Button)findViewById(R.id.next); nextButton.setOnClickListener( this ); updateCounter(); } public void onClick(Viewv){ mCounter ++ ; updateCounter(); } private void updateCounter(){ mSwitcher.setText(String.valueOf(mCounter)); } public ViewmakeView(){ TextViewt = new TextView( this ); t.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL); t.setTextSize( 36 ); return t; } } 5.1.2 XML <? xmlversion="1.0"encoding="utf-8" ?> < LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:layout_width ="match_parent" android:layout_height ="match_parent" android:orientation ="vertical" > < Button android:id ="@+id/next" android:layout_width ="wrap_content" android:layout_height ="wrap_content" android:text ="@string/text_switcher_1_next_text" /> < TextSwitcher android:id ="@+id/switcher" android:layout_width ="match_parent" android:layout_height ="wrap_content" /> </ LinearLayout > 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582684,如需转载请自行联系原作者

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

Android 中文 API (36) —— Toast

正文 一、结构 public classToastextendsObject java.lang.Object android.widget.Toast 二、概述 Toast是一种提供给用户简洁信息的视图。Toast类帮助你创建和显示该信息。 该视图已浮于应用程序之上的形式呈现给用户。因为它并不获得焦点,即使用户正在输入什么也不会受到影响。它的目标是尽可能已不显眼的方式,使用户看到你提供的信息。有两个例子就是音量控制和设置信息保存成功。 使用该类最简单的方法就是调用一个静态方法,让他来构造你需要的一切并返回一个新的Toast对象。 三、常量 int LENGTH_LONG 持续显示视图或文本提示较长时间。该时间长度可定制。 参见 setDuration(int) int LENGTH_SHORT 持续显示视图或文本提示较短时间。该时间长度可定制。该值为默认值。 参见 setDuration(int) 四、构造函数 public Toast (Context context) 构造一个空的Toast对象。在调用show()之前,必须先调用setView(View)。 (译者注:只有使用setView(View)的时候,才使用new Toast(Content content)来得到Toast对象,否则必须用makeText()方法来创建toast对象,并且这种方式获得Toast对象不能使用setText()方法。) 参数 context使用的上下文。通常是你的Application或Activity对象。 五、公共方法 public intcancel() 如果视图已经显示则将其关闭,还没有显示则不再显示。一般不需要调用该方法。正常情况下,视图会在超过存续期间后消失。 public intgetDuration() 返回存续期间 请参阅 setDuration(int) public intgetGravity() 取得提示信息在屏幕上显示的位置。 请参阅 Gravity setGravity() public floatgetHorizontalMargin() 返回横向栏外空白。 public floatgetVerticalMargin() 返回纵向栏外空白。 publicViewgetView() 返回View对象。 请参阅 setView(View) public intgetXOffset() 返回相对于参照位置的横向偏移像素量。 public intgetYOffset() 返回相对于参照位置的纵向偏移像素量。 public staticToastmakeText(Contextcontext, int resId, int duration) 生成一个从资源中取得的包含文本视图的标准Toast对象。 参数 context 使用的上下文。通常是你的Application或Activity对象。 resId 要使用的字符串资源ID,可以是已格式化文本。 duration 该信息的存续期间。值为LENGTH_SHORT或LENGTH_LON 异常 当资源未找到时抛异常Resources.NotFoundException public staticToastmakeText(Contextcontext,CharSequencetext, int duration) 生成一个包含文本视图的标准Toast对象。 参数 context 使用的上下文。通常是你的Application或Activity对象。 resId 要显示的文本,可以是已格式化文本。 duration 该信息的存续期间。值为LENGTH_SHORT或LENGTH_LONG public voidsetDuration(int duration) 设置存续期间。 请参阅 LENGTH_SHORT LENGTH_LONG public voidsetGravity(int gravity, int xOffset, int yOffset) 设置提示信息在屏幕上的显示位置。 (译者注:自定义Toast的显示位置,例如toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0)可以把Toast定位在左上角。Toast提示的位置xOffset:大于0向右移,小于0向左移) 请参阅 Gravity getGravity() public voidsetMargin(float horizontalMargin, float verticalMargin) 设置视图的栏外空白。 参数 horizontalMargin容器的边缘与提示信息的横向空白(与容器宽度的比)。 verticalMargin容器的边缘与提示信息的纵向空白(与容器高度的比)。 public voidsetText(int resId) 更新之前通过makeText()方法生成的Toast对象的文本内容。 参数 resId为Toast指定的新的字符串资源ID。 public voidsetText(CharSequences) 更新之前通过makeText()方法生成的Toast对象的文本内容。 参数 s为Toast指定的新的文本。 public voidsetView(Viewview) 设置要显示的View。 (译者注:注意这个方法可以显示自定义的toast视图,可以包含图像,文字等等。是比较常用的方法。) 请参阅 getView() public voidshow() 按照指定的存续期间显示提示信息。 六、补充 文章链接 让Toast一直显示的解决方法 通知Toast详细用法(显示view) Android一种信息提示机制:Toast [推荐]android Toast大全(五种情形)建立属于你自己的Toast 示例代码 示例一:使用图片的Toast Toasttoast = new Toast( this ); ImageViewview = new ImageView( this ); view.setImageResource(R.drawable.icon); toast.setView(view); toast.show(); 示例二:带文字带图片Toast private void showToast(){ // 1创建Toast Toasttoast = Toast.makeText( this , " 图文显示 " ,Toast.LENGTH_LONG); // 2创建Layout,并设置为水平布局 LinearLayoutmLayout = new LinearLayout( this ); mLayout.setOrientation(LinearLayout.HORIZONTAL); ImageViewmImage = new ImageView( this ); // 用于显示图像的ImageView mImage.setImageResource(R.drawable.icon); ViewtoastView = toast.getView(); // 获取显示文字的ToastView mLayout.addView(mImage); // 添加到Layout mLayout.addView(toastView); // 3关键,设置Toast显示的View(上面生成的Layout). toast.setView(mLayout); toast.show(); } 示例三:综合Toast例子 Main.xml <? xmlversion="1.0"encoding="utf-8" ?> < LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:orientation ="vertical" android:layout_width ="fill_parent" android:layout_height ="fill_parent" > < Button android:id ="@+id/button1" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="Toast显示View" /> < Button android:id ="@+id/button2" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="Toast直接输出" /> < Button android:id ="@+id/button3" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="VolumeToast应用" /> </ LinearLayout > Toast.xml <? xmlversion="1.0"encoding="utf-8" ?> < LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:orientation ="vertical" android:layout_width ="fill_parent" android:layout_height ="fill_parent" > < ImageView android:src ="@drawable/toast" android:layout_width ="wrap_content" android:layout_height ="wrap_content" /> < TextView android:id ="@+id/tv1" android:text ="" android:layout_width ="wrap_content" android:layout_height ="wrap_content" /> </ LinearLayout > Volumetoast.xml <? xmlversion="1.0"encoding="utf-8" ?> < LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:layout_width ="280dp" android:layout_height ="wrap_content" android:gravity ="center_horizontal" android:orientation ="vertical" > < TextView android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="Volume" /> < ProgressBar android:id ="@+id/progress" android:layout_width ="280dp" android:layout_height ="wrap_content" android:progress ="50" android:max ="100" style ="?android:attr/progressBarStyleHorizontal" /> </ LinearLayout > java文件 public class toasttest extends Activity{ /** Calledwhentheactivityisfirstcreated. */ @Override public void onCreate(BundlesavedInstanceState){ super .onCreate(savedInstanceState); setContentView(R.layout.main); Buttonbutton1 = (Button)findViewById(R.id.button1); button1.setOnClickListener(bt1lis); Buttonbutton2 = (Button)findViewById(R.id.button2); button2.setOnClickListener(bt2lis); Buttonbutton3 = (Button)findViewById(R.id.button3); button3.setOnClickListener(bt3lis); } OnClickListenerbt1lis = new OnClickListener(){ @Override public void onClick(Viewv){ showToast(); } }; OnClickListenerbt2lis = new OnClickListener(){ @Override public void onClick(Viewv){ Toast.makeText(toasttest. this , " 直接输出测试 " ,Toast.LENGTH_LONG).show(); } }; OnClickListenerbt3lis = new OnClickListener(){ @Override public void onClick(Viewv){ showvolumeToast(); } }; public void showToast(){ LayoutInflaterli = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); Viewview = li.inflate(R.layout.toast, null ); // 把布局文件toast.xml转换成一个view Toasttoast = new Toast( this ); toast.setView(view); // 载入view,即显示toast.xml的内容 TextViewtv = (TextView)view.findViewById(R.id.tv1); tv.setText( " Toast显示View内容 " ); // 修改TextView里的内容 toast.setDuration(Toast.LENGTH_SHORT); // 设置显示时间,长时间Toast.LENGTH_LONG,短时间为Toast.LENGTH_SHORT,不可以自己编辑 toast.show(); } public void showvolumeToast(){ // TODOAuto-generatedmethodstub LayoutInflaterli = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); ViewvolumeView = li.inflate(R.layout.volumetoast, null ); ((ProgressBar)volumeView.findViewById(R.id.progress)).setProgress(((ProgressBar)volumeView.findViewById(R.id.progress)).getProgress() + 10 ); // 这里还有点问题,就是progress的进度条不动,因为我们主要是想给大家展示 // Toast的用法,这里就不深究了 ToastvolumeToast = new Toast( this ); volumeToast.setGravity(Gravity.BOTTOM, 0 , 100 ); volumeToast.setView(volumeView); volumeToast.setDuration(Toast.LENGTH_SHORT); volumeToast.show(); } } 备注 我们的代码没有重复概述中的通过代码布局toast实现方法,我们是通过布局文件转换成view视图来实现复杂toast,这是两种常用的方法,大家可以根据具体情况进行选择。 下载 /Files/over140/2010/11/demo_Toast.rar 七、不足之处 现象:当点击一个按钮 可以显示一个四秒的toast,但是我要是连点两下就是8秒 三下十二秒 解决办法:只用一个Toast, 自己设置toast.setText(), setDuration(); 之后无论多少次.show()都能马上更新显示, 一会就消失了 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582633,如需转载请自行联系原作者

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

android 中文 api (43) —— Chronometer

正文 一、结构 public classChronometerextendsTextView java.lang.Object android.view.View android.widget.TextView android.widget.Chronometer 二、概述 类实现了一个简单的计时器。 你可以通过elapsedRealtime()来给它一个基准时间,并从该时间开始计数。如果你不给它基准时间,它将使用你调用start()时的时间。默认它将显示当前"MM:SS"或"H:MM:SS"格式的时间,或者你能通过setFormat(String)设置一个任意字符串来格式化显示计时器显示的时间。 三、XML属性 属性名称 描述 android:format 格式化字符串:如果指定,计时器将根据这个字符串来显示,替换字符串中第一个“%s”为当前"MM:SS"或"H:MM:SS"格式的时间显示。如果不指定,计时器将简单的显示"MM:SS" or "H:MM:SS"格式的时间。(译者注:如:“This is a Chronometer %s”) 四、构造函数 public Chronometer (Context context) 初始化计时器对象。设置当前时间为基准时间。(译者注:通过程序动态创建计时器对象) public Chronometer (Context context, AttributeSet attrs) 初始化标准视图布局信息。设置当前时间为基准时间。(译者注:指通过XML来指定一个计时器) public Chronometer (Context context, AttributeSet attrs, int defStyle) 初始化标准视图布局信息和风格。设置当前时间为基准时间。 五、公共方法 public long getBase () 返回先前由setBase(long)设置的基准时间。 public String getFormat () 返回先前由setFormat(String)设置的格式化字符串。 public Chronometer.OnChronometerTickListener getOnChronometerTickListener () 返回值 返回这个监听器(可能为空)是用于监听计时器变化的事件。 public void setBase (long base) 设置基准时间(译者注:基准时间为真正意义上开始计时的时间,而不是调用start时时间,比如调用本函数并设置参数base为SystemClock.elapsedRealtime()即表示从当前时间开始重新计时)。 参数 base 使用elapsedRealtime()为基准时间 public void setFormat (String format) 设置用于显示的格式化字符串。格式化字符串:如果指定,计时器将根据这个字符串来显示,替换字符串中第一个“%s”为当前"MM:SS"或"H:MM:SS"格式的时间显示。如果这个格式化字符串为空,或者你从未调用过setFormat()方法,计时器将简单的显示"MM:SS" or "H:MM:SS"格式的时间。(译者注:如:"This is a Chronometer %s") 参数 format 格式化字符串 public void setOnChronometerTickListener(Chronometer.OnChronometerTickListener listener) 设置计时器变化时调用的监听事件。 参数 listener The listener. public void start () 开始计时。不会影响到由setBase(long)设置的基准时间,仅显示视图。即使部件不显示,计时器也会通过定时处理消息来工作。为了确保不发生资源泄漏,用户应确保每个start()方法都有对应的stop()调用(译者注:有一个start就有一个stop)。(译者注:start只是显示计时,实际上计时是从基准时间开始的,所以通过stop停止计时若干秒后再start时,显示的计时会突然跳到当前显示的计时后的若干秒后继续计时,见此帖子。) public void stop () 停止计时。不会影响到由setBase(long)设置的基准时间,仅显示视图。这将停止消息发送,有效地释放计时器运行时start()占用的资源。 六、受保护方法 protected void onDetachedFromWindow () 视图从窗体上移除时调用,同时窗体表面不再显示视图。 protected void onWindowVisibilityChanged (int visibility) 当窗体中视图的可视性(GONE, INVISIBLE, VISIBLE)发生改变时调用。注意它将告诉你你的窗口是否可以被窗口管理器识别,这并不能说明窗口是否被屏幕上的其他窗口遮挡,即使它本身是可见的。 参数 visibility窗口新的可见性 七、补充 文章链接 android中的时间服务–Chronometer计时器服务 示例代码 Java文件 public class ChronometerDemo extends Activity{ private Chronometercher1; @Override protected void onCreate(BundlesavedInstanceState){ super .onCreate(savedInstanceState); setContentView(R.layout.chronometer); cher1 = (Chronometer)findViewById(R.id.cher1); cher1.setFormat( " 计时:%s " ); } /** *开始计时 * @param view */ public void onStart(Viewview){ cher1.start(); } /** *停止计时 * @param view */ public void onStop(Viewview){ cher1.stop(); } /** *重置 * @param view */ public void onReset(Viewview){ cher1.setBase(SystemClock.elapsedRealtime()); } } XML文件 < LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:orientation ="vertical" android:layout_width ="wrap_content" android:layout_height ="wrap_content" > < Chronometer android:id ="@+id/cher1" android:layout_width ="wrap_content" android:layout_height ="wrap_content" ></ Chronometer > < LinearLayout android:layout_width ="wrap_content" android:layout_height ="wrap_content" > < Button android:onClick ="onStart" android:text ="开始计时" android:layout_width ="wrap_content" android:layout_height ="wrap_content" ></ Button > < Button android:onClick ="onStop" android:text ="停止计时" android:layout_width ="wrap_content" android:layout_height ="wrap_content" ></ Button > < Button android:onClick ="onReset" android:text ="重置" android:layout_width ="wrap_content" android:layout_height ="wrap_content" ></ Button > </ LinearLayout > </ LinearLayout > 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582602 ,如需转载请自行联系原作者

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

Android 中文API (91) —— GestureDetector

正文 一、结构 public classGestureDetector extendsObject java.lang.Object android.view.GestureDetector 二、概述 通过系统提供的MotionEvent来监测各种手势和(触摸)事件。当一个指定的手势事件发生时,GestureDetector.OnGestureListener回调函数将通告用户。这个类仅仅处理由触摸引发的MotionEvent(不能处理由轨迹球引发的事件)。要使用这个类需执行以下操作: *为你的View建立一个GestureDetector实例。 *在View的onTouchEvent(MotionEvent)方法里确保调用(GestureDetector的)onTouchEvent(MotionEvent)方法。当相关事件发生时,定义在回调函数里的方法将被执行。 三、嵌套类 interface GestureDetector.OnDoubleTapListener 双击和轻击(confirmed single-tap)事件的监听器。(译者注:confirmed single-tap是用户快速点一下触摸屏所引发的动作。区分下面两种情况: 1.手指按下,停留0.2秒(估计值)以上再抬起时,不算confirmed single-tap 2.快速点击屏幕两次不会引发两次confirmed single-tap事件,而是引发一次DoubleTap事件。) interface GestureDetector.OnGestureListener 在有手势动作发生时,通知的监听器 class GestureDetector.SimpleOnGestureListener 当只需要监听部分手势时,用于扩展的便捷类 四、构造函数 publicGestureDetector(GestureDetector.OnGestureListenerlistener,Handlerhandler) 已弃用,替代方法: GestureDetector(android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler) 通过提供的监听器来创建一个GestureDetector,这个构造函数只能用于非UI线程(因为它允许指定一个handler)。 参数 listener用于触发所有回调函数的监听器,不能为空 handler需要使用到的handler 异常 NullPointerExceptionListener或者handler为空时 publicGestureDetector(GestureDetector.OnGestureListenerlistener) 已弃用,替代方法: GestureDetector(android.content.Context, android.view.GestureDetector.OnGestureListener) 通过提供的监听器来创建一个GestureDetector。你只能于UI线程里使用这个构造函数(这是通常的情况) 参数 listener用于触发所有回调函数的监听器,不能为空 异常 NullPointerException如果Listener为空 参见 Handler() publicGestureDetector(Contextcontext,GestureDetector.OnGestureListenerlistener) 通过提供的监听器来创建一个GestureDetector。(通常情况下)你只能于UI线程里使用这个构造函数 参数 context应用程序上下文 listener用于触发所有回调函数的监听器,不能为空 异常 NullPointerException如果Listener为空 参见 Handler() publicGestureDetector(Contextcontext,GestureDetector.OnGestureListenerlistener,Handlerhandler) 通过提供的监听器来创建一个GestureDetector.(通常情况下)你只能于UI线程里使用这个构造函数 参数 context应用程序上下文 listener用于触发所有回调函数的监听器,不能为空 handler需要使用到的handler 异常 NullPointerException如果Listener为空 参见 Handler() publicGestureDetector(Contextcontext,GestureDetector.OnGestureListenerlistener,Handlerhandler, boolean ignoreMultitouch) 通过提供的监听器来创建一个GestureDetector.(通常情况下)你只能于UI线程里使用这个构造函数 参数 context应用程序上下文 listener用于触发所有回调函数的监听器,不能为空 handler需要使用到的handler ignoreMultitouch是否忽视多点触控(译者注:仅适用于2.2以上的android版本,如果没设置这个参数(即使用的是上一个构造函数),则会忽视多点触控 ,由于网上都没有在GestureDetector传入handler的例子,所以我也不明白这里的handler的具体用意。如果有需要深入理解的朋友,请参照GestureDetector的源码 异常 NullPointerException如果Listener为空 参见 Handler() 五、公共方法 public booleanisLongpressEnabled() 返回值 如果允许长按事件,则返回true,否则为false public booleanonTouchEvent(MotionEventev) 分析指定的动作事件,如何满足条件,就触发在GestureDetector.OnGestureListener中提供的回调函数 参数 ev当前的触摸事件(译者注:如MotionEvent_DOWN, MotionEvent_UP) 返回值 如果GestureDetector.OnGestureListener消耗了这个事件,则返回true,否则返回false public voidsetIsLongpressEnabled(boolean isLongpressEnabled) 设置是否启用长按。如果启用长按,当用户按下并保持按下状态时,将收到一个长按事件,同时不再接收其它事件;如果禁用长按,当用户按下并保持按下状态然后再移动手指时,将会接收到scroll事件。长按默认为启用。 参数 isLongpressEnabled 是否启用接收长按事件 public voidsetOnDoubleTapListener(GestureDetector.OnDoubleTapListeneronDoubleTapListener) 设置双击及其相关手势的监听器 参数 onDoubleTapListener触发所有回调函数的监听器,或者设为null以停止监听双击的手势 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582415,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

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

Rocky Linux

Rocky Linux

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

WebStorm

WebStorm

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

用户登录
用户注册