首页 文章 精选 留言 我的

精选列表

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

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,如需转载请自行联系原作者

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

Android API 中文 (42) —— ListView

正文 一、结构 public classRatingBar extendsAbsSeekBar java.lang.Object android.view.View android.view.ViewGroup android.widget.AdapterView<T extends android.widget.Adapter> android.widget.AbsListView android.widget.ListView 直接子类 ExpandableListView(使用竖滚动条查看的两级列表视图) 二、概述 通过竖滚动条查看的列表视图。ListAdapter里包含的内容和此视图相关联。参见List View tutorial。 三、内部类 class ListView.FixedViewInfo 表示一个列表中的固定视图,如放在最顶部的页眉和最底部的页脚 四、XML属性 属性名称 描述 android:choiceMode 规定此ListView所使用的选择模式。缺省状态下,list没有选择模式。 属性值必须设置为下列常量之一:none,值为0,表示无选择模式; singleChoice,值为1,表示最多可以有一项被选中; multipleChoice,值为2,表示可以多项被选中。 可参看全局属性资源符号choiceMode。 android:divider 规定List项目之间用某个图形或颜色来分隔。可以用"@[+][package:]type:name"或者"?[package:][type:]name"(主题属性)的形式来指向某个已有资源;也可以用"#rgb","#argb","#rrggbb"或者"#aarrggbb"的格式来表示某个颜色。 可参看全局属性资源符号divider。 android:dividerHeight 分隔符的高度。若没有指明高度,则用此分隔符固有的高度。必须为带单位的浮点数,如"14.5sp"。可用的单位如px(pixel像素),dp(density-independent pixels与密集度无关的像素),sp(scaled pixels based on preferred font size基于字体大小的固定比例的像素),in (inches英寸), mm (millimeters毫米)。 可以用"@[package:]type:name "或者"?[package:][type:]name"(主题属性)的格式来指向某个包含此类型值的资源。 可参看全局属性资源符号dividerHeight。 android:entries 引用一个将使用在此ListView里的数组。若数组是固定的,使用此属性将比在程序中写入更为简单。 必须以"@[+][package:]type:name"或者"?[package:][type:]name"的形式来指向某个资源。 可参看全局属性资源符号entries。 android:footerDividersEnabled 设成flase时,此ListView将不会在页脚视图前画分隔符。此属性缺省值为true。 属性值必须设置为true或false。 可以用"@[package:]type:name "或者"?[package:][type:]name"(主题属性)的格式来指向某个包含此类型值的资源。 可参看全局属性资源符号footerDividersEnabled。 android:headerDividersEnabled 设成flase时,此ListView将不会在页眉视图后画分隔符。此属性缺省值为true。 属性值必须设置为true或false。 可以用"@[package:]type:name "或者"?[package:][type:]name"(主题属性)的格式来指向某个包含此类型值的资源。 可参看全局属性资源符号headerDividersEnabled。 五、常量 Int CHOICE_MODE_MULTIPLE (常量值为2)列表允许同时选取多项 Int CHOICE_MODE_NONE (常量值为0)普通列表,不指明选取模式 Int CHOICE_MODE_SINGLE (常量值为1)列表只允许选取最多一项 六、公共方法 public void addFooterView (View v) 加一个固定显示于list底部的视图。如果此方法被调用超过一次,所加的几个视图将按照它们加入的顺序排列。加入的视图可取得焦点。 注意:在调用setAdapter之前调用此方法。这样的话,可以利用点击光标来收起有header view和footer view的ListView。 参数 v 要加的视图 public void addFooterView (View v, Object data, boolean isSelectable) 加一个固定显示于list底部的视图。如果此方法被调用超过一次,所加的几个视图将按照它们加入的顺序排列。加入的视图可取得焦点。 注意:在调用setAdapter之前调用此方法。这样的话,可以利用点击光标来收起有header view和footer view的ListView。 参数 v 要加的视图 data和此视图关联的数据 isSelectable设为true则表示footer view可以被选中 public void addHeaderView (View v) 加一个固定显示于list顶部的视图。如果此方法被调用超过一次,所加的几个视图将按照它们加入的顺序排列。加入的视图可取得焦点。 注意:在调用setAdapter之前调用此方法。这样的话,可以利用点击光标来收起有header view和footer view的ListView。 参数 v 要加的视图 public void addHeaderView (View v, Object data, boolean isSelectable) 加一个固定显示于list顶部的视图。如果此方法被调用超过一次,所加的几个视图将按照它们加入的顺序排列。加入的视图可取得焦点。 注意:在调用setAdapter之前调用此方法。这样的话,可以利用点击光标来收起有header view和footer view的ListView。 参数 v 要加的视图 data和此视图关联的数据 isSelectable表示此header view可选与否 public void clearChoices () 取消之前设置的任何选择 public boolean dispatchKeyEvent (KeyEvent event) 按照可以获得焦点的顺序(从视图树的顶端到当前获得焦点的视图),分派一个按键事件给下一个视图。若此视图有焦点,事件将会分派给它自己。否则它将按照顺序,分派给下一个节点。此方法同时触动所有按键监听器。 参数 event被分派的事件 返回 若事件被处理,则返回true;否则为false public boolean dispatchPopulateAccessibilityEvent (AccessibilityEvent event) 在视图的子项目被构建时,分派一个辅助事件。 参数 event事件 返回 若事件全部完成,则返回true public ListAdapter getAdapter () 返回ListView当前用的适配器。返回的适配器不可以和传给setAdapter(ListAdapter)的参数一样,但是可以是WrapperListAdapter。 返回 当前用来显示ListView中数据的适配器 参见 setAdapter(ListAdapter) public long[] getCheckItemIds () 此方法已经过时了。使用getCheckedItemIds()代替。 返回被选中项目的索引集合。只有当选择模式没有被设置为CHOICE_MODE_NONE时才有效。 public long[] getCheckedItemIds () 返回被选中项目的索引集合。只有当选择模式没有被设置为CHOICE_MODE_NONE,并且适配器有稳定的ID(hasStableIds()==true)时,结果才有效。 返回 一个新的数组,包含列表中每个被选中的索引(id) public int getCheckedItemPosition () 返回当前被选中的项目。只有当选择模式已被设置为CHOICE_MODE_SINGLE时,结果才有效。 返回 返回当前被选中的项目的索引;若没有项目被选中,则返回INVALID_POSITION 参见 setChoiceMode(int) public SparseBooleanArray getCheckedItemPositions () 返回当前被选中的项目集合。只有当选择模式没有被设置为CHOICE_MODE_NONE时,结果才有效。 返回 类型为SparseBooleanArray的值,其中,对每一个索引所代表的项目,若被选中,则返回true;当选择模式被设置为CHOICE_MODE_NONE时,返回null。 public int getChoiceMode () 返回 返回当前的选择模式 参见 setChoiceMode(int) public Drawable getDivider () 返回 返回当前画在列表元素之间,作为分隔符的图形 public int getDividerHeight () 返回 返回分隔符的高度 public int getFooterViewsCount () 返回 列表中的页脚视图数量;缺省实现时,数量为0 public int getHeaderViewsCount () 返回 列表中的页眉视图数量;缺省实现时,数量为0 public boolean getItemsCanFocus () 返回 ListAdapter所生成的视图是否可以包含能取得焦点的项目 public int getMaxScrollAmount () 返回 The maximum amount a list view will scroll in response to an arrow event. 响应箭头事件时,列表视图可以滚动的最大值。(译者注:此处翻译待改进,恐怕需要仔细查看源代码才能明白其含义,也可以用Google Code搜索相关的代码) public boolean isItemChecked (int position) 对于由position指定的项目,返回其是否被选中。只有当选择模式已被设置为CHOICE_MODE_SINGLE或CHOICE_MODE_MULTIPLE时,结果才有效。 参数 position要返回选中状态的项目 返回 返回项目的选中状态;若选择模式无效,则返回false public boolean onKeyDown (int keyCode, KeyEvent event) KeyEvent.Callback.onKeyMultiple()的缺省实现:若视图被激活并且可以被点击,当出现KEYCODE_DPAD_CENTER和KEYCODE_ENTER代表的行为时,做点击该视图的动作。 参数 keyCode表示按某个按键的按键代号,参见KeyEvent event定义按键动作的按键事件对象 返回 若事件被成功处理,则返回true;若想要下一个接收器处理该事件,则返回false public boolean onKeyMultiple (int keyCode, int repeatCount, KeyEvent event) KeyEvent.Callback.onKeyMultiple()的缺省实现:总是返回false(不处理该事件)。 参数 keyCode表示按某个按键的按键代号,参见KeyEvent repeatedCount实现动作的次数 event定义按键动作的按键事件对象 返回 若事件被成功处理,则返回true;若想要下一个接收器处理该事件,则返回false public boolean onKeyUp (int keyCode, KeyEvent event) KeyEvent.Callback.onKeyMultiple()的缺省实现:当出现KEYCODE_DPAD_CENTER和KEYCODE_ENTER代表的行为时,做点击该视图的动作。 参数 keyCode表示按某个按键的按键代号,参见KeyEvent event定义按键动作的按键事件对象 返回 若事件被成功处理,则返回true;若想要下一个接收器处理该事件,则返回false public void onRestoreInstanceState (Parcelable state) 重新创建并显示一个视图,此视图拥有之前onSaveInstanceState()保存的内部状态。当state为null时,此方法不会被调用。 参数 state之前onSaveInstanceState()保存的状态 public Parcelable onSaveInstanceState () 保存视图的内部状态,用于以后创建新的拥有同样状态的实例。可保存的状态只包含非持久性的,或者可重新组建的信息。比如,永远不可能保存你当前在屏幕上的位置,因为当新的实例被放置于视图层次体系中时,位置会被重新计算。 一些可以被保存的状态:文本视图(但是通常不是指文本本身,因为文本是被保存在内容提供商或其他持久性的储存体中)中当前的光标位置;列表视图中当前的选中项。 返回 返回一个包含视图当前动态状态的接口方法对象;若没有东西被保存,则返回null。缺省情况下返回null。 public boolean onTouchEvent (MotionEvent ev) 此方法用于处理触摸屏的动作事件。 参数 ev动作事件 返回 若事件被成功处理,则返回true;否则返回false public boolean performItemClick (View view, int position, long id) 调用定义好的OnItemClickListener。 参数 view AdapterView中被点击到的视图 position视图在适配器中的索引 id被点击到的项目的行id 返回 若有定义好的OnItemClickListener被成功调用,则返回true;否则返回false public boolean removeFooterView (View v) 删除之前加入的某个页脚视图。 参数 v要删除的视图 返回 若视图被成功删除,则返回true;若此视图不是页脚视图,则返回false public boolean removeHeaderView (View v) 删除之前加入的某个页眉视图。 参数 v要删除的视图 返回 若视图被成功删除,则返回true;若此视图不是页眉视图,则返回false public boolean requestChildRectangleOnScreen (View child, Rect rect, boolean immediate) 当组里的某个子项需要被定位在屏幕的某个矩形范围时,调用此方法。 重载此方法的ViewGroup可确认以下几点: ·子项目将是组里的直系子项 ·矩形将在子项目的坐标体系中 重载此方法的ViewGroup必须保证以下几点: ·若矩形已经是可见的,则没有东西会改变 ·为使矩形区域全部可见,视图将可以被滚动显示 参数 child发出请求的子项目 rect子项目坐标系内的矩形,即此子项目希望在屏幕上的定位 immediate设为true,则禁止动画和缓释移动滚动条 返回 这个可滚动显示的组,是否接受请求 public void setAdapter (ListAdapter adapter) 设置ListView背后的数据。根据ListView目前使用的特性,adapter可能被WrapperListAdapter收起。例如:加页眉和/或页脚会使adapter被收起。 参数 adapter负责维护列表背后的数据,以及生成视图来显示数据里的项目 参见 getAdapter() public void setCacheColorHint (int color) 当color的值不为0时,此值表示的颜色将提示使用者,列表正在一片单色不透明的背景上被画出。 参数 color 背景色 public void setChoiceMode (int choiceMode) 设置List的选择模式。缺省情况下,列表没有选择模式(即值为CHOICE_MODE_NONE)。 参数 choiceMode值可为CHOICE_MODE_NONE,CHOICE_MODE_NONE和CHOICE_MODE_NONE中的一种 public void setDivider (Drawable divider) 设置将画在列表中每个项目之间的图形。如果图形没有已设定好的高度,则必须同时调用setDividerHeight(int)。 参数 divider将用作分隔符的图形 public void setDividerHeight (int height) 设置分隔符(画在列表中每个项目之间)的高度。调用此方法将覆盖由setDivider(Drawable)设置的高度。 参数 height分隔符的新高度,单位为像素 public void setFooterDividersEnabled (boolean footerDividersEnabled) 设置可以或者不可以为页脚视图画上分隔符。 参数 headerDividersEnabled设为true,表明可以画;设为false则不可以 参见 setHeaderDividerEnabled(boolean) addFooterView(android.view.View) public void setHeaderDividersEnabled (boolean headerDividersEnabled) 设置可以或者不可以为页眉视图画上分隔符。 参数 headerDividersEnabled设为true,表明可以画;设为false则不可以 参见 setFooterDividerEnabled(boolean) addHeaderView(android.view.View) public void setItemChecked (int position, boolean value) 设置position所指定项目的选择状态。只有选择模式为CHOICE_MODE_SINGLE或者CHOICE_MODE_MULTIPLE时,此设置才有效。 参数 position需要改变选择状态的项目的索引 value新的选择状态 public void setItemsCanFocus (boolean itemsCanFocus) 表明在由ListAdapter创建的视图中,可包含能获得焦点的项目。 参数 itemsCanFocus若项目能获得焦点,则设为true;否则为false public void setSelection (int position) 选中position指定的项目。若为触摸模式,则指定项目不会被选中,但位置变化一样。若position的值小于0,则position为0的项目将被选中。 参数 position需要选中的项目的索引(从0开始) public void setSelectionAfterHeaderView () 选中页眉视图下的第一个列表项目。 public void setSelectionFromTop (int position, int y) 选中position指定的项目,并将所选项置于距离ListView顶端y像素的位置(若为触摸模式,则指定项目不会被选中,但位置变化一样)。 参数 position需要选中的项目的索引(从0开始) y 距离ListView(包括间隙)顶端的位置 七、受保护方法 protected boolean canAnimate () 表示此视图组是否可以在第一次被布局后,仍可以动态调整其子项。 返回 若可以则为true,否则为false protected void dispatchDraw (Canvas canvas) 调用此方法来绘出子视图。可被衍生类重写,以便在其子项被画出之前取得控制权。 参数 canvas 绘出View所用的canvas(画布?) protected View findViewTraversal (int id) 参数 id要找的View的id 返回值 有此id的View,若没有找到则为null protected View findViewWithTagTraversal (Object tag) 参数 tag 要找的View的标签 返回值 有此标签的View,若没有找到则为null protected void layoutChildren () 子类必须重写此方法来布局其子项。 protected void onFinishInflate () 当View以及所有子项从XML中导入时被调用,是导入的最后一步。即使子类重写onFinishInflate,也必须保证有调用超方法,这样,方法才会被调用。 protected void onFocusChanged (boolean gainFocus, int direction, Rect previouslyFocusedRect) 当View的焦点改变时被调用。重写时,要确保超类的直接调用,这样取得焦点的方式才是标准的。 参数 gainFocus 若View有焦点,则为True;否则为False。 direction当requestFocus()被调用时,方向焦点被移动。其值可为FOCUS_UP,FOCUS_DOWN,FOCUS_LEFT或FOCUS_RIGHT。在使用缺省条件的情况下,direction并不总是可用。 previouslyFocusedRect之前得到焦点的View的坐标系统所构成的矩形。如果可用,这个将被当成精确信息(表明焦点从何而来以及从何方向而来)来传递;否则将传递null。 protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) View调用此方法来确定本身和所包含内容的大小。此方法被measure(int,int)唤起,而且必须被子类重写以得到所包含内容的确切大小。 注意:当重写此方法时,必须调用setMeasureDimension(int,int)来保存View的大小。如果没有做到,将会引发一个measure(int,int)抛出的IllegalStateException(非法状态错误)。超类onMeasure(int,int)可以被调用。 编写基类的确认大小的方法,缺省情况下是根据其背景大小来确认,除非MeasureSepc允许有更大的高度或宽度。子类必须重写onMeasure(int,int)以得到对其内容大小的更准确的测量。 若此方法被重写,它的子类需要确保其高度和宽度至少达到View所规定的最小值(可通过getSuggestedMinimumHeight()和getSuggestedMinimumWidth()得到)。 参数 widthMeaureSpec 受上一层大小影响下的对水平空间的要求。可参看View.MeasureSpec。 heightMeasureSpec受上一层大小影响下的对垂直空间的要求。可参看View.MeasureSpec。 protected void onSizeChanged (int w, int h, int oldw, int oldh) 当VIew的大小改变时此方法被调用。如果VIew是刚刚被加入,则视之前的值为0。 参数 w View的当前宽度 h View的当前高度 oldw View大小改变之前的宽度 oldh View大小改变之前的高度 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582608,如需转载请自行联系原作者

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

android中文api(79)——Gallery

正文 一、结构 public classGalleryextendsAbsSpinner implementsGestureDetector.OnGestureListener java.lang.Object android.view.View android.view.ViewGroup android.widget.AdapterView<T extends android.widget.Adapter> android.widget.AbsSpinner android.widget.Gallery 二、概述 一个锁定中心条目并且拥有水平滚动列表的视图。 Gallery(画廊)使用Theme_galleryItemBackground作为Gallery(画廊)适配器中的各视图的默认参数。如果你没有设置,你就需要调整一些Gallery(画廊)的属性,比如间距。 Gallery(画廊)中的视图应该使用Gallery.LayoutParams作为它们的布局参数类型。 参见 Gallery tutorial 。 三、内部类 class Gallery.LayoutParams Gallery(画廊)扩展了LayoutParams,以此提供可以容纳当前的转换信息和先前的位置转换信息的场所。 四、XML属性 属性名称 描述 android:animationDuration 设置布局变化时动画的转换所需的时间(毫秒级)。仅在动画开始时计时。该值必须是整数,比如:100。 android:gravity 指定在对象的X和Y轴上如何放置内容。指定一下常量中的一个或多个(使用 “|”分割) Constant Value Description top 0x30 紧靠容器顶端,不改变其大小 bottom 0x50 紧靠容器底部,不改变其大小 left 0x03 紧靠容器左侧,不改变其大小 right 0x05 紧靠容器右侧,不改变其大小 center_vertical 0x10 垂直居中,不改变其大小 fill_vertical 0x70 垂直方向上拉伸至充满容器 center_horizontal 0x01 水平居中,不改变其大小 Fill_horizontal 0x07 水平方向上拉伸使其充满容器 center 0x11 居中对齐,不改变其大小 fill 0x77 在水平和垂直方向上拉伸,使其充满容器 clip_vertical 0x80 垂直剪切(当对象边缘超出容器的时候,将上下边缘超出的部分剪切掉) clip_horizontal 0x08 水平剪切(当对象边缘超出容器的时候,将左右边缘超出的部分剪切掉) android:spacing (译者注:设置图片之间的间距) android:unselectedAlpha 设置未选中的条目的透明度(Alpha)。该值必须是float类型,比如:“1.2”。 五、公共方法 public booleandispatchKeyEvent(KeyEvent event) 在焦点路径上分发按钮事件到下一个视图。该路径从视图树的顶端遍历到当前获得焦点的视图。如果当前视图已获得焦点,就分发给自身。否则,就分发到下一个节点的焦点路径上。该方法监听任何按钮事件。 参数 event被分发的按钮事件 返回值 时间被处理返回true,否则false public voiddispatchSetSelected(boolean selected) 分发setSelected给视图的子类。 参数 selected新选中的状态 public ViewGroup.LayoutParamsgenerateLayoutParams(AttributeSet attrs) 返回一个新的已设置属性集合的布局参数。 参数 attrs用于生成布局参数的属性集合 返回值 一个ViewGroup.LayoutParams实例或者它的子类 public booleanonDown(MotionEvent e) 当轻击和按下手势事件发生时通知该方法。任何按下事件都会直接触发该方法。所有其他的事件都要先于该方法。 参数 e按下动作事件 public booleanonFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 当初始化的按下动作事件和松开动作事件匹配时通知fling(译者注:快滑,用户按下触摸屏、快速移动后松开)事件。该动作的速度通过计算X和Y轴上每秒移动多少像素得来。 参数 e1导致开始fling的按下动作事件。 e2触发当前onFling方法的移动动作事件 velocityX测量fling沿X轴上的速度,像素/每秒 velocityY测量fling沿Y轴上的速度,像素/每秒 返回值 如果该事件被消耗返回true,否则false。 public booleanonKeyDown(int keyCode, KeyEvent event) 处理左,右和点击事件 参数 keyCode代表按下按钮的按键码,来自KeyEvent。 event定义按钮动作的KeyEvent对象。 返回值 如果已经处理了按钮事件,则返回true。如果你想让下一个事件接收者处理,就返回false 参见 onKeyDown(int, KeyEvent) public booleanonKeyUp(int keyCode, KeyEvent event) KeyEvent.Callback.onKeyMultiple()方法的默认实现:当KEYCODE_DPAD_CENTER或者KEYCODE_ENTER被释放时,执行点击视图操作。 参数 keyCode代表按下按钮的按键码,来自KeyEvent。 event定义按钮动作的KeyEvent对象。 返回值 如果已经处理了按钮事件,则返回true。如果你想让下一个事件接收者处理,就返回false public voidonLongPress(MotionEvent e) MotionEvent初始化并按下触发长按并通知本方法。 参数 e导致开始长按的初始按下动作事件。 public booleanonScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) 当初始按下动作事件和当前移动动作事件导致滚动时通知本方法。为了方便提供了X和Y轴上的距离。 监听屏幕滚动事件。为了方便提供了X和Y轴上的距离。 参数 e1 导致滚动开始按下的动作事件。 e2 触发当前onScroll方法的移动动作事件。 distanceX距离是自上一次调用onScroll方法在X轴上的距离。不是e1和e2之间的距离。 distanceY距离是自上一次调用onScroll方法在Y轴上的距离。不是e1和e2之间的距离。 返回值 如果该事件被消耗返回true否则false public voidonShowPress(MotionEvent e) 用户已经执行按下动作还没有执行移动或者弹起动作。该事件常通过高亮一个元素来向用户提供一个视觉反馈即用户的操作已经被辨识了。 参数 e按下动作事件 public booleanonSingleTapUp(MotionEvent e) 在轻击动作和up动作事件触发时通知本方法。(译者注:点击屏幕上的某项的执行流程有两种情况,一种是时间很短,一种时间稍长:时间很短:onDown--->onSingleTapUp--->onSingleTapConfirmed,见这里1,这里2。) 参数 e完成开始轻击的up动作事件 返回值 如果该事件被消耗返回true否则false public booleanonTouchEvent(MotionEvent event) 实现该方法来处理触摸屏动作事件 参数 event动作事件 返回值 如果该事件被消耗返回true否则false public voidsetAnimationDuration(int animationDurationMillis) 设置当子视图改变位置时动画转换时间。仅限于动画开始时生效。 参数 animationDurationMillis动画转换时间(毫秒级) public voidsetCallbackDuringFling(boolean shouldCallback) 当flinged时是否回调每一个getOnItemSelectedListener()。如果设为false,只回调最终选中的项。如果为true,则所有的项都会回调。 参数 shouldCallback设置抛滑的过程中是否回调 public voidsetGravity(int gravity) 描述子视图的对齐方式。 public voidsetSpacing(int spacing) 设置Gallery中项的间距 参数 spacing Gallery中项的间距,以像素为单位 public voidsetUnselectedAlpha(float unselectedAlpha) 设置Gallery中未选中项的透明度(alpha)值。 参数 unselectedAlpha未选中项的透明度(alpha)值 public booleanshowContextMenu() 显示该视图上下文菜单。 返回值 上下文菜单是否显示。 public booleanshowContextMenuForChild(View originalView) 为指定的视图或者其父类显示上下文菜单。 大部分情况下,子类不需要重写该方法。但是,如果子类被直接添加到窗口管理器(例如:addView(View.android.view.ViewGroup.LayoutParams)),此时就需要重写来显示上下文菜单 参数 originalView上下文菜单初次调用的源视图 返回值 如果上下文菜单被显示了则返回true。 六、受保护方法 protected intcomputeHorizontalScrollExtent() 在水平范围内计算滚动条滑块的滚动范围。该值用来计算滚动条滑块的长度。 该范围可以使用任意的单位但是必须跟computeHorizontalScrollRange()和computeHorizontalScrollOffset()的单位保持一致。 默认范围是视图的宽度。 返回值 滚动条滑块的水平滚动范围 protected intcomputeHorizontalScrollOffset() 在水平范围内计算滚动条滑块的偏移量。该值用来计算水平滑块的位置。 该范围可以使用任意的单位但是必须跟computeHorizontalScrollRange()和computeHorizontalScrollExtent()的单位保持一致。 默认偏移量是视图的偏移量。 返回值 滚动条滑块的水平偏移量。 protected intcomputeHorizontalScrollRange() 计算滚动条水平方向上的滚动范围。 该范围可以使用任意的单位但是必须跟computeHorizontalScrollExtent()和computeHorizontalScrollOffset()的单位保持一致。 返回值 水平滚动条代表的滑动总范围。 protected voiddispatchSetPressed(boolean pressed) 分发setPressed到View的子类。 参数 pressed新按下的状态 protected ViewGroup.LayoutParamsgenerateDefaultLayoutParams() 返回默认的布局参数。当View作为参数传递给addView(View)而没有布局参数时就会请求这些参数。如果返回null,则addView会抛出异常。 返回值 默认的布局参数或null protected ViewGroup.LayoutParamsgenerateLayoutParams(ViewGroup.LayoutParams p) 返回一组合法的受支持的布局参数。当把ViewGroup传递给View而该View的布局参数并没有通过checkLayoutParams(android.view.ViewGroup.LayoutParams)的测试时,就会调用该方法。该方法应该返回一组适合该ViewGroup的新的布局参数,该过程可能需要从指定的一组布局参数中复制相关的属性。 参数 p被转换成适合该ViewGroup的一组参数。 返回值 返回一个ViewGroup.LayoutParams的实例或者一个它的子类。 protected intgetChildDrawingOrder(int childCount, int i) 返回迭代的绘制子类索引。如果你想改变子类的绘制顺序就要重写该方法。默认返回i值。 提示:为了能够调用该方法,你必须首先调用setChildrenDrawingOrderEnabled(boolean)来允许子类排序。 参数 childCount子类个数 i当前迭代顺序 返回值 绘制该迭代子类的索引 protected booleangetChildStaticTransformation(View child, Transformation t) (译者注:setStaticTransformationsEnabled这个属性设成true的时候每次viewGroup(看Gallery的源码就可以看到它是从ViewGroup间接继承过来的)在重新画它的child的时候都会促发getChildStaticTransformation这个函数。这里1、这里2) protected ContextMenu.ContextMenuInfogetContextMenuInfo() Views如果有额外的信息跟上下文菜单有联系的话就需要实现该方法。返回的结果被用作回调方法onCreateContextMenu(ContextMenu, View, ContextMenuInfo)的参数。 返回值 显示上下文菜单的条目的额外信息。这些信息将会改变View不同的子类 protected voidonFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) 当该视图的焦点状态发生改变时将会调用视图系统。当导向的方向触发焦点事件时,方向和先前获得焦点的矩形提供焦点事件的来源。当用户重写该方法,必须调用父类方法来触发标准的焦点处理事件。 参数 gainFocus如果View获得焦点为true,否则false direction 当调用requestFocus()方法来给该视图焦点时焦点的移动方向。该值:FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT或FOCUS_RIGHT。该参数不常用,通常使用它的默认值。 previouslyFocusedRect该视图坐标系统中先前获得焦点的视图的矩形。如果适用,这将获得焦点事件来源的更细致的信息(除了方向以外)。否则为null。 protected voidonLayout(boolean changed, int l, int t, int r, int b) 当视图为每一个子类分配大小和位置时从布局中调用该方法。有子类的派生类应该重写该方法在子类中调用布局。 参数 changed该视图新的大小和位置。 l相对父容器的左侧位置 t相对父容器的顶部位置 r相对父容器的右侧位置 b相对父容器的底部位置 七、补充 文章精选 Android开发——使用Gallery实现“多级联动” android图片拖动效果(Gallery) 示例代码 Java文件 public class MyGallery extends Activity{ /** Calledwhentheactivityisfirstcreated. */ private Gallerygallery; @Override public void onCreate(BundlesavedInstanceState){ super .onCreate(savedInstanceState); setContentView(R.layout.main); gallery = (Gallery)findViewById(R.id.gallery); gallery.setAdapter( new ImageAdapter( this )); // 设置图片适配器 // 设置监听器 gallery.setOnItemClickListener( new OnItemClickListener(){ @Override public void onItemClick(AdapterView <?> arg0,Viewarg1, int arg2, long arg3){ Toast.makeText(MyGallery. this , " 点击了第 " + arg2 + " 张图片 " ,Toast.LENGTH_LONG).show(); } }); } } class ImageAdapter extends BaseAdapter{ private Contextcontext; // 图片源数组 private Integer[]imageInteger = { R.drawable.gallery_photo_1, R.drawable.gallery_photo_2, R.drawable.gallery_photo_3, R.drawable.gallery_photo_4, R.drawable.gallery_photo_5, R.drawable.gallery_photo_6, R.drawable.gallery_photo_7, R.drawable.gallery_photo_8 }; public ImageAdapter(Contextc){ context = c; } @Override public int getCount(){ return imageInteger.length; } @Override public ObjectgetItem( int position){ // TODOAuto-generatedmethodstub return position; } @Override public long getItemId( int position){ // TODOAuto-generatedmethodstub return position; } @Override public ViewgetView( int position,ViewconvertView,ViewGroupparent){ ImageViewimageView = new ImageView(context); imageView.setImageResource(imageInteger[position]); imageView.setScaleType(ImageView.ScaleType.FIT_XY); imageView.setLayoutParams( new Gallery.LayoutParams( 136 , 88 )); return imageView; } } XML文件 <? xmlversion="1.0"encoding="utf-8" ?> < Gallery xmlns:android ="http://schemas.android.com/apk/res/android" android:id ="@+id/gallery" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:gravity ="center_vertical" android:background ="?android:galleryItemBackground" /> 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582442,如需转载请自行联系原作者

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

android 中文 api (87) —— BaseInputConnection

正文 一、结构 public classBaseInputConnection extendsObjectimplementsInputConnection java.lang.Object android.view.inputmethod.BaseInputConnection 二、概述 InputConnection接口实现的基类,注意大多数行为提供的是Editable联接。本类的实现一定要实现getEditable()提供对它们自己的可编辑对象的访问。 三、公共方法 public booleanbeginBatchEdit() 缺省实现什么也不做。 public booleanclearMetaKeyStates(int states) 缺省实现用MetaKeyKeyListener.clearMetaKeyState(long, int)来清除状态。 参数 states要清除的状态,每个KeyEvent.getMetaState()中可能是1或个状态。 返回值 成功返回true,输入连接无效时返回false。 public booleancommitCompletion(CompletionInfo text) 缺省实现什么也不做。 参数 text提交的完成。 返回值 成功返回true,输入连接无效时返回false。 public booleancommitText(CharSequence text, int newCursorPosition) 缺省实现将用给出的文本替代正在构建的文本。另外在虚拟状态时,将发送包含新文本的按键事件并清空可编辑控件的缓存。 参数 text提交的文本。 newCursorPosition文本范围内新光标位置。如> 0,从文本未尾-1起计算;如<= 0,从文本起始处计算。所以是1时总是在刚插入文本之后。注意这意味着你不能将位置定义在文本中,因为编辑器可以修改你提交的文本,所以无必要将光标定位在文本中。 返回值 成功返回true,输入连接无效时返回false。 public booleandeleteSurroundingText(int leftLength, int rightLength) 缺省实现将删除当前光标位置附近的可编辑文本。 参数 leftLength删除文本在当前光标位置前的字符数 rightLength删除文本在当前光标位置后的字符数。 返回值 成功返回true,输入连接无效时返回false。。 public booleanendBatchEdit() 缺省实现什么也不做。 public booleanfinishComposingText() 缺省实现将用给定的文本替代正在构建的文本。另外在虚拟状态时,将发送包含新文本的按键事件并清空可编辑控件的缓存。 public static int getComposingSpanEnd (Spannable text) public static int getComposingSpanStart (Spannable text) public intgetCursorCapsMode(int reqModes) 缺省实现时,由TextUtils.getCapsMode返回当前可编辑文本的选定文本的光标大小写状态,虚拟状态时总是返回0。 参数 reqModes依据TextUtils.getCapsMode的定义取得期望的状态。通过已定义的常数,你可以轻易地传递TextBoxAttribute.contentType到当前。 返回值 返回当前有效的大小写状态。 public EditablegetEditable() 返回编辑操作的目标。缺省的实现是返回自己的虚拟可编辑控件,子类须重载一个可编辑控件并提供给它自己。 public ExtractedTextgetExtractedText(ExtractedTextRequest request, int flags) 缺省实现总是返回空。 参数 request 描述如何返回文本。 flags额外的客户端控制选项,0或GET_EXTRACTED_TEXT_MONITOR。 返回值 返回ExtractedText对象描述文本视窗的状态并包含提取文本的本身。 public CharSequencegetSelectedText(int flags) 缺省实现是返回当前选择文本,没有选取则为空。 参数 flags额外选项控制文本如何返回,可能为0或GET_TEXT_WITH_STYLES。 返回值 返回当前选择文本,没有选取则为空。 public CharSequencegetTextAfterCursor(int length, int flags) 缺省的实现是返回缓存中当前光标位置后给定数量的文本。 参数 length期望的文本长度。 flags如何返回文本的额外控制。可能为0或GET_TEXT_WITH_STYLES。 返回值 返回光标位置后的文本,返回文本的长度可能小于n。 public CharSequencegetTextBeforeCursor(int length, int flags) 缺省的实现是返回缓存中当前光标位置前给定数量的文本。 参数 length期望的文本长度。 flags如何返回文本的额外控制。可能为0或GET_TEXT_WITH_STYLES。 返回值 返回光标位置前的文本,返回文本的长度可能小于n。 public booleanperformContextMenuAction(int id) 缺省实现是什么也不做。 public booleanperformEditorAction(int actionCode) 缺省实现将其发送至返回键(enter key)。 参数 actionCode必须是EditorInfo.editorType中一常量之一,如EditorInfo.EDITOR_ACTION_GO。 返回值 成功返回true,输入连接无效时返回false。 public booleanperformPrivateCommand(String action, Bundle data) 缺省实现是什么也不做。 参数 action执行的命令名称。必须是作用域的名称(译者注:带包名,如”com.test.Command”),如以你自己的包名称前缀,这样不同的开发者就不会创建产生冲突的命令。 data命令中的数据。 返回值 命令发送返回true(无论相关的编辑器是否理解它),如输入连接无效返回false。 public static final void removeComposingSpans (Spannable text) public booleanreportFullscreenMode(boolean enabled) 以当前的全屏模式更新InputMethodManager。 public booleansendKeyEvent(KeyEvent event) 提供窗口附属输入连接视窗的发送按键事件的标准实现。 参数 event按键事件。 返回值 成功返回true,输入连接无效时返回false。 public booleansetComposingRegion(int start, int end) 将特定区域标记为正在构建文本。任何以前设置的正在构建文本自动清除。正在构建文本应用缺省样式。 参数 start文本中正在构建区域开始位置。 end文本中正在构建区域结束位置。 返回值 成功返回true,输入连接无效时返回false。 public static void setComposingSpans (Spannable text) public booleansetComposingText(CharSequence text, int newCursorPosition). 缺省实现是将给定文本置入可编辑文本,替代任何正在构建文本。新文本标记为正在构建文本并应用构建样式。 参数 text正在构建文本,如必要应用样式。如文本无附属样式,将正在构建文本应用缺省样式。参见how to attach style object to the text。{#link android.text.SpannableString}和{#link android.text.SpannableStringBuilder}是实现的接口。 newCursorPosition文本范围内新光标位置。如> 0,从文本未尾-1起计算;如<= 0,从文本起始处计算。所以是1时总是在刚插入文本之后。注意这意味着你不能将位置定义在文本中,因为编辑器可以修改你提交的文本,所以无必要将光标定位在文本中。 返回值 成功返回true,输入连接无效时返回false。 public booleansetSelection(int start, int end) 缺省实现是在当前可编辑文本中改变选取的位置。 返回值 成功返回true,输入连接无效时返回false。 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582421,如需转载请自行联系原作者

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

Android API 中文 (15) —— GridView

正文 一、结构 public final classGridViewextendsAbsListView java.lang.Object android.view.View android.view.ViewGroup android.widget.AdapterView<T extends android.widget.Adapter> android.widget.AbsListView android.widget.GridView 二、类概述 一个在平面上可显示多个条目的可滚动的视图组件,该组件中的条目通过一个ListAdapter和该组件进行关联。比如android手机中显示的应用: 比如实现九宫格图,用GridView是首选,也是最简单的。 三、构造函数 public GridView (Context context) 创建一个默认属性的GridView实例 public GridView (Context context, AttributeSet attrs) 创建一个带有attrs属性的GridView实例 public GridView (Context context, AttributeSet attrs, int defStyle) 创建一个带有attrs属性,并且指定其默认样式的GridView实例 四、XML属性 属性名称 描述 android:columnWidth 设置列的宽度。关联的方法为:setColumnWidth(int) android:gravity 设置此组件中的内容在组件中的位置。可选的值有:top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical可以多选,用“|”分开。关联方法:setGravity (int gravity) android:horizontalSpacing 两列之间的间距。关联方法:setHorizontalSpacing(int) android:numColumns 列数。关联方法:setNumColumns(int) android:stretchMode 缩放模式。关联方法:setStretchMode(int) android:verticalSpacing 两行之间的间距。关联方法:setVerticalSpacing(int) 五、公共方法 public ListAdapter getAdapter () 获得与此组件相关的适配器.. 返回值 ListAdapter适配器实例 public int getStretchMode () 获得GridView的缩放模式.. public boolean onKeyDown (int keyCode, KeyEvent event) 默认由KeyEvent.Callback.onKeyMultiple()实现,如果视图是可用的并且是可点击的,那么传入KEYCODE_DPAD_CENTER或KEYCODE_ENTER值是执行的是按下视图操作。 参数 keyCode一个表示按下操作的键值. event表示按钮事件的对象. 返回值 如果你认为已经完成事件处理,不想让让下一个处理器来处理此事件,则返回true,否则返回false。 public boolean onKeyMultiple (int keyCode, int repeatCount, KeyEvent event) 默认由KeyEvent.Callback.onKeyMultiple()实现,总是返回false(不处理此事件)。 参数 keyCode键值. repeatCount该动作发生的次数. event事件对象. 返回值 如果你认为已经完成事件处理,不想让让下一个处理器来处理此事件,则返回true,否则返回false。 public boolean onKeyUp (int keyCode, KeyEvent event) 默认由KeyEvent.Callback.onKeyMultiple()实现,如果视图是可用的并且是可点击的,那么传入KEYCODE_DPAD_CENTER或KEYCODE_ENTER值是执行的是点击视图操作。 参数 keyCode键值. event事件对象. 返回值 如果你认为已经完成事件处理,不想让让下一个处理器来处理此事件,则返回true,否则返回false。 public void setAdapter (ListAdapter adapter) 设置GridView的数据。 参数 adapter为grid提供数据的适配器 public void setColumnWidth (int columnWidth) 设置GridView的列宽. 参数 columnWidth列的宽度,以像素为单位 public void setGravity (int gravity) 设置控件内容的位置,默认值为:Gravity.LEFT. 参数 gravity位置值 public void setHorizontalSpacing (int horizontalSpacing) 设置列间距. 参数 horizontalSpacing列间距值 public void setNumColumns (int numColumns) 设置grid的列数 参数 numColumns列数值. public void setSelection (int position) 设置选中的条目. 参数 position.数据条目在列表中的索引值(从0开始),如果在可触摸的模式下,在该索引值下的条目将不会被选中,但是该索引值仍然指向该条目。 public void setStretchMode (int stretchMode) 设置grid中的条目以什么缩放模式去填充空间。. 参数 stretchMode可选值:NO_STRETCH,STRETCH_SPACING,STRETCH_SPACING_UNIFORM,或STRETCH_COLUMN_WIDTH public void setVerticalSpacing (int verticalSpacing) 设置行间距. 参数 verticalSpacing间距值,以像素为单位 六、代码示例 下面给出一个小例子,先看效果: a). GridView01.java public class GridView01 extends Activity{ private GridViewgridview; @Override protected void onCreate(BundlesavedInstanceState){ // TODOAuto-generatedmethodstub super .onCreate(savedInstanceState); setContentView(R.layout.gridview); // 准备要添加的数据条目 List < Map < String,Object >> items = new ArrayList < Map < String,Object >> (); for ( int i = 0 ;i < 10 ;i ++ ){ Map < String,Object > item = new HashMap < String,Object > (); item.put( " imageItem " ,R.drawable.icon); item.put( " textItem " , " text " + i); items.add(item); } // 实例化一个适配器 SimpleAdapteradapter = new SimpleAdapter( this ,items,R.layout.grid_item, new String[]{ " imageItem " , " textItem " }, new int []{R.id.image_item,R.id.text_item}); // 获得GridView实例 gridview = (GridView)findViewById(R.id.mygridview); // gridview.setNumColumns(3); // 可以在xml中设置 // gridview.setGravity(Gravity.CENTER); // 同上 // 将GridView和数据适配器关联 gridview.setAdapter(adapter); } } b). gridview.xml <? xmlversion="1.0"encoding="utf-8" ?> < LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:layout_width ="wrap_content" android:layout_height ="wrap_content" > < GridView android:id ="@+id/mygridview" android:numColumns ="3" android:gravity ="center_horizontal" android:layout_width ="wrap_content" android:layout_height ="wrap_content" > </ GridView > </ LinearLayout > c). grid_item.xml <? xmlversion="1.0"encoding="utf-8" ?> < RelativeLayout android:id ="@+id/RelativeLayout01" android:layout_width ="fill_parent" android:layout_height ="fill_parent" xmlns:android ="http://schemas.android.com/apk/res/android" > < ImageView android:id ="@+id/image_item" android:layout_width ="wrap_content" android:layout_height ="wrap_content" > </ ImageView > < TextView android:id ="@+id/text_item" android:layout_below ="@+id/image_item" android:layout_height ="wrap_content" android:layout_width ="wrap_content" > </ TextView > </ RelativeLayout > 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582689,如需转载请自行联系原作者

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

Android API 中文 (55) —— ListAdapter

正文 一、结构 public interfaceListAdapterextendsAdapter android.widget.ListAdapter 直接子类 ArrayAdapter<T>, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, WrapperListAdapter 二、概述 扩展Adapter是在ListView与数据之间的一座桥梁。通常数据来自于游标,但不是必须的。ListView可以显示包含在ListAdapter里的所有数据。 三、公共方法 public abstract booleanareAllItemsEnabled() 在ListAdapter中所有的项目都是可用的?如果是,则代表所有的项目都是可选择,可用鼠标点击的。 返回值 如果所有项目是可用的返回真 public abstract booleanisEnabled(int position) 如果指定的位置不是一个隔离(separator)项目(隔离项目是一个不可选择,不可用鼠标点击的项目)则返回真。如果位置是无效的,其结果将是不确定的。在这种情况下一个ArrayIndexOutOfBoundsException(越界)异常将抛出。 参数 position项目的索引 返回值 如果这个项目不是一个隔离(separator)项目则返回真。 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582570,如需转载请自行联系原作者

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

ElasticSearch1.7 java api

package cn.xdf.wlyy.solr.utils; import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.ResourceBundle;import java.util.concurrent.ExecutionException; import org.apache.commons.lang.StringUtils;import org.apache.log4j.Logger;import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;import org.elasticsearch.action.delete.DeleteResponse;import org.elasticsearch.action.index.IndexResponse;import org.elasticsearch.action.search.SearchRequestBuilder;import org.elasticsearch.action.search.SearchResponse;import org.elasticsearch.action.update.UpdateRequest;import org.elasticsearch.action.update.UpdateResponse;import org.elasticsearch.client.transport.TransportClient;import org.elasticsearch.common.settings.ImmutableSettings;import org.elasticsearch.common.settings.Settings;import org.elasticsearch.common.text.Text;import org.elasticsearch.common.transport.InetSocketTransportAddress;import org.elasticsearch.index.query.BoolQueryBuilder;import org.elasticsearch.index.query.QueryBuilder;import org.elasticsearch.index.query.QueryBuilders;import org.elasticsearch.search.SearchHit;import org.elasticsearch.search.SearchHits;import org.elasticsearch.search.highlight.HighlightField; import com.alibaba.fastjson.JSONObject; import cn.xdf.wlyy.bbyh.vo.SearchParVo;import cn.xdf.wlyy.utils.PagedResult; /** * Title. <br> * ElasticSearch工具类. * <p> * Copyright: Copyright (c) 2017年7月7日 下午1:09:36 * <p> * <p> * Author: jinxudong@xdf.cn * <p> * Version: 1.0 * <p> *//** * Title. <br> * ElasticSearch 工具类. * <p> * Copyright: Copyright (c) 2017年7月10日 上午9:05:30 * <p> * 2016-3-21 Company: 北京新东方学校 * <p> * Author: jinxudong@xdf.cn * <p> * Version: 1.0 * <p> */public class EsUtil { /** 启用日志 */ private static Logger logger = Logger.getLogger(EsUtil.class); private static TransportClient client; private static ResourceBundle resource = ResourceBundle.getBundle("es"); /** 索引库名称 */ private static String index = resource.getString("es.db"); /** 索引表名称 */ private static String type = resource.getString("es.table"); /** 集群分片数 */ private static String shards_str = resource.getString("es.shards"); private static Integer shards = Integer.parseInt(shards_str); private static SearchRequestBuilder searchRequestBuilder; // 获取集群名称 private static String clustername = resource.getString("es.cluster.name"); // 获取集群ip/域名 private static String hostname = resource.getString("es.hostname"); // 获取第一个节点端口号 private static String port1 = resource.getString("es.port.one"); // 获取第一个节点端口号 private static String port2 = resource.getString("es.port.two"); private static Settings settings; //es加载一次 避免多次链接造成内存溢出 或者使用单例模式 static { settings = ImmutableSettings.settingsBuilder() // client.transport.sniff=true // 客户端嗅探整个集群的状态,把集群中其它机器的ip地址自动添加到客户端中,并且自动发现新加入集群的机器 .put("client.transport.sniff", true).put("client", true)// 仅作为客户端连接 .put("data", false).put("cluster.name", clustername)// 集群名称 .build(); client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress(hostname, Integer.parseInt(port1)))// TCP // 连接地址 .addTransportAddress(new InetSocketTransportAddress(hostname, Integer.parseInt(port2))); } /** * 创建索引 写入elasticsearch * * @param jsonlist * 要创建索引的jsonlist数据 */ public static void createIndex(List<JSONObject> jsonlist) { try { // 创建索引 for (int i = 0; i < jsonlist.size(); i++) { IndexResponse indexResponse = client.prepareIndex(index, type, jsonlist.get(i).getString("id")).setSource(jsonlist.get(i).toString()) .execute().actionGet(); if (indexResponse.isCreated()) { logger.info("写入索引库成功..."); } else { logger.info("写入索引库失败..."); } } } catch (Exception e) { logger.error(e); } } /** * 根据索引id删除 * * @param uids * 索引id */ public static void deleteIndex(List<String> uids) { for (int i = 0; i < uids.size(); i++) { DeleteResponse dResponse = client.prepareDelete(index, type, uids.get(i)).execute().actionGet(); if (dResponse.isContextEmpty()) { logger.info(uids.get(i) + "删除成功..."); } else { logger.info(uids.get(i) + "删除失败..."); } } } /** * 根据索引名称删除 * * @param indexName * 索引库名称 */ public static void deleteIndexLib(String indexName) { DeleteIndexResponse dResponse = client.admin().indices().prepareDelete(indexName).execute().actionGet(); if (dResponse.isContextEmpty()) { logger.info(indexName + "删除成功。"); } else { logger.info(indexName + "删除失败"); } } /** * @param uid * 要更新的索引id * @param json * 要更新的json数据 */ public static void updateIndex(String uid, JSONObject json) { UpdateRequest updateRequest = new UpdateRequest(); updateRequest.index(index); updateRequest.type(type); updateRequest.id(uid); updateRequest.doc(json); try { UpdateResponse updateResponse = client.update(updateRequest).get(); if (!updateResponse.isCreated()) { logger.info(uid + "更新成功"); } else { logger.info(uid + "更新失败"); } } catch (InterruptedException e) { // TODO Auto-generated catch block logger.error(e); } catch (ExecutionException e) { // TODO Auto-generated catch block logger.error(e); } } /** * 多字段查询 * * @param pageSize * 页面大小 * @param keyword * 查询关键字 * @param columns * 不确定多个索引字段 * @return map集合 map.put("dispage", disPage); map.put("jsonlist", * resultlist); */ public static Map<String, Object> query(Integer pageSize, Integer currentNo, SearchParVo vo, String... columns) { searchRequestBuilder = client.prepareSearch(index); HashMap<String, Object> map = new HashMap<String, Object>(); // 搜索结果集 List<JSONObject> resultlist = new ArrayList<JSONObject>(); QueryBuilder qb = null; QueryBuilder qb_state = null; QueryBuilder qb_dept = null; QueryBuilder qb_item = null; QueryBuilder qb_subject = null; QueryBuilder qb_regtype = null; QueryBuilder qb_disway = null; BoolQueryBuilder querybuilder = QueryBuilders.boolQuery(); if (StringUtils.isNotBlank(vo.getTitle())) { qb = QueryBuilders.multiMatchQuery(vo.getTitle(), columns); querybuilder.must(qb); // 必要条件 查询需要显示的内容 qb_state = QueryBuilders.matchPhraseQuery("state", "1"); querybuilder.must(qb_state); if (StringUtils.isNotBlank(vo.getDid())) { qb_dept = QueryBuilders.matchPhraseQuery("d_id", vo.getDid()); querybuilder.must(qb_dept); } if (StringUtils.isNotBlank(vo.getIid())) { qb_item = QueryBuilders.matchPhraseQuery("i_id", vo.getIid()); querybuilder.must(qb_item); } if (StringUtils.isNotBlank(vo.getSid())) { qb_subject = QueryBuilders.matchPhraseQuery("s_id", vo.getSid()); querybuilder.must(qb_subject); } if (StringUtils.isNotBlank(vo.getRegtype())) { qb_regtype = QueryBuilders.matchPhraseQuery("registration_type", vo.getRegtype()); querybuilder.must(qb_regtype); } if (StringUtils.isNotBlank(vo.getDisway())) { qb_disway = QueryBuilders.matchPhraseQuery("discount_way", vo.getDisway()); querybuilder.must(qb_disway); } } else { qb = QueryBuilders.matchAllQuery(); querybuilder.must(qb); } searchRequestBuilder.setQuery(querybuilder); SearchResponse response = searchRequestBuilder.execute().actionGet(); SearchHits hits = response.getHits(); // 记录总数 long total = hits.totalHits(); // 计算总页数 int totalPages = totalPage(1, pageSize, (int) total); // 每次开始的位置 int start = (currentNo - 1) * pageSize; // 添加高亮字段 searchRequestBuilder.addHighlightedField("title"); searchRequestBuilder.setHighlighterPreTags("<span style=\"color:red\">"); searchRequestBuilder.setHighlighterPostTags("</span>"); response = searchRequestBuilder.setFrom(start).setSize(pageSize).execute().actionGet(); SearchHit[] searchHits = response.getHits().hits(); // 封装分页对象信息 PagedResult disPage = new PagedResult(); disPage.setTotal(total); disPage.setPages(totalPages); disPage.setPageNo(currentNo); disPage.setPageSize(pageSize); for (SearchHit searchHit : searchHits) { Map<String, Object> dd = searchHit.getSource(); JSONObject json = (JSONObject) JSONObject.toJSON(dd); // 从设定的高亮域中取得指定域 Map<String, HighlightField> result = searchHit.highlightFields(); HighlightField titleField = result.get("title"); if (titleField != null) { // 取得定义的高亮标签 Text[] titleTexts = titleField.fragments(); // 为title串值增加自定义的高亮标签 String title = ""; for (Text text : titleTexts) { title += text; } json.put("title", title); } resultlist.add(json); } map.put("dispage", disPage); map.put("jsonlist", resultlist); return map; } /** * @param currentNo * 当前页 * @param pageSize * 一页显示多少条记录 * @param totalNum * 总记录 * @return */ public static int totalPage(Integer currentNo, Integer pageSize, int totalNum) { int totalPages = 0; if (totalNum % pageSize == 0) { totalPages = totalNum / pageSize; } else { totalPages = totalNum / pageSize + 1; } return totalPages; }}

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

Flink DataSet API Programming Guide

Example Program 编程的风格和spark很类似, ExecutionEnvironment -- SparkContext DataSet – RDD Transformations 这里用Java的接口,所以传入function需要用FlatMapFunction类对象 public class WordCountExample { public static void main(String[] args) throws Exception { final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); DataSet<String> text = env.fromElements( "Who's there?", "I think I hear them. Stand, ho! Who's there?"); DataSet<Tuple2<String, Integer>> wordCounts = text .flatMap(new LineSplitter()) .groupBy(0) .sum(1); wordCounts.print(); } public static class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> { @Override public void flatMap(String line, Collector<Tuple2<String, Integer>> out) { for (String word : line.split(" ")) { out.collect(new Tuple2<String, Integer>(word, 1)); } } } } Specifying Keys 如何定义key, 1. 用tuple的index,如下用tuple的第一个和第二个做联合key DataSet<Tuple3<Integer,String,Long>> input = // [...] DataSet<Tuple3<Integer,String,Long> grouped = input .groupBy(0,1) .reduce(/*do something*/); 2. 对于POJO对象,使用Field Expressions // some ordinary POJO (Plain old Java Object) public class WC { public String word; public int count; } DataSet<WC> words = // [...] DataSet<WC> wordCounts = words.groupBy("word").reduce(/*do something*/); 3. 使用Key Selector Functions // some ordinary POJO public class WC {public String word; public int count;} DataSet<WC> words = // [...] DataSet<WC> wordCounts = words .groupBy( new KeySelector<WC, String>() { public String getKey(WC wc) { return wc.word; } }) .reduce(/*do something*/); Passing Functions to Flink 1. 实现function interface class MyMapFunction implements MapFunction<String, Integer> { public Integer map(String value) { return Integer.parseInt(value); } }); data.map (new MyMapFunction()); 或使用匿名类, data.map(new MapFunction<String, Integer> () { public Integer map(String value) { return Integer.parseInt(value); } }); 2. 使用Rich functions Rich functions provide, in addition to the user-defined function (map, reduce, etc), four methods:open,close,getRuntimeContext,andsetRuntimeContext. These are useful for parameterizing the function (seePassing Parameters to Functions), creating and finalizing local state, accessing broadcast variables (seeBroadcast Variables, and for accessing runtime information such as accumulators and counters (seeAccumulators and Counters, and information on iterations (seeIterations). Rich functions的使用和普通的function是一样的,不同的就是,多4个接口函数,可以用于一些特殊的场景,比如给function传参,或访问broadcast变量,accumulators和counter,因为这些场景你需要先getRuntimeContext class MyMapFunction extends RichMapFunction<String, Integer> { public Integer map(String value) { return Integer.parseInt(value); } }); Execution Configuration ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); ExecutionConfig executionConfig = env.getConfig(); enableClosureCleaner()/disableClosureCleaner(). The closure cleaner is enabled by default. The closure cleaner removes unneeded references to the surrounding class of anonymous functions inside Flink programs. With the closure cleaner disabled, it might happen that an anonymous user function is referencing the surrounding class, which is usually not Serializable. This will lead to exceptions by the serializer. 对于Java,比如传入function也要生成function对象,这样里面的function是会reference这个对象的,其实这种情况,你需要的只是function逻辑,所以closureCleaner会去掉这个reference 这样的好处是,传输类对象时候,是要求对象可序列化的,如果每个去实现序列号接口很麻烦,不实现又会报错,所以这里干脆clean掉这个reference getParallelism()/setParallelism(int parallelism)Set the default parallelism for the job. 设置Job的全局的parallelism getExecutionRetryDelay()/setExecutionRetryDelay(long executionRetryDelay)Sets the delay in milliseconds that the system waits after a job has failed, before re-executing it. The delay starts after all tasks have been successfully been stopped on the TaskManagers, and once the delay is past, the tasks are re-started. This parameter is useful to delay re-execution in order to let certain time-out related failures surface fully (like broken connections that have not fully timed out), before attempting a re-execution and immediately failing again due to the same problem. This parameter only has an effect if the number of execution re-tries is one or more.getExecutionMode()/setExecutionMode(). The default execution mode is PIPELINED. Sets the execution mode to execute the program. The execution mode defines whether data exchanges are performed in a batch or on a pipelined manner. 和失败重试相关的配置 enableObjectReuse()/disableObjectReuse()By default, objects are not reused in Flink. Enabling theobject reuse modewill instruct the runtime to reuse user objects for better performance. Keep in mind that this can lead to bugs when the user-code function of an operation is not aware of this behavior. 这个由于Java什么都要生成对象,比如function,所以会生成大量重复对象,这个可以打开object重用,提高性能 enableSysoutLogging()/disableSysoutLogging()JobManager status updates are printed toSystem.outby default. This setting allows to disable this behavior. 打开和关闭系统日志 getGlobalJobParameters()/setGlobalJobParameters()This method allows users to set custom objects as a global configuration for the job. Since theExecutionConfigis accessible in all user defined functions, this is an easy method for making configuration globally available in a job. 可以设置Job全局参数 其他的参数都是序列化相关的,不列了 Data Sinks Data sinks consume DataSets and are used to store or return them. Data sink operations are described using anOutputFormat. 可以custom output format: 比如写数据库, DataSet<Tuple3<String, Integer, Double>> myResult = [...] // write Tuple DataSet to a relational database myResult.output( // build and configure OutputFormat JDBCOutputFormat.buildJDBCOutputFormat() .setDrivername("org.apache.derby.jdbc.EmbeddedDriver") .setDBUrl("jdbc:derby:memory:persons") .setQuery("insert into persons (name, age, height) values (?,?,?)") .finish() ); 还有个功能,可以做locally的排序, DataSet<Tuple3<Integer, String, Double>> tData = // [...] DataSet<Tuple2<BookPojo, Double>> pData = // [...] DataSet<String> sData = // [...] // sort output on String field in ascending order tData.print().sortLocalOutput(1, Order.ASCENDING); // sort output on Double field in descending and Integer field in ascending order tData.print().sortLocalOutput(2, Order.DESCENDING).sortLocalOutput(0, Order.ASCENDING); Debugging 本地执行,LocalEnvironement final ExecutionEnvironment env = ExecutionEnvironment.createLocalEnvironment(); DataSet<String> lines = env.readTextFile(pathToTextFile); // build your program env.execute(); 便于调式的datasouce, final ExecutionEnvironment env = ExecutionEnvironment.createLocalEnvironment(); // Create a DataSet from a list of elements DataSet<Integer> myInts = env.fromElements(1, 2, 3, 4, 5); // Create a DataSet from any Java collection List<Tuple2<String, Integer>> data = ... DataSet<Tuple2<String, Integer>> myTuples = env.fromCollection(data); // Create a DataSet from an Iterator Iterator<Long> longIt = ... DataSet<Long> myLongs = env.fromCollection(longIt, Long.class); 便于输出的datasink, DataSet<Tuple2<String, Integer>> myResult = ... List<Tuple2<String, Integer>> outData = new ArrayList<Tuple2<String, Integer>>(); myResult.output(new LocalCollectionOutputFormat(outData)); Iteration Operators Iterations implement loops in Flink programs. The iteration operators encapsulate a part of the program and execute it repeatedly, feeding back the result of one iteration (the partial solution) into the next iteration. There are two types of iterations in Flink:BulkIterationandDeltaIteration. 参考,https://ci.apache.org/projects/flink/flink-docs-release-0.10/apis/iterations.html BulkIteration就是正常的Iteration,每次都处理全量数据 DeltaIteration,就是每次都只处理部分数据并delta更新,效率更高 Semantic Annotations Semantic annotations can be used to give Flink hints about the behavior of a function. 目的是做性能优化,优化器在明确知道function读参数的使用情况,比如如果知道某些field只是做forward,就可以保留它的sorting or partitioning信息 有3种语义annotation, Forwarded Fields Annotation 表示,输入的某个field会原封不动的copy到输出的某个field 下面的例子,表示输入的第一个field会copy到输出的第3个field 可以看到,输出tuple的第三个field是val.f0 @ForwardedFields("f0->f2") public class MyMap implements MapFunction<Tuple2<Integer, Integer>, Tuple3<String, Integer, Integer>> { @Override public Tuple3<String, Integer, Integer> map(Tuple2<Integer, Integer> val) { return new Tuple3<String, Integer, Integer>("foo", val.f1 / 2, val.f0); } } Non-Forwarded Fields 和上面相反,除指定的fields,其他fields都是原位置copy 例子,除输入的第二个field,其他都是原位置copy @NonForwardedFields("f1") // second field is not forwarded public class MyMap implements MapFunction<Tuple2<Integer, Integer>, Tuple2<Integer, Integer>> { @Override public Tuple2<Integer, Integer> map(Tuple2<Integer, Integer> val) { return new Tuple2<Integer, Integer>(val.f0, val.f1 / 2); } } Read Fields 表明这个fields会在function被读到或用到, 表明,输入的第一个field和第4个field会被读到或用到 @ReadFields("f0; f3") // f0 and f3 are read and evaluated by the function. public class MyMap implements MapFunction<Tuple4<Integer, Integer, Integer, Integer>, Tuple2<Integer, Integer>> { @Override public Tuple2<Integer, Integer> map(Tuple4<Integer, Integer, Integer, Integer> val) { if(val.f0 == 42) { return new Tuple2<Integer, Integer>(val.f0, val.f1); } else { return new Tuple2<Integer, Integer>(val.f3+10, val.f1); } } } Broadcast Variables Broadcast variables allow you to make a data set available to all parallel instances of an operation, in addition to the regular input of the operation. This is useful for auxiliary data sets, or data-dependent parameterization. The data set will then be accessible at the operator as a Collection. Broadcast: broadcast sets are registered by name viawithBroadcastSet(DataSet, String), and Access: accessible viagetRuntimeContext().getBroadcastVariable(String)at the target operator. // 1. The DataSet to be broadcasted DataSet<Integer> toBroadcast = env.fromElements(1, 2, 3); DataSet<String> data = env.fromElements("a", "b"); data.map(new RichMapFunction<String, String>() { @Override public void open(Configuration parameters) throws Exception { // 3. Access the broadcasted DataSet as a Collection Collection<Integer> broadcastSet = getRuntimeContext().getBroadcastVariable("broadcastSetName"); } @Override public String map(String value) throws Exception { ... } }).withBroadcastSet(toBroadcast, "broadcastSetName"); // 2. Broadcast the DataSet 这个场景,就是有些不大的公共数据,是要被所有的实例访问到的,比如一些查询表 上面的例子,会将toBroadcast设置为广播变量broadcastSetName,这样在运行时,可以用getRuntimeContext().getBroadcastVariable获取该变量使用 Passing Parameters to Functions 应该是如果将参数传递给function类,这个完全由java冗余导致的 首先,当然可以用类构造函数来传参数, ataSet<Integer> toFilter = env.fromElements(1, 2, 3); toFilter.filter(new MyFilter(2)); private static class MyFilter implements FilterFunction<Integer> { private final int limit; public MyFilter(int limit) { this.limit = limit; } @Override public boolean filter(Integer value) throws Exception { return value > limit; } } 自定义MyFilter,构造函数可以传入limit 也可以使用withParameters(Configuration) DataSet<Integer> toFilter = env.fromElements(1, 2, 3); Configuration config = new Configuration(); config.setInteger("limit", 2); toFilter.filter(new RichFilterFunction<Integer>() { private int limit; @Override public void open(Configuration parameters) throws Exception { limit = parameters.getInteger("limit", 0); } @Override public boolean filter(Integer value) throws Exception { return value > limit; } }).withParameters(config); 可以用withParameters将定义好的config传入function 然后用RichFunction的Open接口,将参数解析出来使用 这样和上面的比有啥好处,我怎么觉得上面那个看着更方便些?可以用匿名类? 当然你也可以用全局参数,这个和广播变量有什么区别?相同点就是都是全局可见,全局参数只能用于参数形式,广播变量可以是任意dataset Setting a custom global configuration Configuration conf = new Configuration(); conf.setString("mykey","myvalue"); final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); env.getConfig().setGlobalJobParameters(conf); Accessing values from the global configuration public static final class Tokenizer extends RichFlatMapFunction<String, Tuple2<String, Integer>> { private String mykey; @Override public void open(Configuration parameters) throws Exception { super.open(parameters); ExecutionConfig.GlobalJobParameters globalParams = getRuntimeContext().getExecutionConfig().getGlobalJobParameters(); Configuration globConf = (Configuration) globalParams; mykey = globConf.getString("mykey", null); } // ... more here ... Accumulators & Counters 用于分布式计数,job结束的时候,会全部汇总 Flink currently has the followingbuilt-in accumulators. Each of them implements theAccumulatorinterface. IntCounter,LongCounterandDoubleCounter: See below for an example using a counter. Histogram: A histogram implementation for a discrete number of bins. Internally it is just a map from Integer to Integer. You can use this to compute distributions of values, e.g. the distribution of words-per-line for a word count program. //定义和注册counter private IntCounter numLines = new IntCounter(); getRuntimeContext().addAccumulator("num-lines", this.numLines); //在任意地方进行计数 this.numLines.add(1); //最终取得结果 myJobExecutionResult.getAccumulatorResult("num-lines") Execution Plans 首先可以打印出执行plan,json格式, final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); ... System.out.println(env.getExecutionPlan()); 打开这个网页, The HTML document containing the visualizer is located undertools/planVisualizer.html. 将Json贴入,就可以看到执行计划, Web Interface Flink offers a web interface for submitting and executing jobs. If you choose to use this interface to submit your packaged program, you have the option to also see the plan visualization. The script to start the webinterface is located underbin/start-webclient.sh. After starting the webclient (per default onport 8080), your program can be uploaded and will be added to the list of available programs on the left side of the interface. 也可以通过web interface来提交job和查看执行计划

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

[ElasticSearch]Java API之TermQuery

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/52852483 1. 词条查询(Term Query) 词条查询是ElasticSearch的一个简单查询。它仅匹配在给定字段中含有该词条的文档,而且是确切的、未经分析的词条。term 查询 会查找我们设定的准确值。term 查询本身很简单,它接受一个字段名和我们希望查找的值。 下面代码查询将匹配 college 字段中含有"California"一词的文档。记住,词条查询是未经分析的,因此需要提供跟索引文档中的词条完全匹配的词条。请注意,我们使用小写开头的california来搜索,而不是California,因为California一词在建立索引时已经变成了california(默认分词器)。 // Query TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("country", "AWxhOn".toLowerCase()); // Search SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index); searchRequestBuilder.setTypes(type); searchRequestBuilder.setQuery(termQueryBuilder); // 执行 SearchResponse searchResponse = searchRequestBuilder.get(); 参考:https://www.elastic.co/guide/en/elasticsearch/reference/2.4/query-dsl-term-query.html 2. 多词条查询(Terms Query) 词条查询(Term Query)允许匹配单个未经分析的词条,多词条查询(Terms Query)可以用来匹配多个这样的词条。只要指定字段包含任一我们给定的词条,就可以查询到该文档。 下面代码得到所有在 country 字段中含有 “德国” 或 "比利时" 的文档。 // Query TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("country", "比利时", "德国"); // Search SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index); searchRequestBuilder.setTypes(type); searchRequestBuilder.setQuery(termsQueryBuilder); // 执行 SearchResponse searchResponse = searchRequestBuilder.get(); 参考:https://www.elastic.co/guide/en/elasticsearch/reference/2.4/query-dsl-terms-query.html 3. 范围查询(Range Query) 范围查询使我们能够找到在某一字段值在某个范围里的文档,字段可以是数值型,也可以是基于字符串的。范围查询只能针对单个字段。 方法: (1) gte() :范围查询将匹配字段值大于或等于此参数值的文档。 (2) gt() :范围查询将匹配字段值大于此参数值的文档。 (3) lte() :范围查询将匹配字段值小于或等于此参数值的文档。 (4) lt() :范围查询将匹配字段值小于此参数值的文档。 (5) from() 开始值 to() 结束值 这两个函数与includeLower()和includeUpper()函数配套使用。 (6) includeLower(true) 表示 from() 查询将匹配字段值大于或等于此参数值的文档。 (7) includeLower(false) 表示 from() 查询将匹配字段值大于此参数值的文档。 (8) includeUpper(true) 表示 to() 查询将匹配字段值小于或等于此参数值的文档。 (9) includeUpper(false) 表示 to() 查询将匹配字段值小于此参数值的文档。 // Query RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age"); rangeQueryBuilder.from(19); rangeQueryBuilder.to(21); rangeQueryBuilder.includeLower(true); rangeQueryBuilder.includeUpper(true); //RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age").gte(19).lte(21); // Search SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index); searchRequestBuilder.setTypes(type); searchRequestBuilder.setQuery(rangeQueryBuilder); // 执行 SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); 上面代码中的查询语句与下面的是等价的: QueryBuilder queryBuilder = QueryBuilders.rangeQuery("age").gte(19).lte(21); 参考:https://www.elastic.co/guide/en/elasticsearch/reference/2.4/query-dsl-range-query.html 4. 存在查询(Exists Query) 如果指定字段上至少存在一个no-null的值就会返回该文档。 // Query ExistsQueryBuilder existsQueryBuilder = QueryBuilders.existsQuery("name"); // Search SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index); searchRequestBuilder.setTypes(type); searchRequestBuilder.setQuery(existsQueryBuilder); // 执行 SearchResponse searchResponse = searchRequestBuilder.get(); 举例说明,下面的几个文档都会得到上面代码的匹配: { "name": "yoona" } { "name": "" } { "name": "-" } { "name": ["yoona"] } { "name": ["yoona", null ] } 第一个是字符串,是一个非null的值。 第二个是空字符串,也是非null。 第三个使用标准分析器的情况下尽管不会返回词条,但是原始字段值是非null的(Even though the standard analyzer would emit zero tokens, the original field is non-null)。 第五个中至少有一个是非null值。 下面几个文档不会得到上面代码的匹配: { "name": null } { "name": [] } { "name": [null] } { "user": "bar" } 第一个是null值。 第二个没有值。 第三个只有null值,至少需要一个非null值。 第四个与指定字段不匹配。 参考:https://www.elastic.co/guide/en/elasticsearch/reference/2.4/query-dsl-exists-query.html 5. 前缀查询(Prefix Query) 前缀查询让我们匹配这样的文档:它们的特定字段已给定的前缀开始。下面代码中我们查询所有country字段以"葡萄"开始的文档。 // Query PrefixQueryBuilder prefixQueryBuilder = QueryBuilders.prefixQuery("country", "葡萄"); // Search SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index); searchRequestBuilder.setTypes(type); searchRequestBuilder.setQuery(prefixQueryBuilder); // 执行 SearchResponse searchResponse = searchRequestBuilder.get(); 备注: 进行下面前缀查询,没有查找到相应信息,但是数据源中是有的: QueryBuilder queryBuilder = QueryBuilders.prefixQuery("club", "皇家马德里"); 产生以上差别的主要原因是club字段(默认mapping配置)进行了分析器分析了,索引中的数据已经不在是"皇家马德里",而country字段没有进行分析(mapping配置not_analyzed)。 参考:https://www.elastic.co/guide/en/elasticsearch/reference/2.4/query-dsl-prefix-query.html 6. 通配符查询(Wildcard Query) 通配符查询允许我们获取指定字段满足通配符表达式的文档,和前缀查询一样,通配符查询指定字段是未分析的(not analyzed)。 可以使用星号代替0个或多个字符,使用问号代替一个字符。星号表示匹配的数量不受限制,而后者的匹配字符数则受到限制。这个技巧主要用于英文搜索中,如输入““computer*”,就可以找到“computer、computers、computerised、computerized”等单词,而输入“comp?ter”,则只能找到“computer、compater、competer”等单词。注意的是通配符查询不太注重性能,在可能时尽量避免,特别是要避免前缀通配符(以以通配符开始的词条)。 // Query WildcardQueryBuilder wildcardQueryBuilder = QueryBuilders.wildcardQuery("country", "西*牙"); // Search SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index); searchRequestBuilder.setTypes(type); searchRequestBuilder.setQuery(wildcardQueryBuilder); // 执行 SearchResponse searchResponse = searchRequestBuilder.get(); 参考:https://www.elastic.co/guide/en/elasticsearch/reference/2.4/query-dsl-wildcard-query.html 7. 正则表达式查询(Regexp Query) 正则表达式查询允许我们获取指定字段满足正则表达式的文档,和前缀查询一样,正则表达式查询指定字段是未分析的(not analyzed)。正则表达式查询的性能取决于所选的正则表达式。如果我们的正则表达式匹配许多词条,查询将很慢。一般规则是,正则表达式匹配的词条数越高,查询越慢。 // Query RegexpQueryBuilder regexpQueryBuilder = QueryBuilders.regexpQuery("country", "(西班|葡萄)牙"); // Search SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index); searchRequestBuilder.setTypes(type); searchRequestBuilder.setQuery(regexpQueryBuilder); // 执行 SearchResponse searchResponse = searchRequestBuilder.get(); 参考:https://www.elastic.co/guide/en/elasticsearch/reference/2.4/query-dsl-regexp-query.html 8. 模糊查询(Fuzzy Query) 如果指定的字段是string类型,模糊查询是基于编辑距离算法来匹配文档。编辑距离的计算基于我们提供的查询词条和被搜索文档。如果指定的字段是数值类型或者日期类型,模糊查询基于在字段值上进行加减操作来匹配文档(The fuzzy query uses similarity based on Levenshtein edit distance for string fields, and a +/-margin on numeric and date fields)。此查询很占用CPU资源,但当需要模糊匹配时它很有用,例如,当用户拼写错误时。另外我们可以在搜索词的尾部加上字符 “~” 来进行模糊查询。 8.1 string类型字段 模糊查询生成所有可能跟指定词条的匹配结果(在fuzziness指定的最大编辑距离范围之内)。然后检查生成的所有结果是否是在索引中。 下面代码中模糊查询country字段为”西班牙“的所有文档,同时指定最大编辑距离为1(fuzziness),最少公共前缀为0(prefixLength),即不需要公共前缀。 // Query FuzzyQueryBuilder fuzzyQueryBuilder = QueryBuilders.fuzzyQuery("country", "洗班牙"); // 最大编辑距离 fuzzyQueryBuilder.fuzziness(Fuzziness.ONE); // 公共前缀 fuzzyQueryBuilder.prefixLength(0); // Search SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index); searchRequestBuilder.setTypes(type); searchRequestBuilder.setQuery(fuzzyQueryBuilder); // 执行 SearchResponse searchResponse = searchRequestBuilder.get(); 8.2 数字和日期类型字段 与范围查询(Range Query)的around比较类似。形成在指定值上上下波动fuzziness大小的一个范围: -fuzziness <= field value <= +fuzziness 下面代码在18岁上下波动2岁,形成[17-19]的一个范围查询: // Query FuzzyQueryBuilder fuzzyQueryBuilder = QueryBuilders.fuzzyQuery("age", "18"); fuzzyQueryBuilder.fuzziness(Fuzziness.TWO); // Search SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index); searchRequestBuilder.setTypes(type); searchRequestBuilder.setQuery(fuzzyQueryBuilder); // 执行 SearchResponse searchResponse = searchRequestBuilder.get(); 参考:https://www.elastic.co/guide/en/elasticsearch/reference/2.4/query-dsl-fuzzy-query.html 备注: 本代码基于ElasticSearch 2.4.1

资源下载

更多资源
腾讯云软件源

腾讯云软件源

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

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部分的功能。

用户登录
用户注册