首页 文章 精选 留言 我的

精选列表

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

Android API 中文 (50) —— SpinnerAdapter

正文 一、结构 public interfaceSpinnerAdapterextendsAdapter 直接子类 ArrayAdapter<T>, BaseAdapter, CursorAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter 二、概述 扩展自Adapter的适配器是在Spinner与数据之间的一座桥梁。一个Spinner Adapter允许定义两个不同的视图:一是在Spinner上显示数据,另一个是当Spinner按下时在下拉列表里显示数据。 三、公共方法 public abstractViewgetDropDownView(int position,ViewconvertView,ViewGroupparent) 获得一个在指定位置上显示下拉弹出数据的视图。 参数 position项目视图的索引 convertView如果可能旧有的视图重新使用。注解:在使用之前应该检查这个视图不是空的并且类型合适。如果转换视图显示正确的数据是不可能的,这个方法能够创建一个新的视图 parent视图最终将依附的父对象 返回值 一个对应指定位置的数据的视图 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582583,如需转载请自行联系原作者

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

Android API 中文 (54) —— Filterable

正文 一、结构 public interfaceFilterable android.widget. SpinnerAdapter 直接子类 ArrayAdapter<T>, CursorAdapter, CursorTreeAdapter, HeaderViewListAdapter, ResourceCursorAdapter, ResourceCursorTreeAdapter, SimpleAdapter, SimpleCursorAdapter, SimpleCursorTreeAdapter 二、概述 定义一个可过滤的行为。一个可过滤的类可以通过一个过滤器筛选它的数据。过滤类通常由适配器(Adapter)实现。 三、公共方法 public abstractFiltergetFilter() 返回一个可以通过一种过滤模式来约束数据的过滤器。 这个方法通常被Adapter类实现。 返回值 一个用于约束数据的过滤器 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582573,如需转载请自行联系原作者

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

Android 中文API(86)——ResourceCursorAdapter

正文 一、结构 public abstract classResourceCursorAdapterextendsCursorAdapter java.lang.Object android.widget.BaseAdapter android.widget.CursorAdapter android.widget.ResourceCursorAdapter 直接子类 SimpleCursorAdapter 二、概述 这是一个简单的适配器,通过指定一个定义了视图UI的XML文件来创建视图。 三、构造函数 publicResourceCursorAdapter(Contextcontext, int layout,Cursorc) 构造函数 参数 Context与ListView相关的正在运行的SimpleListItemFactory上下文 layout一个定义了列表项视图的布局文件资源ID,这个布局同时定义列表项视图和下拉视图,直到你重写它们。 c 获取数据的游标 publicResourceCursorAdapter(Contextcontext,int layout,Cursorc, boolean autoRequery) 构造函数 参数 Context与ListView相关的正在运行的SimpleListItemFactory上下文 layout一个定义了列表项视图的布局文件资源ID,这个布局同时定义列表项视图和下拉视图,直到你重写它们。 c 获取数据的游标 autoRequery如果此参数为true,当适配器的数据发生变化的时,适配器会调用游标的requery()方法,使最新的数据始终显示。 四、公共方法 publicViewnewDropDownView(Contextcontext,Cursorcursor,ViewGroupparent) 生成一个新的下拉视图来控制游标指向的数据 参数 context应用程序全局信息接口(应用上下文) cursor获取数据的游标,它已经移动到正确的位置 parent与新视图相关联的上级视图 返回值 新创建的视图 publicViewnewView(Contextcontext,Cursorcursor,ViewGroupparent) 根据指定的xml文件创建视图 参数 context应用程序全局信息接口(应用上下文) cursor获取数据的游标,它已经移动到正确的位置 parent与新视图相关联的上级视图 返回值 新创建的视图 参见 newView(android.content.Context, android.database.Cursor, ViewGroup) public voidsetDropDownViewResource(int dropDownLayout) 设置下拉视图相应的布局资源 参数 dropDownLayout用于创建下拉视图的布局资源 public voidsetViewResource(int layout) 设置列表项视图相应的布局资源 参数 layout用于创建列表项视图的布局资源 五、补充 文章精选 ListActivity简介 代码示例(ApiDemos\src\com\example\android\apis\app\QuickContactsDemo.java) public class QuickContactsDemo extends ListActivity{ static final String[]CONTACTS_SUMMARY_PROJECTION = new String[]{ Contacts._ID, // 0 Contacts.DISPLAY_NAME, // 1 Contacts.STARRED, // 2 Contacts.TIMES_CONTACTED, // 3 Contacts.CONTACT_PRESENCE, // 4 Contacts.PHOTO_ID, // 5 Contacts.LOOKUP_KEY, // 6 Contacts.HAS_PHONE_NUMBER, // 7 }; static final int SUMMARY_ID_COLUMN_INDEX = 0 ; static final int SUMMARY_NAME_COLUMN_INDEX = 1 ; static final int SUMMARY_STARRED_COLUMN_INDEX = 2 ; static final int SUMMARY_TIMES_CONTACTED_COLUMN_INDEX = 3 ; static final int SUMMARY_PRESENCE_STATUS_COLUMN_INDEX = 4 ; static final int SUMMARY_PHOTO_ID_COLUMN_INDEX = 5 ; static final int SUMMARY_LOOKUP_KEY = 6 ; static final int SUMMARY_HAS_PHONE_COLUMN_INDEX = 7 ; @Override public void onCreate(BundlesavedInstanceState){ super .onCreate(savedInstanceState); Stringselect = " (( " + Contacts.DISPLAY_NAME + " NOTNULL)AND( " + Contacts.HAS_PHONE_NUMBER + " =1)AND( " + Contacts.DISPLAY_NAME + " !='')) " ; Cursorc = getContentResolver().query(Contacts.CONTENT_URI,CONTACTS_SUMMARY_PROJECTION,select, null ,Contacts.DISPLAY_NAME + " COLLATELOCALIZEDASC " ); startManagingCursor(c); ContactListItemAdapteradapter = new ContactListItemAdapter( this ,R.layout.quick_contacts,c); setListAdapter(adapter); } private final class ContactListItemAdapter extends ResourceCursorAdapter{ public ContactListItemAdapter(Contextcontext, int layout,Cursorc){ super (context,layout,c); } @Override public void bindView(Viewview,Contextcontext,Cursorcursor){ final ContactListItemCachecache = (ContactListItemCache)view.getTag(); TextViewnameView = cache.nameView; QuickContactBadgephotoView = cache.photoView; // Setthename cursor.copyStringToBuffer(SUMMARY_NAME_COLUMN_INDEX,cache.nameBuffer); int size = cache.nameBuffer.sizeCopied; cache.nameView.setText(cache.nameBuffer.data, 0 ,size); final long contactId = cursor.getLong(SUMMARY_ID_COLUMN_INDEX); final StringlookupKey = cursor.getString(SUMMARY_LOOKUP_KEY); cache.photoView.assignContactUri(Contacts.getLookupUri(contactId,lookupKey)); } @Override public ViewnewView(Contextcontext,Cursorcursor,ViewGroupparent){ Viewview = super .newView(context,cursor,parent); ContactListItemCachecache = new ContactListItemCache(); cache.nameView = (TextView)view.findViewById(R.id.name); cache.photoView = (QuickContactBadge)view.findViewById(R.id.badge); view.setTag(cache); return view; } } final static class ContactListItemCache{ public TextViewnameView; public QuickContactBadgephotoView; public CharArrayBuffernameBuffer = new CharArrayBuffer( 128 ); } } 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582425,如需转载请自行联系原作者

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

Android 中文API (92) —— MenuInflater

正文 一、结构 public classMenuInflater extendsObject java.lang.Object android.view.MenuInflater 直接子类 TabActivity 二、概述 这个类是用来实例化菜单XML文件成菜单对象。 由于性能的原因,由于程序创建时候就加载一些预处理XML文件,Menu过多就造成很重的负担。因此,这是目前无法在运行时使用多于一个XmlPullParser的xml文件去使用MenuInflater,它只能使用一个XmlPullParser返回的编译过的资源(R.某些文件) 三、构造函数 public MenuInflater (Context context) 构造填充(inflater)一个菜单 参见 getMenuInflater() 四、公共方法 public voidinflate(int menuRes, Menu menu) 菜单层次从一个指定的xml资源去填充,如果有错误会抛掷InflateException。 参数 menuRes要加载XML布局文件中的资源ID(例如R.menu.main_activity) menu要填充的菜单,这些项目和子菜单就被添加到要填充菜单中 五、补充 文章精选 MenuInflater Android菜单从xml创建方法 Android中MenuInflater实例 Android中MenuInflater的使用(布局定义菜单) 示例代码 新建一个项目,项目文件列表 MenuInfalterTest.java public class MenuInflaterTest extends Activity{ @Override public void onCreate(BundlesavedInstanceState){ super .onCreate(savedInstanceState); setContentView(R.layout.main); } public boolean onCreateOptionsMenu(Menumenu){ // 获取当前的菜单 MenuInflaterinflater = getMenuInflater(); // 填充菜单 inflater.inflate(R.menu.option_menu,menu); return true ; } /** *对菜单点击事件处理 */ public boolean onOptionsItemSelected(MenuItemitem){ switch (item.getItemId()){ case R.id.menu_add: break ; case R.id.menu_wallaper: break ; case R.id.menu_search: break ; case R.id.menu_setting: showSettings(); break ; } return super .onOptionsItemSelected(item); } /** *显示设置选项 */ private void showSettings(){ Intentsettings = new Intent (android.provider.Settings.ACTION_SETTINGS); settings.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); startActivity(settings); } } } 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" > < TextView android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="@string/hello" /> </ LinearLayout > Option_menu.xml <? xmlversion="1.0"encoding="utf-8" ?> < menu xmlns:android ="http://schemas.android.com/apk/res/android" > < item android:id ="@+id/menu_add" android:title ="Add" android:icon ="@android:drawable/ic_menu_add" /> < item android:id ="@+id/menu_wallaper" android:title ="Wallpaper" android:icon ="@android:drawable/ic_menu_gallery" /> < item android:id ="@+id/menu_search" android:title ="Search" android:icon ="@android:drawable/ic_search_category_default" /> < item android:id ="@+id/menu_setting" android:title ="Settings" android:icon ="@android:drawable/ic_menu_preferences" /> </ menu > 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582414,如需转载请自行联系原作者

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

android 中文api (84) —— TrafficStats

正文 一、结构 public classTrafficStats extendsObject java.lang.Object android.net.TrafficStats 二、概述 提供网络流量统计的类。这些统计包括通过所有网络接口、mobile接口和UID网络接口的字节发送和接收,网络数据包的发送和接收。 这些统计可能不适用于所有平台。如果本设备不支持统计, UNSUPPORTED 将被返回。 三、常量 public static final intUNSUPPORTED 返回值表示该设备不支持统计。 常量值: -1 (0xffffffff) 四、公共方法 public static longgetMobileRxBytes() 获取通过Mobile接口接收到的字节总数(Android123:这里不包含WiFi) 返回值 字节总数。如果本设备不支持统计,将返回UNSUPPORTED。 public static longgetMobileRxPackets() 获取通过Mobile接口接收到的数据包总数 返回值 数据包总数。如果本设备不支持统计,将返回UNSUPPORTED。 public static longgetMobileTxBytes() 获取通过Mobile接口发送的字节总数 返回值 字节总数。如果本设备不支持统计,将返回UNSUPPORTED。 public static longgetMobileTxPackets() 获取通过Mobile接口发送的数据包总数 返回值 数据包总数。如果本设备不支持统计,将返回UNSUPPORTED。 public static longgetTotalRxBytes() 获取通过所有网络接口接收到的字节总数。(Android123:包含Mobile和WiFi等) 返回值 字节总数。如果本设备不支持统计,将返回UNSUPPORTED。 public static longgetTotalRxPackets() 获取通过所有网络接口接收到的数据包总数。(Android123:包含Mobile和WiFi等) 返回值 数据包总数。如果本设备不支持统计,将返回UNSUPPORTED。 public static longgetTotalTxBytes() 获取通过所有网络接口发送的字节总数。(Android123:包含Mobile和WiFi等) 返回值 字节总数。如果本设备不支持统计,将返回UNSUPPORTED。 public static longgetTotalTxPackets() 获取通过所有网络接口发送的数据包总数(Android123:包含Mobile和WiFi等) 返回值 数据包总数。如果本设备不支持统计,将返回UNSUPPORTED。 public static longgetUidRxBytes(int uid) 获取通过UID网络接口收到的字节数。统计包含所有网络接口。 参数 uid待检查的进程的uid 返回值 字节数 参见 myUid() public static longgetUidTxBytes(int uid) 获取通过UID网络接口发送的字节数。统计包含所有网络接口。 参数 uid待检查的进程的uid 返回值 字节总数。如果本设备不支持统计,将返回UNSUPPORTED。 参见 myUid() 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582427,如需转载请自行联系原作者

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

Android中文API(114)——TabWidget

正文 一、结构 public classTabWidget extendsLinearLayout implementsView.OnFocusChangeListener java.lang.Object android.view.View android.view.ViewGroup android.widget.LinearLayout android.widget.TabWidget 二、概述 显示选项卡标签的列表,用于代表父选项卡集合的每一页。当前widget的容器对象是TabHost。当用户选择一个选项卡时,此对象给父容器对象TabHost发送一个消息,告诉TabHost切换到对应的页面显示。此对象上的很多方法,你通常不会直接使用。容器TabHost被用来添加标签,添加并管理回调函数。你可能会调用此对象以迭代选项卡列表,或者调整选项卡列表的布局,但大多数方法应该是通过容器TabHost对象调用。 参见Tab Layout tutorial。 三、XML属性 属性名称 描述 android:divider 可绘制对象,被绘制在选项卡窗口间充当分割物。 android:tabStripEnabled 确定是否在选项卡绘制 android:tabStripLeft 被用来绘制选项卡下面的分割线左边部分的可视化对象。 android:tabStripRight 被用来绘制选项卡下面的分割线右边部分的可视化对象。 四、公共方法 public voidaddView(View child) 增加子视图。如果子视图没有设置布局参数,那么将为子视图设置此ViewGroup默认的布局参数。 参数 child新增的子视图 public voidchildDrawableStateChanged(View child) 如果调用addStatesFromChildren函数返回true,刷新此组的可视化对象的状态(包括它的子元素的状态)。 参数 child可视化对象状态被改变的子元素。 public voiddispatchDraw(Canvas canvas) 绘制时调用此方法来绘制子视图。派生类在被绘制之前,为获取控制可能会重写此方法(但必须在它自己的视图已经被绘制之后)。 参数 canvas绘制视图的画布(canvas) public voidfocusCurrentTab(int index) 设置当前选项卡并且让其获得焦点。此方法确保获取焦点的选项卡窗口匹配选中的窗口,一般情况下类似setCurrentTab(int)。通常当我们通过操作UI实现时,这些都不是问题,因为UI负责调用TabWidget.onFocusChanged(),但如果我们通过程序控制选中选项卡窗口,那么我们就必须确认保持焦点。(译者注:setCurrentTab(int)执行后,选中指定索引的选项卡窗口,但不获取焦点。focusCurrentTab(int)执行后,不仅通过调用setCurrentTab(int)选中指定索引的选项卡窗口还获取焦点。) 参数 index你想要设置焦点(橘色高亮)并且选中(选项卡被至于部件widget的前端)的选项卡。 参见 setCurrentTab(int) public ViewgetChildTabViewAt(int index) 返回位于指定索引位置的选项卡标识符的视图 参数 index选项卡指示符视图返回的从零开始的索引 返回值 在提供的索引位置上的选项卡指示符视图 public intgetTabCount() 返回选项卡的数量 返回值 选项卡指示符视图的数量 public booleanisStripEnabled() 指明选项卡指示符的底部分隔线是否绘制 public voidonFocusChange(View v, boolean hasFocus) 当视图的焦点状态被改变时调用。 参数 v状态变化的视图 hasFocus 视图的新焦点状态。 public voidsendAccessibilityEventUnchecked(AccessibilityEvent event) 处理用于发送AccessibilityEvent的请求。如果再发送之前调度事件,本方法不保证可访问性检查。可以通过调用者调用isEnabled()检查。 参数 event事件 public void setCurrentTab (int index) 设置当前选项卡。此方法被用来将选项卡置于widget的前部,并且通知其它的UI元素,一个不同的选项卡被调整到了前台。注意,这不同于传统的“焦点”,是从视图逻辑的焦点。 例如,如果我们在选项卡式视图中有一个列表,一个用户可能会上下移动列表,通过列表选项移动UI焦点(橘色高亮)。光标的移动并不影响选项卡的选中状态,因为滚动是在同一个选项卡上的。选中的选项卡仅仅当我们在选项卡上切换时(在此例中,从列表视图移到下一选项卡视图)更改。如果想要一次性的设置焦点并选中选项卡,请使用setCurrentTab(int)。 正常情况下,视图逻辑关注调整焦点,除非你规避了UI,你可能仅仅将你的兴趣集中在这里。 参数 index你想要指做选中选项卡的选项卡索引(选项卡被显示到widget的前部) 参见 focusCurrentTab(int) public voidsetDividerDrawable(Drawable drawable) 设置用于在选项窗口指示符间分隔的可绘制对象 参数 drawable用于分隔的可绘制对象 public voidsetDividerDrawable(int resId) 设置用于在两个选项卡标识符之间进行分隔的可绘制对象 参数 resId 被用来分隔的可绘制对象的资源标识 public voidsetEnabled(boolean enabled) 设置当前视图的启用状态。子类的不同而其对应的启用状态的解释也不相同。 参数 enabled是否启动 public voidsetLeftStripDrawable(int resId) 设置被用来当作选项卡指示符下面的分割线,左边部分的可绘制对象。 参数 resId the被用来当作左边分隔线的可绘制对象的资源标识符 public voidsetLeftStripDrawable(Drawable drawable) 设置被用来当作选项卡指示符下面的分割线,左边部分的可绘制对象。 参数 drawable左边分隔线的可绘制对象 public voidsetRightStripDrawable(int resId) 设置被用来当作选项卡指示符下面的分割线,右边部分的可绘制对象。 参数 resId 被用来当作右边分隔线的可绘制对象的资源标识符 public voidsetRightStripDrawable(Drawable drawable) 设置被用来当作选项卡指示符下面的分割线,右边部分的可绘制对象。 参数 drawable右边分隔线的可绘制对象 public voidsetStripEnabled(boolean stripEnabled) 控制选项卡指示符底部的分隔线是否绘制。默认是绘制。如果用户为选项卡指示符指定一个定制的视图,那么TabHost类调用此方法以禁用绘制底部分割线。 参数 stripEnabled如果需要绘制底部分割线为true 五、受保护方法 protected int getChildDrawingOrder (int childCount, int i) 返回要绘制的子元素在当前迭代中的索引。如果你需要修改子元素的绘制顺序,可以覆写此方法。默认情况下返回参数i值。 注意:为使此方法被调用,你必须先通过调用setChildrenDrawingOrderEnabled(boolean)启用子元素排序 参数 i 当前的迭代值 返回值 将要绘制的子元素在当前迭代的索引 protected void onSizeChanged (int w, int h, int oldw, int oldh) 布局过程中,当此视图的大小发生改变时被调用的。如果你只是添加到视图的层次结构,你调用时可以使用0当作之前的值(old value)。 参数 w 此视图的当前宽度 h 此视图的当前高度 oldw Old此视图之前的宽度 oldh此视图之前的高度 六、补充 术语对照 indicator指示符 drawable可绘制对象 iteration迭代 strips分割线 文章精选 Android选项卡(TabWidget)例子 {Android学习指南}TabWidget Android将TAB选项卡放在屏幕底部 示例代码 Java: public class TabDemo1 extends Activity implements OnClickListener{ TabHostmTabHost = null ; TabWidgetmTabWidget = null ; ButtonbtnVisiable,btnStrip; @Override protected void onCreate(BundlesavedInstanceState){ // TODOAuto-generatedmethodstub super .onCreate(savedInstanceState); setContentView(R.layout.tabdemo1); mTabHost = (TabHost)findViewById(android.R.id.tabhost); mTabHost.setup(); mTabWidget = mTabHost.getTabWidget(); mTabHost.addTab(mTabHost.newTabSpec( " tab1 " ).setContent( R.id.LinearLayout001).setIndicator( " Tab1 " )); mTabHost.addTab(mTabHost.newTabSpec( " tab2 " ).setContent( R.id.LinearLayout002).setIndicator( " Tab2 " )); mTabHost.addTab(mTabHost.newTabSpec( " tab3 " ).setContent( R.id.LinearLayout003).setIndicator( " Tab3 " )); // mTabHost.setCurrentTab(1); btnVisiable = (Button)findViewById(R.id.btnVisiable); btnStrip = (Button)findViewById(R.id.btnStrip); btnVisiable.setOnClickListener( this ); btnStrip.setOnClickListener( this ); setTitle( " 共有 " + mTabWidget.getTabCount() + " 个tab " ); } @Override public void onClick(Viewv){ // TODOAuto-generatedmethodstub switch (v.getId()){ case R.id.btnVisiable: if (mTabWidget.getVisibility() != android.view.View.VISIBLE) mTabWidget.setVisibility(android.view.View.VISIBLE); else mTabWidget.setVisibility(android.view.View.INVISIBLE); break ; case R.id.btnStrip: mTabWidget.setStripEnabled( ! mTabWidget.isStripEnabled()); mTabWidget.setRightStripDrawable(android.R.color.transparent); break ; default : break ; } } } XML: <? xmlversion="1.0"encoding="utf-8" ?> < TabHost xmlns:android ="http://schemas.android.com/apk/res/android" android:layout_width ="fill_parent" android:layout_height ="fill_parent" android:id ="@android:id/tabhost" > < LinearLayout android:layout_width ="fill_parent" android:orientation ="vertical" android:layout_height ="fill_parent" > < TabWidget android:id ="@android:id/tabs" android:layout_width ="fill_parent" android:layout_height ="wrap_content" ></ TabWidget > < FrameLayout android:id ="@android:id/tabcontent" android:layout_height ="wrap_content" android:layout_width ="fill_parent" > < LinearLayout android:id ="@+id/LinearLayout001" android:orientation ="vertical" android:layout_width ="fill_parent" android:layout_height ="fill_parent" > < Button android:id ="@+id/btnVisiable" android:text ="显示状态切换" android:layout_width ="fill_parent" android:layout_height ="wrap_content" ></ Button > < Button android:id ="@+id/btnStrip" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="分隔线状态切换" ></ Button > < TextView android:id ="@+id/TextView1" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="小龙是好人!!!" ></ TextView > </ LinearLayout > < LinearLayout android:id ="@+id/LinearLayout002" android:layout_width ="fill_parent" android:layout_height ="fill_parent" > < TextView android:id ="@+id/TextView2" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="小龙是坏蛋!" ></ TextView > </ LinearLayout > < LinearLayout android:id ="@+id/LinearLayout003" android:layout_width ="fill_parent" android:layout_height ="fill_parent" > < TextView android:id ="@+id/TextView3" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="小龙还是坏蛋!" ></ TextView > </ LinearLayout > </ FrameLayout > </ LinearLayout > </ TabHost > 结束 每次合集发布就像受检部队在接受检阅,紧张而又荣耀。为了每次的检阅,大家尽心尽力的筹备,做同一件事情,鼓励自己坚持,鼓励“战友”坚持。致力于可持续发展开源事业的建设。 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582358,如需转载请自行联系原作者

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

Android中文API(117)——WrapperListAdapter

正文 一、结构 public interfaceWrapperListAdapter implementsListAdapter android.widget. WrapperListAdapter 间接子类 HeaderViewListAdapter 二、概述 封装了另一个列表适配器的列表适配器。调用getWrappedAdapter()可以取得封装在其中的适配器。 参见 ListView 三、公共方法 public abstract ListAdaptergetWrappedAdapter() 返回封装在列表适配器中的适配器。 返回值 封装在该适配器中的ListAdapter。 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582351,如需转载请自行联系原作者

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

Android 中文 API (102)—— CursorAdapter

正文 一、结构 public abstract classCusrorAdapter extendsBaseAdpaterimplementsFilterable java.lang.Object android.widget.BaseAdapter android.widget.CursorAdapter 直接子类 ResourceCursorAdapter 间接子类 SimpleCursorAdapter 二、概述 通过该类可以用Cursor的方式访问数据库,并将查询出来的数据展示到列表视图(ListView)部件上。其中游标携带的结果集中必须有列名为“_id”的列,否则这个类无法工作。 三、构造函数 publicCusorAdapter(Context context,Cursor c) 构造函数。每当数据库的数据发生改变时,适配器将调用requery()重新查询以显示最新的数据。 参数 context 应用程序上下文。 c用来获取数据的游标(Coursor) publicCusorAdapter(Context context,Cursor c, boolean autoRequery) 构造函数。每当数据库的数据发生改变时,适配器将调用requery()重新查询以显示最新的数据。 参数 context 应用程序上下文。 c用来获取数据的Coursor autoRequry 设置为true时,每当数据库的数据发生改变时,适配器将调用requery()重新查询以显示最新的数据。 四、公共方法 public abstract voidbindView(View view, Context context, Cursor cursor) 重用一个已有的view,使其显示当前cursor所指向的数据。 参数 view已存在的视图,返回之前newView方法创建的视图。 context应用程序上下文 cursor 用于获取数据的Coursor。Coursor已经移到正确的位置。 public voidchangeCursor(Cursor cursor) 更改底层的游标为新传入的游标。如果游标已经存在则先关闭这个已存在的游标。 参数 cursor 新Cursor。 public CharSequenceconvertToString(Cursor cursor) 将cursor转换成CharSequence。子类应该重写这个方法并转换它们的结果。这个方法的默认实现是:当cursor为空时返回一个空串,否则直接返回调用cursor的toString()方法。 参数 cursor 将cursor转换成CharSequence对象。 返回值 返回表示CharSequence的值。 public intgetCount() (译者注:获取适配器中数据的总行数。) 参见 getCount() public CursorgetCursor() 返回当前适配器绑定的Cursor对象。 返回值 Cursor对象。 public ViewgetDropDownView(int position, View convertView, ViewGroup parent) 获取下拉列表选项指定位置的视图对象 参数 position 视图(View)对象的行索引。 convertView重用已有的视图(View)对象。备注:在使用前你应该检查一下这个视图对象是否非空并且这个对象的类型是否合适。由此引伸出,如果该对象不能被转换并显示正确的数据,这个方法内部就会重新创建一个合适的视图(View)对象。 parent 不管是转换后的还是重新创建的视图(View)对象,始终都会依附于parent对象上。 返回值 返回视图(View)对象,该对象显示数据集指定位置上的数据。 public FiltergetFilter() 返回一个可以通过一种过滤模式来约束数据的过滤器。 这个方法通常在Adapter类实现。 返回值 一个用于约束数据的过滤器 public FilterQueryProvidergetFilterQueryProvider() 返回一个提供过滤的查询过滤器。若过滤器为null,则不再过滤。 返回值 返回当前过滤器对象,如果不存在返回null。 参见 setFilterQueryProvider(android.widget.FilterQueryProvider) runQueryOnBackgroundThread(CharSequence) public ObjectgetItem(int position) (译者注:获取数据集中指定位置上的数据项目) 参见 getItem(int) public longgetItemId(int position) (译者注:获取数据集中的指定位置上的行id。) 参见 getItemId(int) public ViewgetView(int position, View convertView, ViewGroup parent) (译者注:获取一个显示数据集中指定位置数据段视图。可以手动创建视图,或者从XML设计文件填充。当视图从XML设计文件填充时,父视图(如GridView,ListView等)将接受默认的设计参数,除非使用inflate(int, android.view.ViewGroup, boolean)去指定一个根视图和防止依附于根视图。) 参见 getView(int, View, ViewGroup) public booleanhasStableIds() 无论项ID代表的基础数据的是否变化都保持不变。 返回值 如果为TRUE,意味着相同的ID始终引用相同的对象。 public ViewnewDropDownView(Context context, Cursor cursor, ViewGroup parent) 生成一个新的下拉视图来保存cursor指向的数据 参数 context 应用程序全局信息接口(应用上下文) cursor获取数据的游标,它已经移动到正确的位置 parent与新视图相关联的上级视图 返回值 新创建的视图。 public abstract ViewnewView(Context context, Cursor cursor, ViewGroup parent) 新建一个视图来保存cursor指向的数据 参数 context 应用程序全局信息接口(应用上下文) cursor获取数据的游标,它已经移动到正确的位置 parent与新视图相关联的上级视图 返回值 新创建的视图。 public CursorrunQueryOnBackgroundThread(CharSequence constraint) 执行含指定约束的查询。此查询依赖于适配器的过滤器。查询是由FilterQueryProvider提供。如果没有指定FilterQueryProvider,当前cursor不过滤只返回。该方法会通过changeCursor(Cursor)方法返回一个Cursor对象,并且关闭掉先前的Cursor对象。这个方法始终在后台线程执行,而不是在应用程序的主线程(或是UI线程)中运行。规定:当参数constraint为null或为空时,该方法返回原始结果。 参数 constraint该查询必须被过滤的约束。 返回值 返回含有新的查询结果的Cursor。 参考 getFilter() getFilterQueryProvider() setFilterQueryProvider(android.widget.FilterQueryProvider) public voidsetFilterQueryProvider(FilterQueryProvider filterQueryProvider) 设置一个过滤器,用来过滤当前的Cursor对象。当这个适配器需要进行过滤操作时,runQuery(CharSequence)方法被调用。 参数 filterQueryProvider 过滤器对象,设置为null时,就相当于移除了该过滤器。 参考 getFilterQueryProvider() runQueryOnBackgroundThread(CharSequence) 五、受保护方法 protected voidinit(Context context, Cursor c, boolean autoRequery) (译者注:供构造函数使用初始化相关参数) protected voidonContentChanged() 当 cursor 对象上的 ContentObserver 接收到改变的通知时就会调用该方法,其默认实现提供了自动重新查询方式,但可以被子类重写。 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582387,如需转载请自行联系原作者

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

Android中文API(126) —— Message

结构 继承关系 public final classMessage extendsObjectimplementsParcelable java.lang.Object android.os.Message 类概述 定义一个包含任意类型的描述数据对象,此对象可以发送给Handler。对象包含两个额外的int字段和一个额外的对象字段,这样可以使得在很多情况下不用做分配工作。 尽管Message的构造器是公开的,但是获取Message对象的最好方法是调用Message.obtain()或者Handler.obtainMessage(),这样是从一个可回收对象池中获取Message对象。 字段 public static final Creator<Message>CREATOR public intarg1 如果只需要存储几个整型数据,arg1和arg2是setData()的低成本替代品。 public intarg2 如果只需要存储几个整型数据,arg1和arg2是setData()的低成本替代品。 public Objectobj 发送给接收器的任意对象。当使用Message对象在线程间传递消息时,如果它包含一个Parcelable的结构类(不是由应用程序实现的类),此字段必须为非空(non-null)。其他的数据传输则使用setData(Bundle)方法。 注意Parcelable对象是从FROYO版本以后才开始支持的。 public MessengerreplyTo 指明此message发送到何处的可选Messenger对象。具体的使用方法由发送者和接受者决定。 public intwhat 用户自定义的消息代码,这样接受者可以了解这个消息的信息。每个handler各自包含自己的消息代码,所以不用担心自定义的消息跟其他handlers有冲突。 公共构造器 public Message() 构造器(但是获取Message对象的最好方法是调用Message.obtain())。 公共方法 public voidcopyFrom(Message o) 使此message跟参数o相似。浅拷贝数据域。不拷贝源message的链表字段,时间戳和目标/回调。 public intdescribeContents() 描述了包含在Parcelable对象排列信息中的特殊对象的类型。 返回值 一个标志位,表明Parcelable对象特殊对象类型集合的排列。 public RunnablegetCallback() 获取回调对象,此对象会在message处理时执行。此对象必须实现Runnable接口。回调由接收此消息并分发的目标handler调用。如果没有设置回调,此消息会分发到接收handler的handleMessage(Message)。 public BundlegetData() 获取附加在此事件上的任意数据的Bundle对象,需要时延迟创建。通过调用setData(Bundle)来设置Bundle的值。需要注意的是,如果通过Messenger对象在进程间传递数据时,需要调用Bundle类的Bundle.setClassLoader()方法来设置ClassLoader,这样当接收到消息时可以实例化Bundle里的对象。 参考 peekData() setData(Bundle) public HandlergetTarget() 获取将接收此消息的Handler对象。此对象必须要实现Handler.handleMessage()方法。每个handler各自包含自己的消息代码,所以不用担心自定义的消息跟其他handlers有冲突。 public longgetWhen() 返回此消息的传输时间,以毫秒为单位。 public static Messageobtain(Handler h, int what, int arg1, int arg2, Object obj) 与obtain()一样,但是设置了target, what, arg1, arg2和obj的值。 参数 h设置的target值 what设置的what值 arg1设置的arg1值 arg2设置的arg2值 obj设置的obj值 返回值 从全局池中分配的一个Message对象。 public static Messageobtain(Handler h, int what, Object obj) 与obtain()一样,但是设置了target, what和obj的值。 参数 h设置的target值 what 设置的what值 obj设置的obj值 返回值 从全局池中分配的一个Message对象。 public static Messageobtain(Handler h, int what) 与obtain()一样,但是设置了target和what的值。 参数 h target的值 what what的值 返回值 从全局池中分配的一个Message对象。 public static Messageobtain(Handler h) 与obtain()一样,但是设置了target的值 参数 h消息对象的target成员的值 返回值 从全局池中分配的一个Message对象。 public static Messageobtain(Handler h, Runnable callback) 与obtain(Handler)一样,但是设置回调函数,在Message返回时调用。 参数 h消息对象的target成员的值 callback当消息处理时会调用的回调函数 返回值 从全局池中分配的一个Message对象。 public static Messageobtain() 从全局池中返回一个新的Message实例。在大多数情况下这样可以避免分配新的对象。 public static Messageobtain(Handler h, int what, int arg1, int arg2) 与obtain()一样,但是设置了target, what, arg1和arg2的值 参数 h设置的targe值 what设置的what值 arg1设置的arg1值 arg2设置的arg2值 返回值 从全局池中分配的一个Message对象。 public static Messageobtain(Message obj) 同obtain(),但是从一个已存在的消息中拷贝值(包括它的目标)。 参数 orig要拷贝的源消息 返回值 从全局池中分配的一个Message对象。 public BundlepeekData() 与getData()相似,但是并不延迟创建Bundle。如果Bundle对象不存在返回null。更多信息见getData()。 参考 getData() setData(Bundle) public voidrecyle() 向全局池中返回一个Message实例。一定不能在调用此函数后再使用Message——它会立即被释放。 public voidsendToTarget() 向Handler发送此消息,getTarget()方法可以获取此Handler。如果这个字段没有设置会抛出个空指针异常。 public voidsetData(Bundle data) 设置一个任意数据值的Bundle对象。如果可以,使用arg1和arg2域发送一些整型值以减少消耗。 参考 getData() peekData() public voidsetTarget(Handler target) 设置将接收此消息的Handler对象。 public StringtoString() 返回一个Message对象简单的,可读懂的描述信息。鼓励子类重写此方法,实现时最好把对象的类型的数据考虑进去。默认的实现等同与以下表达式: 如果需要实现toString方法,参考Writing a useful toString method。 返回值 一个代表此对象的可打印字符串 public voidwriteToParcel(Parcel dest, int flags) 将类的数据写入外部提供的Parcel中 参数 dest对象被写入的Parcel flags对象如何被写入的附加标志,可能是0或PARCELABLE_WRITE_RETURN_VALUE。 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/595409,如需转载请自行联系原作者

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

Android中文API(124) —— DialerFilter

结构 继承关系 public static interfaceView.OnClickListner android.view.View.OnClickListener 子类及间接子类 间接子类 CharacterPickerDialog, KeyboardView, QuickContactBadge 类概述 (译者注:拨号器过滤,暂时不清楚使用方法和场景。) 常量 public static final int DIGITS_AND_LETTERS 该模式包含两行。 常量值:1 (0x00000001) public static final int DIGITS_AND_LETTERS_NO_DIGITS DIGITS_AND_LETTERS模式开始后,过滤器移除了所有匹配的数字,只剩字母行时的模式。 常量值:2 (0x00000002) public static final int DIGITS_AND_LETTERS_NO_LETTERS DIGITS_AND_LETTERS模式开始后,过滤器移除了所有匹配的字母,只剩数字行时的模式。 常量值:3 (0x00000003) public static final int DIGITS_ONLY 该模式只有数字行。 常量值:4 (0x00000004) public static final int LETTERS_ONLY 该模式只有字母行。 常量值:5 (0x00000005) 公共方法 public voidappend(String text) public voidclearText() 清除数值和过滤器文本。 public CharSequencegetDigits() public CharSequencegetFilterText() public CharSequencegetLetters() public intgetMode() public booleanisQwertyKeyboard() public booleanonKeyDown(int keyCode, KeyEvent event) KeyEvent.Callback.onKeyMultiple()的默认实现.如果视图可用并可按,当按下KEYCODE_DPAD_CENTER或KEYCODE_ENTER时执行视图的按下事件. 参数 keyCode表示按下的键的、在KEYCODE_ENTER中定义的键盘代码. event KeyEvent对象,定义了按钮动作. 返回值 如果处理了事件,返回真.如果允许下一个事件接受器处理该事件,可以返回假. public booleanonKeyUp(int keyCode, KeyEvent event) KeyEvent.Callback.onKeyMultiple()的默认实现.当释放KEYCODE_DPAD_CENTER或KEYCODE_ENTER时执行视图的单击事件. 参数 keyCode表示按下的键的、在KEYCODE_ENTER中定义的键盘代码. event KeyEvent对象,定义了按钮动作. 返回值 如果处理了事件,返回真.如果允许下一个事件接受器处理该事件,可以返回假. public voidremoveFilterWatcher(TextWatcher watcher) public voidsetDigitsWatcher(TextWatcher watcher) public voidsetFilterWatcher(TextWatcher watcher) public voidsetLettersWatcher(TextWatcher watcher) public voidsetMode(int newMode) 改变小部件的模式。 参数 newMode变更的目标模式。 受保护方法 protected voidonFinishInflate() 根据XML生成视图工作完成.该函数在生成视图的最后调用,在所有子视图添加完之后。 即使子类覆盖了onFinishInflate方法,也应该调用父类的方法,使该方法得以执行。 protected voidonFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) 如果有图标,只是在得到焦点时显示图标视图。 参数 focused 如果视图具有焦点,值为真;否则为假. direction当调用requestFocus()为该视图设置焦点时,该值为焦点移动的方向.其值为FOCUS_UP、FOCUS_DOWN、FOCUS_LEFT或者FOCUS_RIGHT.当使用无参数的requestFocus()时,可能无值. previouslyFocusedRect失去焦点的视图的矩形坐标,使用该视图的坐标系统.如果指定了,它将传入可以知道焦点来自哪里的详细信息(作为对direction的补充).否则,其值为null。 protected voidonModeChange(int oldMode, int newMode) 在模式变更后调用,为子类提供可以用于重新更改风格的等附加操作的机会。 补充 示例代码 <?xmlversion="1.0"encoding="utf-8"?> <DialerFilterandroid:id="@+id/dialer_filter" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <EditTextandroid:id="@android:id/hint" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:drawable/editbox_background"/> <EditTextandroid:id="@android:id/primary" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@android:id/hint"/> </DialerFilter> 测试代码 DialerFilterTest.java 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/587330,如需转载请自行联系原作者

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

Android中文API(128) —— HandlerThread

结构 继承关系 public classHandleThread extendsThread java.lang.Object java.lang.Thread android.os.HandlerThread 类概述 用于方便的创建一个含有looper的线程类。looper用来创建handler类。请注意,仍然需要调用start()方法。 构造函数 public HandlerThread (String name) 构造一个HandlerThread publicHandlerThread(String name, int priority) 构造一个HandlerThread 参数 priority运行线程的优先级,这个值是由Android.os.Process提供而不是来自java.lang.Thread. 公共方法 public LoopergetLooper() 这个方法返回与此线程相关的Looper。如果该线程不能启动或是由于某种原因isAlive()方法返回false,则这个方法返回null,假如这个线程已经启动,那么此方法将阻塞,直到looper被初始化。 返回值 Looper public intgetThreadId() 返回线程的标志。详见:Process.myTid() public booleanquit() 查看当前运行的looper是否已经退出。假如线程这未启动或者已经结束(即getLooper()方法返回null),这个方法将返回false。否则looper被要求退出并返回true。 public voidrun() 调用设置Runnable对象的run()方法。如果没有设置Runnable,什么也不做。 受保护方法 protected voidonLooperPrepared() 如果需要在Looper循环之前执行一些设置,可明确继承该回调方法。 (译者注:如下代码: void run(){ mTid = Process.myTid(); Looper.prepare(); // 创建一个Looper实例,并且存储在ThreadLocal中,ThreadLocal中维护一个HashMap,键是线程号 synchronized ( this ){ mLooper = Looper.myLooper(); // 得到当前线程的Looper,就是刚才perpare方法中创建并存储的那个Looper实例 Process.setThreadPriority(mPriority); notifyAll(); } onLooperPrepared(); Looper.loop(); // 开始轮询 mTid = - 1 ; ) 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/613749,如需转载请自行联系原作者

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

Android 中文 API (35) —— ImageSwitcher

正文 一、结构 public classImageSwitcherextendsViewSwitcher java.lang.Objectandroid.view.View android.view.ViewGroup android.widget.FrameLayout android.widget.ViewAnimator android.widget.ViewSwitcher android.widget.ImageSwitcher 二、概述 (译者注:ImageSwitcher是Android中控制图片展示效果的一个控件,如:幻灯片效果...,颇有感觉啊,做相册一绝。) 三、公共方法 public void setImageDrawable (Drawable drawable) 绘制图片 public void setImageResource (int resid) 设置图片资源库 public void setImageURI (Uri uri) 设置图片地址 四、补充 4.1 文章链接 Android ImageSwitcher Image Switcher View | Android Developer Tutorial 4.2 示例代码(本文代码转载自这里) java文件 public class mainactivity extends Activity implements OnItemSelectedListener,ViewFactory{ private ImageSwitcheris; private Gallerygallery; private Integer[]mThumbIds = {R.drawable.b,R.drawable.c, R.drawable.d,R.drawable.f,R.drawable.g, }; private Integer[]mImageIds = {R.drawable.b,R.drawable.c, R.drawable.d,R.drawable.f,R.drawable.g,}; @Override protected void onCreate(BundlesavedInstanceState){ super .onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); is = (ImageSwitcher)findViewById(R.id.switcher); is.setFactory( this ); is.setInAnimation(AnimationUtils.loadAnimation( this , android.R.anim.fade_in)); is.setOutAnimation(AnimationUtils.loadAnimation( this , android.R.anim.fade_out)); gallery = (Gallery)findViewById(R.id.gallery); gallery.setAdapter( new ImageAdapter( this )); gallery.setOnItemSelectedListener( this ); } @Override public ViewmakeView(){ ImageViewi = new ImageView( this ); i.setBackgroundColor( 0xFF000000 ); i.setScaleType(ImageView.ScaleType.FIT_CENTER); i.setLayoutParams( new ImageSwitcher.LayoutParams( LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT)); return i; } public class ImageAdapter extends BaseAdapter{ public ImageAdapter(Contextc){ mContext = c; } public int getCount(){ return mThumbIds.length; } public ObjectgetItem( int position){ return position; } public long getItemId( int position){ return position; } public ViewgetView( int position,ViewconvertView,ViewGroupparent){ ImageViewi = new ImageView(mContext); i.setImageResource(mThumbIds[position]); i.setAdjustViewBounds( true ); i.setLayoutParams( new Gallery.LayoutParams( LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); i.setBackgroundResource(R.drawable.e); return i; } private ContextmContext; } @Override public void onItemSelected(AdapterView <?> parent,Viewview, int position, long id){ is.setImageResource(mImageIds[position]); } @Override public void onNothingSelected(AdapterView <?> parent){ } } xml文件 <? xmlversion="1.0"encoding="utf-8" ?> < RelativeLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:layout_width ="match_parent" android:layout_height ="match_parent" > < ImageSwitcher android:id ="@+id/switcher" android:layout_width ="match_parent" android:layout_height ="match_parent" android:layout_alignParentTop ="true" android:layout_alignParentLeft ="true" /> < Gallery android:id ="@+id/gallery" android:background ="#55000000" android:layout_width ="match_parent" android:layout_height ="60dp" android:layout_alignParentBottom ="true" android:layout_alignParentLeft ="true" android:gravity ="center_vertical" android:spacing ="16dp" /> </ RelativeLayout > 结束 wallace2010居然弄个这么好看的图片 - - # 吸引帝...... 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582635,如需转载请自行联系原作者

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

Android中文API (110) —— CursorTreeAdapter

正文 一、结构 public abstract classCusrorTreeAdapter extendsBaseExpandableListAdpaterimplementsFilterable java.lang.Object android.widget.BaseExpandableListAdapter android.widget.CursorTreeAdapter 直接子类 ResourceCursorTreeAdapter 间接子类 SimpleCursorTreeAdapter 二、概述 通过该适配类可以用一连续的游标(Coursor)对象访问数据库,并将查询出来的数据展示到可伸缩的列表视图(ExpandableListView)部件上。顶层游标(Cursor)对象(在构造器中指定)显示全部组,后面的游标(Cursor)对象从getChildrenCursor(Cursor)获取并展示子元素组。其中游标携带的结果集中必须有个名为“_id”的列,否则这个类不起任何作用。 三、构造函数 publicCursorTreeAdapter(Cursor cursor, Context context) 构造函数。每当数据库的数据发生改变时,适配器将调用requery()重新查询以显示最新的数据。 参数 cursor为组(groups)提供数据的游标(Coursor) context应用程序上下文。 publicCursorTreeAdapter(Cursor cursor, Context context, boolean autoRequery) 构造函数。 参数 cursor为组(groups)提供数据的游标(Coursor) context应用程序上下文。 autoRequery设置为true时,每当数据库的数据发生改变时,适配器将调用requery()重新查询以显示最新的数据。 四、公共方法 public voidchangeCursor(Cursor cursor) 更改相关的游标为新传入的游标。如果游标已经存在则先关闭这个已存在的游标。 参数 cursor 新游标(Cursor)对象。 public CharSequenceconvertToString(Cursor cursor) 将cursor转换成CharSequence。子类应该重写这个方法并转换它们的结果。这个方法的默认实现是:当cursor为空时返回一个空串,否则直接返回调用cursor的toString()方法。 参数 cursor 将cursor转换成CharSequence对象。 返回值 返回CharSequence类型的值(译者注:这个值是通过转换参数cursor类型而获得的。) public CursorgetChild(int groupPosition, int childPosition) 获取指定组中的指定子元素的相关数据。 参数 groupPosition组位置(该组内部含有子元素) childPosition子元素位置(相对于其它子元素) 返回值 返回指定子元素数据。 public longgetChildId(int groupPosition, int childPosition) 获取指定组中的指定子元素ID,这个ID在组里一定是唯一的。联合ID(参见getCombinedChildId(long, long))在所有条目(所有组和所有元素)中也是唯一的。 参数 groupPosition组位置(该组内部含有子元素) childPosition子元素位置(相对于其它子元素) 返回值 子元素关联ID。 public ViewgetChildView(int groupPosition, int childPosition, boolean isLastChild,View convertView, ViewGroup parent) 获取一个视图对象,显示指定组中的指定子元素数据。 参数 groupPosition组位置(该组内部含有子元素) childPosition子元素位置(决定返回哪个视图) isLastChild子元素是否处于组中的最后一个 convertView重用已有的视图(View)对象。注意:在使用前你应该检查一下这个视图对象是否非空并且这个对象的类型是否合适。由此引伸出,如果该对象不能被转换并显示正确的数据,这个方法就会调用getChildView(int, int, boolean, View, ViewGroup)来创建一个视图(View)对象。 parent返回的视图(View)对象始终依附于的视图组。 返回值 指定位置上的子元素返回的视图对象 public intgetChildrenCount(int groupPosition) 获取指定组中的子元素个数 参数 groupPosition组位置(决定返回哪个组的子元素个数) 返回值 返回组中的子元素个数 public CursorgetCursor() 返回当前适配器绑定的Cursor对象。 返回值 Cursor对象。 public FiltergetFilter() 返回一个可以通过一种过滤模式来约束数据的过滤器。 这个方法通常在Adapter类中实现。 返回值 返回一个用来限制数据的过滤器(Filter)对象。 public FilterQueryProvidergetFilterQueryProvider() 返回一个提供过滤的查询过滤器。若过滤器为null,则不再过滤。 返回值 返回当前过滤器对象,如果不存在返回null。 参考 getFilterQueryProvider() public CursorgetGroup(int groupPosition) 获取指定组中的数据 参数 groupPosition组位置 返回值 返回组中的数据,也就是该组中的子元素数据。 public intgetGroupCount() 获取组的个数 返回值 组的个数 public longgetGroupId(int groupPosition) 获取指定组的ID,这个组ID必须是唯一的。联合ID(参见getCombinedGroupId(long))在所有条目(所有组和所有元素)中也是唯一的。 参数 groupPosition 组位置 返回值 返回组ID public ViewgetGroupView(int groupPosition, boolean isExpanded, ViewconvertView, ViewGroup parent) 获取显示指定组的视图对象。这个方法仅返回关于组的视图对象,要想获取子元素的视图对象,就需要调用getChildView(int, int, boolean, View, ViewGroup)。 参数 groupPosition组位置(决定返回哪个视图) isExpanded该组是展开状态还是伸缩状态 convertView重用已有的视图对象。注意:在使用前你应该检查一下这个视图对象是否非空并且这个对象的类型是否合适。由此引伸出,如果该对象不能被转换并显示正确的数据,这个方法就会调用getGroupView(int, boolean, View, ViewGroup)来创建一个视图(View)对象。 parent返回的视图对象始终依附于的视图组。 返回值 返回指定组的视图对象 public booleanhasStableIds() 组和子元素是否持有稳定的ID,也就是底层数据的改变不会影响到它们。 返回值 返回一个Boolean类型的值,如果为TRUE,意味着相同的ID永远引用相同的对象。 public booleanisChildSelectable(int groupPosition, int childPosition) 是否选中指定位置上的子元素。 参数 groupPosition组位置(该组内部含有子元素) childPosition子元素位置 返回值 是否选中子元素 public voidnotifyDataSetChanged(boolean releaseCursors) 通知数据集已改变,该方法还为任何带有缓存功能的游标提供不用释放资源的可选功能。 参数 releaseCursors是否释放任何带有缓冲功能的游标资源 public voidnotifyDataSetChanged() 该方法内部实现了在每个观察者上面调用onChanged事件。每当发现数据集有改变的情况,或者读取到数据的新状态时,就会调用此方法。 public voidnotifyDataSetInvalidated() 该方法内部实现了在每个观察者上面调用onInvalidated事件。每当发现数据集监控有改变的情况,比如该数据集不再有效,就会调用此方法。 public voidonGroupCollapsed(int groupPosition) 当指定组收缩状态的时候调用此方法。 参数 groupPosition指定组收缩状态 public CursorrunQueryOnBackgroundThread(CharSequence constraint) 执行含指定约束的查询。此查询依赖于适配器的过滤器。查询是由FilterQueryProvider提供。如果没有指定FilterQueryProvider,当前cursor不过滤只返回。该方法会通过changeCursor(Cursor)方法返回一个Cursor对象,并且关闭掉先前的Cursor对象。这个方法始终在后台线程执行,而不是在应用程序的主线程(或是UI线程)中运行。规定:当参数constraint为null或为空时,该方法返回原始结果。 参数 constraint当某个查询需要过滤功能,使用参数constraint作为约束条件。 返回值 返回含有新的查询结果的Cursor。 参考 getFilter() getFilterQueryProvider() setFilterQueryProvider(android.widget.FilterQueryProvider) public voidsetChildrenCursor(int groupPosition, Cursor childrenCursor) 为指定组子元素设置游标(Cursor),并关闭已存在的游标。这个方法是非常有用的,当进行异步查询操作的时候用来避免UI发生阻塞的情况。 参数 groupPosition组位置(组中的哪个子元素要设置游标对象) childrenCursor组子元素的游标(Cursor) public voidsetFilterQueryProvider(FilterQueryProvider filterQueryProvider) 设置一个过滤器,用来过滤当前的Cursor对象。当这个适配器需要进行过滤操作时,runQuery(CharSequence)方法被调用。 参数 filterQueryProvider 过滤生成器对象,设置为null时,就相当于移除了该生成器。 参考 getFilterQueryProvider() runQueryOnBackgroundThread(CharSequence) public voidsetGroupCursor(Cursor cursor) 设置组游标对象。 参数 cursor设置组游标对象,并关闭已存在的游标对象。 五、受保护方法 protected abstract voidbindChildView(View view, Context context, Cursor cursor,boolean isLastChild) 用游标(Coursor)的方式将子元素数据绑定在一个已存在的视图(View)对象上。 参数 view 已存在的视图(View)对象,也就是之前new出来的。 context应用程序上下文对象 cursor获取数据的游标对象,它已经移动到正确的位置 IsLastChild子元素是否处于组中的最后一个 protected abstract voidbindGroupView(View view, Context context, Cursor cursor,boolean isExpanded) 用游标(Coursor)的方式将组数据绑定在一个已存在的视图(View)对象上。 参数 view 已存在的组视图(View)对象,也就是早先new出来的。 context应用程序上下文对象,它已经移动到正确的位置 cursor获取数据的游标对象 isExpanded该组是展开状态还是伸缩状态 protected abstract CursorgetChildrenCursor(Cursor groupCursor) 获取指定组中的子元素游标对象。子类必须实现这个方法,用于在指定组中返回子元素数据。 如果你想用异步查询的方式避免UI阻塞的情况发生,可能会返回null或是在稍后调用setChildrenCursor(int, Cursor)。 你有责任在Activity生命周期中管理这个游标对象,有一个非常好的思路:使用managedQuery(Uri, String[], String, String[], String)来管理它们。在某些情况下,适配器本身会使游标停止工作,但这个特例不会总是出现,所以我们要确保有效地管理好游标对象。 参数 groupCursor组游标对象,决定返回哪个组中的子元素游标对象。 返回值 返回指定组中的子元素游标对象或者为null。 protected abstract ViewnewChildView(Context context, Cursor cursor, booleanisLastChild, ViewGroup parent) 创建一个新的子元素视图并持有指向数据的游标cursor。 参数 context应用程序上下文对象 cursor获取数据的游标对象,它已经移动到正确的位置 IsLastChild子元素是否处于组中的最后一个 parent新视图(View)所依附于的父对象。 protected abstract ViewnewGroupView(Context context, Cursor cursor, booleanisExpanded, ViewGroup parent) 创建一个新的组视图并持有组中指向数据的游标cursor。 参数 context应用程序上下文对象 cursor获取数据的游标对象,它已经移动到正确的位置 isExpanded该组是否展开状态 parent 新视图 (View) 所依附于的父对象。 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582373,如需转载请自行联系原作者

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

android中文api(85)——HorizontalScrollView

正文 一、结构 public classHorizontalScrollView extendsFrameLayout java.lang.Object android.view.View android.view.ViewGroup android.widget.FrameLayout android.widget.HorizontalScrollView 二、概述 用于布局的容器,可以放置让用户使用滚动条查看的视图层次结构,允许视图结构比手机的屏幕大。HorizontalScrollView是一种FrameLayout(框架布局),其子项被滚动查看时是整体移动的,并且子项本身可以是一个有复杂层次结构的布局管理器。一个常见的应用是子项在水平方向中,用户可以滚动显示顶层水平排列的子项(items)。 HorizontalScrollView不可以和ListView同时用,因为ListView有自己的滚动条设置。最重要的是,如果在需要显示很大的list的情况下,两者同时用则会使ListView在一些重要的优化上失效。出现这种失效的原因在于,HorizontalScrollView会强迫ListView用HorizontalScrollView本身提供的空间容器(infinite container)来显示完整的列表。 类似的情况,TextView也有自己的滚动条,所以不需要ScrollView。但这两者是可以同时使用的,使用的结果会是在一个更大的容器里显示文本视图。 HorizontalScrollView 只支持水平方向的滚动显示。 三、公共方法 public voidaddView(View child) 添加一个子视图。若这个子视图没有被设置布局参数,则使用ViewGroup的缺省参数。 参数 child要添加的子视图 public voidaddView(View child, int index) 添加一个子视图。若这个子视图没有被设置布局参数,则使用ViewGroup的缺省参数。 参数 child要添加的子视图 index子视图要加入的位置 public voidaddView(View child, int index, ViewGroup.LayoutParams params) 添加一个带有指定布局参数的子视图。 参数 child要添加的子视图 index子视图要加入的位置 params 子视图的布局参数 public voidaddView(View child, ViewGroup.LayoutParams params) 添加一个带有指定布局参数的子视图。 参数 child要添加的子视图 params 子视图的布局参数 public booleanarrowScroll(int direction) 响应点击左右箭头时对滚动条的处理。 参数 direction The direction corresponding to the arrow key that was pressed箭头按键所表示的方向 返回值 若此事件成功完成,则返回true;否则返回false。 public voidcomputeScroll() 被父视图调用,用于必要时候对其子视图的值(mScrollX和mScrollY)进行更新。典型的情况如:父视图中某个子视图使用一个Scroller对象来实现滚动操作,会使得此方法被调用。 public booleandispatchKeyEvent(KeyEvent event) 按照可以获得焦点的顺序(从视图树的顶端到当前获得焦点的视图),分派一个按键事件给下一个视图。若此视图为焦点视图,事件将会分派给它自己。否则它将按照顺序,分派给下一个节点。此方法同时触动所有按键监听器。 参数 event被分派的事件. 返回值 若事件被处理,则返回true;否则为false public voiddraw(Canvas canvas) 手动绘制视图(及其子视图)到指定的画布(Canvas)。这个视图必须在调用这个函数之前做好了整体布局。。当实现一个视图时,不需要继承这个方法;相反,你应该实现onDraw(Canvas)方法。 参数 canvas绘制视图的画布 public booleanexecuteKeyEvent(KeyEvent event) 需要通过按键事件来实现滚动操作时,可以调用此方法。效果类似于由视图树型结构分派事件。 参数 event需要执行的事件 返回值 若事件被处理,则返回true;否则为false public voidfling(int velocityX) 滚动视图的fling手势。 参数 velocityX方向的初始速率。正值表示手指/光标向屏幕右边滑动,而内容相对向左滚动。 public booleanfullScroll(int direction) 处理按下"home/end"快捷键之后的滚动响应。此方法会将视图移左或移右,同时将焦点赋予移动后可视的最左或最右的组件。如果没有任何组件适合得到焦点,此scrollview将收回焦点。 参数 direction滚动方向:FOCUS_LEFT表示向视图的左边移动,FOCUS_RIGHT表示向视图的右边移动 返回值 若此方法消耗(consumed)了按键事件则返回true,否则返回false。 public intgetMaxScrollAmount() 返回值 按左右箭头时视图可以滚动的最大值。 public booleanisFillViewport() 表示此ScrollView的内容是否被拉伸以适应视口(viewport)的大小。 返回值 若内容填充了视口则返回true,否则返回false。 public booleanisSmoothScrollingEnabled() 返回值 按箭头方向滚动时,是否显示滚动的平滑效果。 public booleanonInterceptTouchEvent(MotionEvent ev) 使用此方法可以拦截所有触摸屏动作引发的事件。这意味着你可以监视分派给子项的事件,并且可以拿到任何当前手势的所有权。 使用此方法需谨慎。因为它与View.onTouchEvent(MotionEvent)有相当复杂的交互影响。这两者都必须同时正确地实现。事件将按以下顺序来被方法接收: 1.接收到down事件 2.事件将被视图组的一个子视图处理,或者被传递给自己的onTouchEvent()方法处理;这意味着你必须实现onTouchEvent(),并且返回true,这样才可以接着接受到其他的手势(而不是寻求一个父视图来处理它)。onTouchEvent()返回true后,你将不再接受到onInterceptTouchEvent()的任何事件,同时所有对触摸动作的处理必须像往常一样在onTouchEvent()中进行。 3.如果返回false,则接下来的每个事件(所有的up事件,包含最后一个up)将会首先被传递到这里,然后到目标对象view的onTouchEvent()。 4.如果返回ture,你将不会接收到以下任何事件:目标view将会接收到相同的事件,但是带着ACTION_CANCEL的动作。所有在此之后的事件将会被传递到你的onTouchEvent()方法中,并且不再在这里出现。 参数 ev沿着树型结构往下分派的动作事件 返回值 若将动作事件从子视图中截获并通过onTouchEvent()将他们分派给当前ViewGroup,则返回true。当前目标将收到一个ACTION_CANCEL事件,并且不再会有其他消息被传递到这里。 public booleanonTouchEvent(MotionEvent ev) 此方法用于处理触摸屏的动作事件。 参数 ev动作事件 返回值 若事件被成功处理,则返回true;否则返回false public booleanpageScroll(int direction) 处理按下"page up/down"快捷键之后的滚动响应。此方法会将视图往左或往右滚动一个页面的距离,同时将焦点赋予移动后可视的最左或最右的组件。如果没有任何组件适合得到焦点,此scrollview将收回焦点。 参数 direction滚动方向:FOCUS_LEFT表示向视图的左边移动一个页面FOCUS_RIGHT表示向视图的右边移动一个页面 返回值 若此方法处理(consumed)了按键事件则返回true,否则返回false。 public voidrequestChildFocus(View child, View focused) 当父视图的一个子视图要获得焦点时,调用此方法。 参数 child要获得焦点的子视图。此视图将包含焦点视图,但其本身不必为焦点。 focused 事实上拥有焦点的子视图的下层视图。 public booleanrequestChildRectangleOnScreen(View child, Rect rectangle, boolean immediate) 当组里的某个子视图需要被定位在屏幕的某个矩形范围时,调用此方法。重载此方法的ViewGroup可确认以下几点: *子项目将是组里的直系子项 *矩形将在子项目的坐标体系中 重载此方法的ViewGroup应该支持以下几点: *若矩形已经是可见的,则没有东西会改变 *为使矩形区域全部可见,视图将可以被滚动显示 参数 child发出请求的子视图 rectangle子项目坐标系内的矩形,即此子项目希望在屏幕上的定位 immediate设为true,则禁止动画和平滑移动滚动条 返回值 进行了滚动操作的这个组(group),是否处理此操作 public voidrequestLayout() 当出现使视图布局失效的改变时,调用此方法。它将规划一个视图树的布局路径。 public voidscrollTo(int x, int y) 设置视图滚动后的位置。这将引起onScrollChanged(int,int,int,int)的调用,同时使此视图失效。 此版本同时将滚动锁定于子视图的范围。 参数 x要滚动到的x位置 y要滚动到的y位置 public voidsetFillViewport(boolean fillViewport) 设置此滚动视图是否将内容宽度拉伸来适应视口(viewport)。 参数 fillViewport设置为true表示将拉伸内容宽度;否则会设置为false。 public voidsetOverScrollMode(int mode) 为视图设置over-scroll模式。有效的over-scroll模式有OVER_SCROLL_ALWAYS(缺省值),OVER_SCROLL_IF_CONTENT_SCROLLS(只允许当视图内容大过容器时,进行over-scrolling)和OVER_SCROLL_NEVER。只有当视图可以滚动时,此项设置才起作用。 参数 mode视图的新over-scroll模式值 public voidsetSmoothScrollingEnabled(boolean smoothScrollingEnabled) 设置是否呈现按下箭头后的平滑滚动效果(动画效果)。 参数 smoothScrollingEnabled设置是否呈现平滑滚动效果 public final voidsmoothScrollBy(int dx, int dy) 类似scrollBy(int, int),但是呈现平滑滚动,而非瞬间滚动(译者注:瞬间滚动——指不显示滚动过程,直接显示滚动后达到的位置)。 参数 dx要滚动的X轴像素差值(译者注:横向像素差值) dy要滚动的Y轴像素差值(译者注:纵向像素差值) public final voidsmoothScrollTo(int x, int y) 类似scrollTo(int, int),但是呈现平滑滚动,而不是瞬间滚动。 参数 x滚动要到达位置的X轴值 y 滚动要到达位置的 Y 轴值 四、受保护方法 protected intcomputeHorizontalScrollOffset() 计算水平方向滚动条的滑块的偏移值。此值用来计算滚动时滑块的位置。 偏移值的范围可以以任何单位表示,但必须与computeHorizontalScrollRange()和computeHorizontalScrollExtent()的单位一致。 缺省的偏移值为视图滚动的偏移差值。 返回值 滚动条滑块在水平方向上的偏移值 protected intcomputeHorizontalScrollRange() scroll view的可滚动水平范围是所有子视图的宽度总合。 返回值 水平滚动条表示的全部水平滚动范围 protected intcomputeScrollDeltaToGetChildRectOnScreen(Rect rect) 计算X方向滚动的总合,以便在屏幕上显示子视图的完整矩形(或者,若矩形宽度超过屏幕宽度,至少要填满第一个屏幕大小)。 参数 rect矩形 返回值 滚动差值 protected floatgetLeftFadingEdgeStrength() 返回左渐变边缘的强度或密集度。强度的值介于0.0(无渐变)到1.0(全渐变)之间。缺省实现只返回0.0或1.0,而不返回中间值。子类必须重载次方法来给滚动动作提供更平滑的渐变过程。 返回值 左渐变的强度,即介于0.0f和1.0f之间的浮点值 protected floatgetRightFadingEdgeStrength() 返回右渐变边缘的强度或密集度。强度的值介于0.0(无渐变)到1.0(全渐变)之间。缺省实现只返回0.0或1.0,而不返回中间值。子类必须重载此方法来给滚动动作提供更平滑的渐变过程。 返回值 右渐变的强度,即介于0.0f和1.0f之间的浮点值 protected voidmeasureChild(View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec) 要求子视图测量自身,需要将视图的MeasureSpec和其附加内容同时考虑在内。getChildMeasureSpec在其中承担了重要角色,它计算出MeasureSpec,并传递给子视图。 参数 child要测量的子视图 parentWidthMeasureSpec此视图的宽度要求 parentHeightMeasureSpec此视图的高度要求 protected voidmeasureChildWithMargins(View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed) 要求子视图测量自身,需要将视图的MeasureSpec、附加内容和边缘部分同时考虑在内。子项必须有MarginLayoutParams(边缘布局参数)。getChildMeasureSpec在其中承担了重要角色,它计算出MeasureSpec,并传递给子视图。 参数 child要测量的子视图 parentWidthMeasureSpec此视图的宽度要求 widthUsed被父视图(也可能是其他子视图)占用的横向额外空间 parentHeightMeasureSpec此视图的高度要求 heightUsed被父视图(也可能是其他子视图)占用的纵向额外空间 protected voidonLayout(boolean changed, int l, int t, int r, int b) 当此视图要给每个子视图赋值大小和位置时,layout会调用此方法。子项的派生类应当重载此方法,并且调用各个子项的layout。 参数 changed此视图有新的大小或位置 l左边界位置,相对于父视图 t上边界位置,相对于父视图 r右边界位置,相对于父视图 b下边界位置,相对于父视图 protected voidonMeasure(int widthMeasureSpec, int heightMeasureSpec) 调用此方法来确定本身和所包含内容的大小(宽度和高度)。此方法被measure(int,int)唤起,而且必须被子类重载以得到所包含内容的确切大小。 注意:当重载此方法时,必须调用setMeasureDimension(int,int)来保存View的大小。如果没有做到,将会引发一个measure(int,int)抛出的IllegalStateException(非法状态错误)。超类onMeasure(int,int)可以被调用。 编写基类的确认大小的方法,缺省情况下是根据其背景大小来确认,除非MeasureSepc允许有更大的高度或宽度。子类必须重载onMeasure(int,int)以得到对其内容大小的更准确的测量。 若此方法被重载,它的子类需要确保其高度和宽度至少达到View所规定的最小值(可通过getSuggestedMinimumHeight()和getSuggestedMinimumWidth()得到)。 参数 widthMeasureSpec受上一层大小影响下的对水平空间的要求。可参看View.MeasureSpec。 heightMeasureSpec受上一层大小影响下的对垂直空间的要求。可参看View.MeasureSpec。 protected voidonOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) 被overScrollBy(int, int, int, int, int, int, int, int, boolean)调用,来对一个over-scroll操作的结果进行响应。 参数 scrollX新的X滚动像素值 scrollY新的Y滚动像素值 clampedX当scrollX被over-scroll的边界限制时,值为true clampedY当scrollY被over-scroll的边界限制时,值为true protected booleanonRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) 当在某个scroll view的子视图中寻找焦点时,需要小心不能让屏幕之外的组件得到焦点。这比缺省ViewGroup的实现代价更高,否则此行为被设为缺省。 参数 direction值可以为FOCUS_UP,FOCUS_DOWN,FOCUS_LEFT或FOCUS_RIGHT previouslyFocusedRect能够给出一个较好的提示的矩形(当前视图的坐标系统)表示焦点从哪里得来。如果没有提示则为null。 返回值 是否取到了焦点。 protected voidonSizeChanged(int w, int h, int oldw, int oldh) 当View的大小改变时此方法被调用。如果View是刚刚被加入,则视之前的值为0。 参数 wView的当前宽度 hView的当前高度 oldwView大小改变之前的宽度 oldhView大小改变之前的高度 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582426,如需转载请自行联系原作者

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

Android 中文 API (101) —— AsyncTask

正文 一、结构 public abstract classAsyncTask extendsObject java.lang.Object android.os.AsyncTask<Params, Progress, Result> 二、类概述 AsyncTask能够适当地、简单地用于UI线程。 这个类不需要操作线程(Thread)就可以完成后台操作将结果返回UI。 异步任务的定义是一个在后台线程上运行,其结果是在UI线程上发布的计算。 异步任务被定义成三种泛型类型:Params,Progress和Result;和四个步骤:begin,doInBackground,processProgress和end。 三、用法 AysncTask 必须被继承使用。子类至少 覆盖 一个方法 ( doInBackground(Params...) ) ,最经常 覆盖 另一个 ( onPostExecute(Result) .) 下面是一个子类的例子: private class DownloadFilesTask extends AsyncTask < URL,Integer,Long > { protected LongdoInBackground(URL...urls){ int count = urls.length; long totalSize = 0 ; for ( int i = 0 ;i < count;i ++ ){ totalSize += Downloader.downloadFile(urls[i]); publishProgress(( int )((i / ( float )count) * 100 )); } return totalSize; } protected void onProgressUpdate(Integer...progress){ setProgressPercent(progress[ 0 ]); } protected void onPostExecute(Longresult){ showDialog( " Downloaded " + result + " bytes " ); } } 一旦创建,一个任务执行起来就非常简单: new DownloadFilesTask().execute(url1,url2,url3); 四、AsyncTask的泛型类型 这三个类型被用于一个异步任务,如下: 1.Params,启动任务执行的输入参数 2.Progress,后台任务执行的百分比 3.Result,后台计算的结果类型 在一个异步任务里,不是所有的类型总被用。假如一个类型不被使用,可以简单地使用Void类型: private class MyTask extends AsyncTask < Void,Void,Void > {...} 五、4个步骤 当一个异步任务被执行,任务经过四各步骤: 1.onPreExecute(),在UI线程上调用任务后立即执行。这步通常被用于设置任务,例如在用户界面显示一个进度条。 2.doInBackground(Params...),后台线程执行onPreExecute()完后立即调用,这步被用于执行较长时间的后台计算。异步任务的参数也被传到这步。计算的结果必须在这步返回,将传回到上一步。在执行过程中可以调用publishProgress(Progress...)来更新任务的进度。 3.onProgressUpdate(Progress...),一次呼叫publishProgress(Progress...)后调用 UI线程。执行时间是不确定的。这个方法用于当后台计算还在进行时在用户界面显示进度。例如:这个方法可以被用于一个进度条动画或在文本域显示记录。 4.onPostExecute(Result),当后台计算结束时,调用 UI线程。后台计算结果作为一个参数传递到这步。 六、线程规则 有一些线程规则必须去遵守,这个类才会正确的工作: 任务实例必须创建在 UI线程 execute(Params...)必须在UI线程上调用 不要手动调用onPreExecute(),onPostExecute(Result),doInBackground(Params...),onProgressUpdate(Progress...) 这个任务只执行一次(如果执行第二次将会抛出异常) 七、内部类 enum AsyncTask.Status 表示任务的当前状态 八、构造函数 public AsyncTask () 创建一个新的异步任务。这个构造函数必须在UI线程上调用。 九、公共方法 public final booleancancel(boolean mayInterruptIfRunning) 尝试取消这个任务的执行,如果这个任务已经结束或者已经取消或者不能被取消或者某些其他原因,那么将导致这个操作失败,当调用此方法时,此方法执行成功并且这个任务还没有执行,那么此任务将不再执行。如果任务已经开始,这时执行此操作传入的参数mayInterruptIfRunning为true,执行此任务的线程将尝试中断该任务。 参数 mayInterruptIfRunning如果为true则正在执行的线程将会中断,如果false,则会允许正在执行的任务线程执行完毕。 返回值 如果此任务不能取消返回false,如果已经正常的执行完毕,返回true 参见 isCancelled() onCancelled() public final AsyncTask<Params, Progress, Result>execute(Params... params) 用指定的参数来执行此任务,这个方法将会返回此任务本身,所以调用者可以拥有此任务的引用。此方法必须在UI线程中调用 参数 params 任务参数 返回值 AsyncTask的实例 异常 IllegalStateException如果getStatus()返回的是RUNNING或者FINISHED public final Resultget() 等待计算结束并返回结果 返回值 计算结果 异常 CancellationException如果计算取消 ExecutionException如果计算抛出异常 InterruptedException当等待时当前线程抛出异常 public final Resultget(long timeout, TimeUnit unit) 等待计算结束并返回结果,最长等待时间为:timeOut(超时时间). 参数 timeout计算等待超时时间 unit超时的时间单位 返回值 计算结果 异常 CancellationException如果计算取消 ExecutionException如果计算抛出异常 InterruptedException当等待时当前线程抛出异常 TimeoutException等待时间超时 public final AsyncTask.StatusgetStatus() 获得任务的当前状态 返回值 当前状态 public final booleanisCancelled() 如果在任务正常结束之前取消任务成功则返回true,否则返回false 返回值 如果任务正常结束之前取消任务成功返回true。 参见 cancel(boolean) 十、受保护方法 protected abstract ResultdoInBackground(Params... params) 覆盖此方法在后台线程执行计算,此方法中的参数是此任务的execute(Params...)方法的调用这传递的参数,此方法可以调用publishProgress(Progress...)在UI线程中来更新数据 参数 params 此任务的参数 返回值 返回一个由此任务子类定义的结果Result 参见 onPreExecute() onPostExecute(Result) publishProgress(Progress...) protected voidonCancelled() 此方法在UI线程中当cancel(boolean)被调用后调用 参见 cancel(boolean) isCancelled() protected voidonPostExecute(Result result) 此方法在UI线程中doInBackground(Params...)。方法调用之后调用,此方法中的参数的值是doInBackground(Params...)的返回值或者当此任务已经被取消或有异常发生时此参数值为空null 参数 result由doInBackground(Params...)计算出的操作的结果。 参见 onPreExecute() doInBackground(Params...) protected voidonPreExecute() 在方法doInBackground(Params...)调用之前调用 参见 onPostExecute(Result) doInBackground(Params...) protected voidonProgressUpdate(Progress... values) 该方法在UI线程中publishProgress(Progress...)被调用之后调用,该方法中的参数values是已经被传递到publishProgress(Progress...)中的参数 参数 values进度表示值 参见 publishProgress(Progress...) doInBackground(Params...) protected final voidpublishProgress(Progress... values) 当调用doInBackground(Params...)在后台执行计算时会调用该方法,每当在UI线程中调用此方法时将触发onProgressUpdate(Progress...)方法的执行 参数 values将进度值更新到UI 参见 onProgressUpdate(Progress...) doInBackground(Params...) 十一、补充 文章精选 Android AsyncTask理解 TabActivity下在AsyncTask中使用ProgressDialog存在问题的解决方法 小心,AsyncTask不是萬能的[blogspot] 十二、公告 内部类、内部接口由于内容较少均不再单独发布。 结束 随着春节的结束,翻译组工作重新回到正轨,感谢大家的关注与支持! —————————————————————————————————————————— AsyncTask.Status 一、结构 public static final enumAsyncTask.Status extendsEnum<E extends Enum<E>> java.lang.Object java.lang.Enum<E extends java.lang.Enum<E>> android.os.AsyncTask.Status 二、类概述 标志任务的当前状态,每个状态在任务的生命周期中只会出现一次。 三、枚举值 public static final AsyncTask.StatusFINISHED 标志onPostExecute(Result)方法已经结束 public static final AsyncTask.StatusPENDING 标志任务还没有执行 public static final AsyncTask.StatusRUNNING 标志任务正在执行 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582388,如需转载请自行联系原作者

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

Android 中文API (94) —— MediaController

正文 一、结构 public classMediaController extendsFrameLayout java.lang.Object android.view.View android.view.ViewGroup android.widget.FrameLayout android.widget.MediaController 二、类概述 一个包含媒体播放器(MediaPlayer)控件的视图。包含了一些典型的按钮,像"播放(Play)/暂停(Pause)", "倒带(Rewind)", "快进(Fast Forward)"与进度滑动器(progress slider)。它管理媒体播放器(MediaController)的状态以保持控件的同步。 通过编程来实例化使用这个类。这个媒体控制器将创建一个具有默认设置的控件,并把它们放到一个窗口里漂浮在你的应用程序上。具体来说,这些控件会漂浮在通过setAnchorView()指定的视图上。如果这个窗口空闲3秒那么它将消失,直到用户触摸这个视图的时候重现。 当媒体控制器是在一个XML布局资源文件中创建的时候,像show()和hide()这些函数是无效的。媒体播放器将根据这些规则去显示和隐藏: *在调用setPrevNextListeners()函数之前,"previous"和"next"按钮都是隐藏的。 * 如果setPrevNextListeners() 函数被调用但传入的监听器参数是null ,那么"previous" 和"next" 按钮是可见的但是处于禁用状态。 * "rewind" 和 "fastforward" 按钮是显示的,如果不需要可以使用构造函数 MediaController(Context, boolean) 将 boolean 设置为 false 。 三、公共方法 public booleandispatchKeyEvent(KeyEvent event) 在焦点路径上分发按钮事件到下一个视图。该路径从视图树的顶端遍历到当前获得焦点的视图。如果当前视图已获得焦点,就分发给自身。否则,就分发到下一个节点的焦点路径上。这个方法也可以激发任何一个按键消息监听器。 参数 event被分发的事件 返回值 如果这个事件被处理了返回true,否则返回false。 public voidhide() 从屏幕中移除控制器。 public booleanisShowing() (译者注:判断媒体控制器是否处于可见状态。) public voidonFinishInflate() XML文件加载视图完成时调用。这个函数在加载的最后阶段被调用,所有的子视图已经被添加。 即使子类重写了onFinishInflate方法,也应该始终确保调用父类方法,以便我们调用。 public booleanonTouchEvent(MotionEvent event) 实现这个方法来处理触摸屏幕引发的事件。 参数 event动作事件 返回值 如果这个事件被处理了返回true,否则返回false。 public booleanonTrackballEvent(MotionEvent ev) 实现这个方法处理轨迹球的动作事件,轨迹球相对运动的最后一个事件能用MotionEvent.getX()和MotionEvent.getY()函数获取。这些都是标准化的,用1表示用户按下一个DPAD按键。(因此他们将经常使用小数值表示,为轨迹球提供更多的的细微运动信息)(译者注:DPAD按键事件: KeyEvent.KEYCODE_DPAD_CENTER(居中)、KeyEvent.KEYCODE_DPAD_DOWN(向下)、KeyEvent.KEYCODE_DPAD_LEFT(向左)、KeyEvent.KEYCODE_DPAD_RIGHT(向右)、KeyEvent.KEYCODE_DPAD_UP(向上)作比较。分别表示居中、下移、左移、右移、上移的操作。相关链接:onTrackBallEvent方法简介) 参数 ev动作事件 返回值 如果这个事件被处理了返回true,否则返回false。 public void setAnchorView (View view) 设置这个控制器绑定(anchor/锚)到一个视图上。例如可以是一个VideoView对象,或者是你的activity的主视图。 参数 view 将视图来绑定控制器时可见 public voidsetEnabled(boolean enabled) 设置视图对象的有效状态。这也可以改变子类的有效状态。 参数 enabled如果要让这个视图对象可用就设置为true,否则设置为false。 public voidsetMediaPlayer(MediaController.MediaPlayerControl player) (译者注:把这个媒体控制器设置到VideoView对象上。) public voidsetPrevNextListeners(View.OnClickListener next, View.OnClickListener prev) (译者注:设置"previous"和"next"按钮的监听器函数。) public voidshow(int timeout) 在屏幕上显示这个控制器。它将在闲置’超时(timeout)’毫秒到达后自动消失。 参数 timeout这个参数以毫秒为单位。如果设置为0将一直显示到调用hide()函数为止。 public voidshow() 在屏幕上显示这个控制器。它将在 3 秒以后自动消失。 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582407,如需转载请自行联系原作者

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

Android中文API (109) —— SimpleCursorTreeAdapter

正文 一、结构 public abstract classSimpleCusrorTreeAdapter extends ResourceCusorTreeAdpater java.lang.Object android.widget.BaseExpandableListAdapter android.widget.CursorTreeAdapter android.widget.ResourceCusorTreeAdapter android.widget.SimpleCursorTreeAdapter 二、概述 这是一个用起来很方便的适配器类,它主要将Cursor与在XML文件中定义的TextView或ImageView进行映射。比如,你想设定要展示三列,那么当做好绑定之后,视图就会展示你设定好的那些列;当然了,视图的外观是定义在XML文件里面的,你只需用这个类与视图做好绑定就可以了。(译者注:Android推荐我们尽可能的将组视图和子视图分离开,也就是说不要把整体定义在一个布局文件当中。)与视图绑定有两个阶段。第一阶段:如果使用SimpleCursorTreeAdapter.ViewBinder时,那么就会调用setViewValue(android.view.View, android.database.Cursor, int)方法。该方法返回true就说明绑定成功,否则返回false,这就到了第二阶段,SimpleCursorAdapter内部开始自行绑定,过程是这样的,若绑定到TextView上,调用setViewText(TextView, String);若绑定到ImageView上,调用setViewImage(ImageView, String),如果视图不是TextView或ImageView则抛出IllegalStateException异常。 三、内部类 public interfaceSimpleCursorTreeAdapter.ViewBinder 这个内部接口可以在外部通过SimpleCursorTreeAdapter.ViewBinder的方式进行Cursor与View的绑定。 四、构造函数 publicSimpleCursorTreeAdapter(Context context, Cursor cursor, int collapsedGroupLayout, int expandedGroupLayout, String[] groupFrom, int[] groupTo, int childLayout, int lastChildLayout, String[] childFrom, int[] childTo) 构造函数。 参数 context上下文,多指ExpandableListView的上下文 cursor数据库游标 collapsedGroupLayout布局资源文件标识ID,其定义的是收缩时的ExpandableListView布局样式,并且内部至少要包含参数“groupTo”中指定的视图ID。 expandedGroupLayout布局资源文件标识ID,其定义的是展开时的ExpandableListView布局样式,并且内部至少要包含参数“groupTo”中指定的视图ID。 groupFrom列名列表,显示ExpandableListView的组节点。 groupTo展示参数“groupFrom”中的列,也就是说ExpandableListView中的视图显示的是参数“groupFrom”的列值,它们应该都是TextView或是ImageView。 childLayout布局资源文件标识ID,其定义的是子视图的布局样式(不包括最后一个子视图),内部至少要包含参数“childTo”中指定的视图ID。lastChildLayout布局资源文件标识ID,其定义的是最后一个子视图的布局样式,内部至少要包含参数“childTo”中指定的视图ID。 lastChildLayout布局资源文件标识ID,其定义的是最后一个子视图的布局样式,内部至少要包含参数“childTo”中指定的视图ID。lastChildLayout布局资源文件标识ID,其定义的是最后一个子视图的布局样式,内部至少要包含参数“childTo”中指定的视图ID。 childFrom列名列表,显示ExpandableListView的子节点。 childTo展示参数“childFrom”中的列,也就是说ExpandableListView中的视图显示的是参数“childFrom”的列值,它们应该都是TextView或是ImageView。 publicSimpleCursorTreeAdapter(Context context, Cursor cursor, int collapsedGroupLayout, int expandedGroupLayout, String[] groupFrom, int[] groupTo, int childLayout, String[] childFrom, int[] childTo) 构造函数。(译者注:该构造函数只是少了一个参数lastChildLayout) 参数 context上下文,多指ExpandableListView的上下文 cursor数据库游标 collapsedGroupLayout布局资源文件标识ID,其定义的是收缩时的ExpandableListView布局样式,并且内部至少要包含参数“groupTo”中指定的视图ID。 expandedGroupLayout布局资源文件标识ID,其定义的是展开时的ExpandableListView布局样式,并且内部至少要包含参数“groupTo”中指定的视图ID。 groupFrom列名列表,显示ExpandableListView的组节点。 groupTo展示参数“groupFrom”中的列,也就是说ExpandableListView中的视图显示的是参数“groupFrom”的列值,它们应该都是TextView或是ImageView。 childLayout布局资源文件标识ID,其定义的是子视图的布局样式(不包括最后一个子视图),内部至少要包含参数“childTo”中指定的视图ID。lastChildLayout布局资源文件标识ID,其定义的是最后一个子视图的布局样式,内部至少要包含参数“childTo”中指定的视图ID。 childFrom列名列表,显示ExpandableListView的子节点。 childTo展示参数“childFrom”中的列,也就是说ExpandableListView中的视图显示的是参数“childFrom”的列值,它们应该都是TextView或是ImageView。 publicSimpleCursorTreeAdapter(Context context, Cursor cursor, int groupLayout, String[] groupFrom, int[] groupTo, int childLayout, String[] childFrom, int[] childTo) 构造函数。 参数 context上下文,多指ExpandableListView的上下文 cursor数据库游标 groupLayout 显示组元素的资源文件。该资源文件定义了如何显示组元素。该布局文件必须至少包括groupTo中所定义的View。(即groupTo中的View id数组必须都在该布局文件中找到) groupFrom列名列表,显示ExpandableListView的组节点。 groupTo展示参数“groupFrom”中的列,也就是说ExpandableListView中的视图显示的是参数“groupFrom”的列值,它们应该都是TextView或是ImageView。 childLayout布局资源文件标识ID,其定义的是子视图的布局样式(不包括最后一个子视图),内部至少要包含参数“childTo”中指定的视图ID。lastChildLayout布局资源文件标识ID,其定义的是最后一个子视图的布局样式,内部至少要包含参数“childTo”中指定的视图ID。 childFrom列名列表,显示ExpandableListView的子节点。 childTo 展示参数“ childFrom ”中的列,也就是说 ExpandableListView 中的视图显示的是参数 “ childFrom ”的列值, 它们应该都是 TextView 或是 ImageView 。 五、公共方法 public SimpleCursorAdapter.ViewBindergetViewBinder() 返回SimpleCursorTreeAdapter.ViewBinder引用,这个ViewBinder用来将数据绑定到视图上的。 返回值 如果ViewBinder不存在,则返回null。 参考 setViewBinder(android.widget.SimpleCursorTreeAdapter.ViewBinder) public voidsetViewBinder(SimpleCursorTreeAdapter.ViewBinder viewBinder) .设置视图绑定器。 参数 viewBinder视图绑定器。可以设置为null来删除已经存在的绑定器。 参考 getViewBinder() public voidsetViewText(TextView v, String text) 仅当ViewBinder不存在或是当ViewBinder不为TextView绑定时(也就是setViewValue()返回false),则这个方法会被bindView()调用,以便为TextView设置文本。可重写适配器从数据库中检索过滤字符串。 参数 v 文本控件引用 value为文本控件设置的文本信息(译者注:是从Cursor获取到的)。 六、受保护方法 protected voidbindChildView(View view, Context context, Cursor cursor, boolean isExpanded) 通过参数cursor将数据绑定到已有的子视图上。。 参数 view已有视图,返回之前调用newChildView创建的视图。 context应用程序上下文 cursor用于获取数据的Coursor。Coursor已经移到正确的位置。 isLastChild子元素是否处于组中的最后一个 protected voidbindGroupView(View view, Context context, Cursor cursor, boolean isExpanded) 通过参数cursor将数据绑定到已有组视图上。 参数 view已有组视图,返回之前调用newGroupView创建的视图。 context应用程序上下文 cursor用于获取数据的Coursor。Coursor已经移到正确的位置。 isExpanded组视图是否呈展开状态 protected voidsetViewImage(ImageView v, String value) 这个方法会被bindView()调用,以便为ImageView设置图片。默认情况下,参数value作为图片资源ID来看待,否则会视为图片的Uri。另外还可以通过过滤器来获得更灵活的设置。 参数 v 图片控件引用 value图片资源ID,是从Cursor获取到的。 七、补充 文章精选 android播放器(music player)源码分析2 示例代码 SimpleCursorTreeAdapter(深夜未眠).rar SimpleCursorTreeAdapter.ViewBinder 译者署名:深夜未眠 译者链接:http://chris1012f.javaeye.com/ 翻译时间:2011-3-3 版本:Android 3.0 r1 结构 继承关系 public static interfaceSimpleCusrorTreeAdapter.ViewBinder java.lang.Object android.widget.SimpleCursorTreeAdapter.ViewBinder 类概述 这个内部接口可以在外部通过SimpleCursorTreeAdapter.ViewBinder的方式进行Cursor与View的绑定。Android推荐我们采用这种方式进行绑定操作,而不是沿用SimpleCursorTreeAdapter内部的方式。 参见 setViewImage(ImageView, String) setViewText(TextView, String) 公共方法 public abstract booleansetViewValue(View view, Cursor cursor, int columnIndex) 将指定的列数据绑定到指定的视图上。当ViewBinder处理绑定时,这个方法必须返回true;否则SimpleAdapter将尝试通过其内部默认的方法绑定数据。 参数 view被绑定的视图。 cursor数据库游标,绑定数据从它这里获取 columnIndex列位置,能够在数据库游标中寻找到。 返回值 返回 true 意味着数据与视图已经绑定上,否则为未绑定上。 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582375,如需转载请自行联系原作者

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

Android中文API(115)——AudioFormat

正文 一、结构 public classAudioFormat extendsObject java.lang.Object android.media.AudioFormat 二、概述 AndioFormat 类用于访问一些音频格式和通道配置常量。这些常量应用在 AudioTrack 和 AudioRecord 类中。 三、常量 public static final intCHANNEL_CONFIGURATION_DEFAULT 已弃用。 用CHANNEL_OUT_DEFAULT or CHANNEL_IN_DEFAULT代替。 常量值:1 (0x00000001) public static final intCHANNEL_CONFIGURATION_INVALID 已弃用。 用CHANNEL_INVALID代替。 常量值:0 (0x00000000) public static final intCHANNEL_CONFIGURATION_MONO 已弃用。 用CHANNEL_OUT_MONO or CHANNEL_IN_MONO代替。 常量值:2 (0x00000002) public static final intCHANNEL_CONFIGURATION_STEREO 已弃用。 用CHANNEL_OUT_STEREO or CHANNEL_IN_STEREO代替。 常量值:3 (0x00000003) public static final intCHANNEL_INVALID 无效的音频通道掩码 常量值:0 (0x00000000) public static final intCHANNEL_IN_BACK 常量值:32 (0x00000020) public static final intCHANNEL_IN_BACK_PROCESSED 常量值:512 (0x00000200) public static final intCHANNEL_IN_DEFAULT 常量值:1 (0x00000001) public static final intCHANNEL_IN_FRONT 常量值:16 (0x00000010) public static final intCHANNEL_IN_FRONT_PROCESSED 常量值:256 (0x00000100) public static final intCHANNEL_IN_LEFT 常量值:4 (0x00000004) public static final intCHANNEL_IN_LEFT_PROCESSED 常量值:64 (0x00000040) public static final intCHANNEL_IN_MONO 常量值:16 (0x00000010) public static final intCHANNEL_IN_PRESSURE 常量值:1024 (0x00000400) public static final intCHANNEL_IN_RIGHT 常量值:8 (0x00000008) public static final intCHANNEL_IN_RIGHT_PROCESSED 常量值:128 (0x00000080) public static final intCHANNEL_IN_STEREO 常量值:12 (0x0000000c) public static final intCHANNEL_IN_VOICE_DNLINK 常量值:32768 (0x00008000) public static final intCHANNEL_IN_VOICE_UPLINK 常量值:16384 (0x00004000) public static final intCHANNEL_IN_X_AXIS 常量值:2048 (0x00000800) public static final intCHANNEL_IN_Y_AXIS 常量值:4096 (0x00001000) public static final intCHANNEL_IN_Z_AXIS 常量值:8192 (0x00002000) public static final intCHANNEL_OUT_5POINT1 常量值:252 (0x000000fc) public static final intCHANNEL_OUT_7POINT1 常量值:1020 (0x000003fc) public static final intCHANNEL_OUT_BACK_CENTER 常量值:1024 (0x00000400) public static final intCHANNEL_OUT_BACK_LEFT 常量值:64 (0x00000040) public static final intCHANNEL_OUT_BACK_RIGHT 常量值:128 (0x00000080) public static final intCHANNEL_OUT_DEFAULT 默认的音频通道掩码。 常量值:1 (0x00000001) public static final intCHANNEL_OUT_FRONT_CENTER 常量值:16 (0x00000010) public static final intCHANNEL_OUT_FRONT_LEFT 常量值:4 (0x00000004) public static final intCHANNEL_OUT_FRONT_LEFT_OF_CENTER 常量值:256 (0x00000100) public static final intCHANNEL_OUT_FRONT_RIGHT 常量值:8 (0x00000008) public static final intCHANNEL_OUT_FRONT_RIGHT_OF_CENTER 常量值:512 (0x00000200) public static final intCHANNEL_OUT_LOW_FREQUENCY 常量值:32 (0x00000020) public static final intCHANNEL_OUT_MONO 常量值:4 (0x00000004) public static final intCHANNEL_OUT_QUAD 常量值:204 (0x000000cc) public static final intCHANNEL_OUT_STEREO 常量值:12 (0x0000000c) public static final intCHANNEL_OUT_SURROUND 常量值:1052 (0x0000041c) public static final intENCODING_DEFAULT 默认的音频数据格式 常量值:1 (0x00000001) public static final intENCODING_INVALID 无效的音频数据格式 常量值:0 (0x00000000) public static final intENCODING_PCM_16BIT 音频数据格式:脉冲编码调制(PCM)每个样品16位。设备保证提供支持。(参见:这里) 常量值:2 (0x00000002) public static final intENCODING_PCM_8BIT 音频数据格式:脉冲编码调制(PCM)每个样品8位。设备不保证提供支持。 常量值:3 (0x00000003) 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582354,如需转载请自行联系原作者

资源下载

更多资源
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文件系统,支持十年生命周期更新。

WebStorm

WebStorm

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

用户登录
用户注册