首页 > 技术文章 > android 开发积累

yanghj010 2016-01-07 14:03 原文

1.ListView滚动黑屏问题

 

ListView滚动时,数据项变成黑色

问题解决办法:通过添加 android:cacheColorHint = "#00000000" 将背景设为透明即可

2.OnScrollListener回调分析

 

[java] view plaincopy
 
  1. new OnScrollListener() {      
  2.         boolean isLastRow = false;      
  3.           
  4.         @Override      
  5.         public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {      
  6.             //滚动时一直回调,直到停止滚动时才停止回调。单击时回调一次。      
  7.             //firstVisibleItem:当前能看见的第一个列表项ID(从0开始)      
  8.             //visibleItemCount:当前能看见的列表项个数(小半个也算)      
  9.             //totalItemCount:列表项共数      
  10.           
  11.             //判断是否滚到最后一行      
  12.             if (firstVisibleItem + visibleItemCount == totalItemCount && totalItemCount > 0) {      
  13.                 isLastRow = true;      
  14.             }      
  15.         }      
  16.         @Override      
  17.         public void onScrollStateChanged(AbsListView view, int scrollState) {      
  18.             //正在滚动时回调,回调2-3次,手指没抛则回调2次。scrollState = 2的这次不回调      
  19.             //回调顺序如下      
  20.             //第1次:scrollState = SCROLL_STATE_TOUCH_SCROLL(1) 正在滚动      
  21.             //第2次:scrollState = SCROLL_STATE_FLING(2) 手指做了抛的动作(手指离开屏幕前,用力滑了一下)      
  22.             //第3次:scrollState = SCROLL_STATE_IDLE(0) 停止滚动                          //当屏幕停止滚动时为0;当屏幕滚动且用户使用的触碰或手指还在屏幕上时为1;    
  23.             //由于用户的操作,屏幕产生惯性滑动时为2    
  24.           
  25.             //当滚到最后一行且停止滚动时,执行加载      
  26.             if (isLastRow && scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {      
  27.                 //加载元素      
  28.                 ......      
  29.                 isLastRow = false;      
  30.             }      
  31.         }      
  32.     }  

3.Android RelativeLayout常用属性~

[html] view plaincopy
 
  1. // 相对于给定ID控件  
  2. android:layout_above 将该控件的底部置于给定ID的控件之上;  
  3. android:layout_below 将该控件的底部置于给定ID的控件之下;  
  4. android:layout_toLeftOf 将该控件的右边缘与给定ID的控件左边缘对齐;  
  5. android:layout_toRightOf 将该控件的左边缘与给定ID的控件右边缘对齐;  
  6.   
  7. android:layout_alignBaseline 将该控件的baseline与给定ID的baseline对齐;  
  8. android:layout_alignTop 将该控件的顶部边缘与给定ID的顶部边缘对齐;  
  9. android:layout_alignBottom 将该控件的底部边缘与给定ID的底部边缘对齐;  
  10. android:layout_alignLeft 将该控件的左边缘与给定ID的左边缘对齐;  
  11. android:layout_alignRight 将该控件的右边缘与给定ID的右边缘对齐;  
  12. // 相对于父组件  
  13. android:layout_alignParentTop 如果为true,将该控件的顶部与其父控件的顶部对齐;  
  14. android:layout_alignParentBottom 如果为true,将该控件的底部与其父控件的底部对齐;  
  15. android:layout_alignParentLeft 如果为true,将该控件的左部与其父控件的左部对齐;  
  16. android:layout_alignParentRight 如果为true,将该控件的右部与其父控件的右部对齐;  
  17. // 居中  
  18. android:layout_centerHorizontal 如果为true,将该控件的置于水平居中;  
  19. android:layout_centerVertical 如果为true,将该控件的置于垂直居中;  
  20. android:layout_centerInParent 如果为true,将该控件的置于父控件的中央;  
  21. // 指定移动像素  
  22. android:layout_marginTop 上偏移的值;  
  23. android:layout_marginBottom 下偏移的值;  
  24. android:layout_marginLeft   左偏移的值;  
  25. android:layout_marginRight   右偏移的值;  
[html] view plaincopy
 
  1. <span style="font-family: Arial; font-size: 14px; line-height: 26px;">android:paddingstart(paddingend):左右对齐时使用。左对齐时:paddingstart对应paddingleft;paddingend对应paddingright;右对齐时则刚好相反;</span>  
[html] view plaincopy
 
  1. <span style="font-family: Arial; font-size: 14px; line-height: 26px;">android:scaleType是控制图片如何resized/moved来匹对ImageView的size。  
  2. ImageView.ScaleType / android:scaleType值的意义区别:  
  3. CENTER /center  按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示  
  4. CENTER_CROP / centerCrop  按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)  
  5. CENTER_INSIDE / centerInside  将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽  
  6. FIT_CENTER / fitCenter  把图片按比例扩大/缩小到View的宽度,居中显示  
  7. FIT_END / fitEnd   把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置  
  8. FIT_START / fitStart  把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置  
  9. FIT_XY / fitXY  把图片不按比例扩大/缩小到View的大小显示  
  10. MATRIX / matrix 用矩阵来绘制,动态缩小放大图片来显示。  
  11. </span>  
 

4.android:screenOrientation 屏幕方向

[html] view plaincopy
 
  1. unspecified 默认值. 由系統选择显示方向. 在不同的設備可能會有所不同  
  2. landscape 橫向  
  3. portrait 纵向  
  4. user 用戶當前的首選方向  
  5. behind 與在活動堆棧下的活動相同方向  
  6. sensor 根據物理方向傳感器確定方向. 取決於用戶手持的方向, 當用戶轉動設備, 它跟隨改變.  
  7. nosensor 不經物理方向傳感器確定方向. 該傳感器被忽略, 所以當用戶轉動設備, 顯示不會跟隨改變. 除了這個區別,系統選擇使用相同的政策取向對於“未指定”設置  


5.EditText属性详解

[html] view plaincopy
 
  1. 1、EditText输入的文字为密码形式的设置  
  2. (1)通过.xml里设置:  
  3.  把该EditText设为:android:password="true" // 以”.”形式显示文本  
  4. (2)在代码里设置:  
  5. 通过设置EditText的setTransformationMethod()方法来实现隐藏密码或这显示密码。  
  6. editText.setTransformationMethod(PasswordTransformationMethod.getInstance());//设置密码为不可见。  
  7. 2、(1)EditText输入的文字为电话号码  
  8. Android:phoneNumber=”true”  //输入电话号码  
  9. 3、EditText字数限制的设置  
  10. (1)在.xml中设置:android:maxLength=“50”   
  11. (2)代码中设置:     
  12. editText.setFilters(new InputFilter[]{newInputFilter.LengthFilter(100)});  
  13. 4、EditText设置字体  
  14. android:typeface="monospace" //设置字型。字形有:normal, sans, serif,monospace  
  15. 5、EditText是否可编辑  
  16. Android:editable // 是否可编辑  
  17. 6、在EditText中软键盘的调起、关闭  
  18. (1)EditText有焦点(focusable为true)阻止输入法弹出  
  19.  editText=(EditText)findViewById(R.id.txtBody);  
  20.    editText.setOnTouchListener(new OnTouchListener(){    
  21.          public boolean onTouch(View v, MotionEvent event){   
  22.             editText.setInputType(InputType.TYPE_NULL); //关闭软键盘       
  23.             return false;  
  24.          }  
  25.     });  
  26. (2)当EidtText无焦点(focusable=false)时阻止输入法弹出  
  27.  InputMethodManager imm =  
  28. (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);   
  29.  imm.hideSoftInputFromWindow(editText.getWindowToken(),0);  
  30. (3)调用数字键盘并设置输入类型和键盘为英文  
  31. etNumber.setInputType(InputType.TYPE_CLASS_NUMBER); //调用数字键盘  
  32. rlEditText.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);//设置输入类型和键盘为英文 或者:android:inputType="textUri|textMultiLine"  
  33. (4)android:focusable="false"//键盘永远不会弹出  
  34. <activity android:name=".AddLinkman"android:windowSoftInputMode="adjustUnspecified|stateHidden"/>//不自动弹出键盘  
  35.    
  36. //关闭键盘(比如输入结束后执行) InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(etEditText.getWindowToken(), 0);  
  37.    
  38. //自动弹出键盘  
  39. ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);  
  40. etEditText.requestFocus();//让EditText获得焦点,但是获得焦点并不会自动弹出键盘  
  41. 7、android:layout_gravity和android:gravity的区别  
  42. (1)android:layout_gravity是本元素对父元素的重力方向。  
  43. (2)android:gravity是本元素所有子元素的重力方向。  
  44. 8、android:padding和android:layout_margin区别  
  45. 这两个都可以设置边距,但有细微的区别:  
  46. (1)android:padding是相对父view的边距  
  47. (2)android:layout_margin是相对同一级View的边距  
  48. 例:LinearLayout是水平布局,下面有两个按钮,  
  49. (a)如果右边的按钮想距左边的按钮15px,因为这两个按钮是同一级的,应该用android:layout_margin;  
  50. (b)如果右边的按钮想距左边的距离为350px,应该用android:padding  
  51. 9、android:numeric//只接受数字  
  52. android:numeric来控制输入的数字类型,一共有三种分别为integer(正整数)、signed(带符号整数,有正负)和decimal(浮点数)。  
  53. 10、Enter键图标的设置  
  54. 软键盘的Enter键默认显示的是“完成”文本,我们知道按Enter建表示前置工作已经准备完毕了,要去什么什么啦。比如,在一个搜索中,我们输入要搜索的文本,然后按Enter表示要去搜索了,但是默认的Enter键显示的是“完成”文本,看着不太合适,不符合搜索的语义,如果能显示“搜索”两个字或者显示一个表示搜索的图标多好。事实证明我们的想法是合理的,Android也为我们提供的这样的功能。通过设置android:imeOptions来改变默认的“完成”文本。这里举几个常用的常量值:  
  55. (1)actionUnspecified未指定,对应常量EditorInfo.IME_ACTION_UNSPECIFIED效果:  
  56. (2)actionNone 没有动作,对应常量EditorInfo.IME_ACTION_NONE效果:  
  57. (3)actionGo去往,对应常量EditorInfo.IME_ACTION_GO 效果:  
  58. (4)actionSearch 搜索,对应常量EditorInfo.IME_ACTION_SEARCH效果:   
  59. (5)actionSend 发送,对应常量EditorInfo.IME_ACTION_SEND效果:  
  60. (6)actionNext 下一个,对应常量EditorInfo.IME_ACTION_NEXT效果:  
  61. (7)actionDone 完成,对应常量EditorInfo.IME_ACTION_DONE效果:  
  62.    
  63. 11、使用android:imeOptinos可对Android自带的软键盘进行一些界面上的设置:  
  64. android:imeOptions="flagNoExtractUi" //使软键盘不全屏显示,只占用一部分屏幕 同时,这个属性还能控件软键盘右下角按键的显示内容,默认情况下为回车键 android:imeOptions="actionNone" //输入框右侧不带任何提示 android:imeOptions="actionGo"   //右下角按键内容为'开始' android:imeOptions="actionSearch" //右下角按键为放大镜图片,搜索 android:imeOptions="actionSend"   //右下角按键内容为'发送' android:imeOptions="actionNext"  //右下角按键内容为'下一步' android:imeOptions="actionDone" //右下角按键内容为'完成'  
  65. 12、限定edittext能输入数字和字母,并且默认输入为数字,如身份证号码  
  66. android:inputType="number" android:digits="0123456789xyzXYZ"  
  67. 13、软键盘的调起导致原来的界面被挤上去,或者导致界面下面的tab导航被挤上去,解决方法如下  
  68. 解决方法:  
  69. 使用Manifest中的Activity的android:windowSoftInputMode的"adjustPan"属性。  
  70. 另外注意:有关软键盘的问题可参考android:windowSoftInputMode中属性。  
  71. 14、edittext光标详解 edittext.requestFocusFromTouch();//让光标放入到点击位置。 edittext.requestFocus();//默认方式获得焦点  
  72. EditText editor = (EditText)getCurrentView();//光标处插入 int cursor = editor.getSelectionStart(); editor.getText().insert(cursor,delta);  
  73.    
  74. 让光标移到末端(这样文字就会向前显示) EditText et = ... String text = "text"; et.setText(text); et.setSelection(text.length());  
  75.    
  76. android:cursorVisible="false" 隐藏光标  
  77. android:background="#00000000"//不要文本框背景   
  78.    
  79.    
  80. Android - 文本框的输入法控制和默认焦点设置  
  81. 在开发中,必不可少的会使用到文本框(EditText)来进行数据录入,也就会需要对输入法进行一些控制。  
  82. 先看下LAYOUT定义文件中的和输入法有关的属性:  
  83. 属性名  
  84. 说明  
  85. android:inputType  
  86. 指定输入法的类型,int类型,可以用|选择多个。取值可以参考:android.text.InputType类。取值包括:text,  
  87.   textUri, phone,number,等。  
  88. android:imeOptions  
  89. 指定输入法窗口中的回车键的功能,可选值为normal,  
  90.   actionNext,actionDone,actionSearch等。部分输入法对此的支持可能不够好。  
  91. 下面的LAYOUT定义文件举了一些例子说明inputType和imeOptions的使用。  
  92. <EditText  
  93. android:id="@+id/textNormal"  
  94. android:layout_width="fill_parent"  
  95. android:layout_height="wrap_content"  
  96. android:hint="Normal  
  97. text"  
  98. android:inputType="text"  
  99. android:imeOptions="actionNext"  
  100. />  
  101. <EditText  
  102. android:id="@+id/textInteger"  
  103. android:layout_width="fill_parent"  
  104. android:layout_height="wrap_content"  
  105. android:hint="Integer  
  106. only"  
  107. android:inputType="number"  
  108. android:imeOptions="actionNext"  
  109. />  
  110. <EditText  
  111. android:id="@+id/textPhone"  
  112. android:layout_width="fill_parent"  
  113. android:layout_height="wrap_content"  
  114. android:hint="Phone  
  115. number"  
  116. android:inputType="phone"  
  117. android:imeOptions="actionNext"  
  118. />  
  119. <EditText  
  120. android:id="@+id/textEmail"  
  121. android:layout_width="fill_parent"  
  122. android:layout_height="wrap_content"  
  123. android:hint="Email"  
  124. android:imeOptions="actionSend"  
  125. android:inputType="textEmailAddress"  
  126. />  
  127. <EditText  
  128. android:id="@+id/textSite"  
  129. android:layout_width="fill_parent"  
  130. android:layout_height="wrap_content"  
  131. android:hint="Web  
  132. Site"  
  133. android:imeOptions="actionDone"  
  134. android:inputType="textUri"  
  135. />  
  136.   
  137.   
  138. 有时候也要对intent的默认焦点进行设置,不至于在intent跳转的时候默认焦点(光标)在EditText上,导致进入intent就打开输入法,影响界面美观。  
  139. 默认焦点的顺序是:从上倒下  
  140. 从左到右第一个可以输入的控件作为焦点  
  141. 可以使用:  
  142. button.setFocusable(true);  
  143. button.requestFocus();  
  144. button.setFocusableInTouchMode(true);  
  145. 也可以:  
  146. 在EditText前面放置一个看不到的LinearLayout,让他率先获取焦点:  
  147. <LinearLayout  
  148. android:focusable="true"  
  149. android:focusableInTouchMode="true"  
  150. android:layout_width="0px"  
  151. android:layout_height="0px"/>  
  152. Android EditText 属性汇总  
  153.    
  154.   
  155. Android EditText 属性汇总  
  156.   
  157.    
  158.   
  159. android:layout_gravity="center_vertical" 设置控件显示的位置:默认top,这里居中显示,还有bottom android:hint="请输入数字!"  
  160.   
  161. 设置显示在空间上的提示信息 android:numeric="integer" 设置只能输入整数,如果是小数则是:  
  162.   
  163. decimal android:singleLine="true" 设置单行输入,一旦设置为true,则文字不会自动换行。  
  164.   
  165. android:password="true" 设置只能输入密码  
  166.   
  167. android:textColor = "#ff8c00" 字体颜色  
  168.   
  169. android:textStyle="bold" 字体,bold, italic, bolditalic android:textSize="20dip" 大小  
  170.   
  171. android:capitalize = "characters" 以大写字母写  
  172.   
  173. android:textAlign="center" EditText没有这个属性,但TextView有 android:textColorHighlight="#cccccc" 被选中文字的底色,默认为蓝色  
  174.   
  175. android:textColorHint="#ffff00" 设置提示信息文字的颜色,默认为灰色 android:textScaleX="1.5" 控制字与字之间的间距  
  176.   
  177. android:typeface="monospace" 字型,normal, sans, serif, monospace android:background="@null" 空间背景,这里没有,指透明  
  178.   
  179. android:layout_weight="1" 权重,控制控件之间的地位,在控制控件显示的大小时蛮有用的。  
  180.   
  181. android:textAppearance="?android:attr/textAppearanceLargeInverse" 文字外观,这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。不知道这样理解对不对? 通过EditText的layout xml文件中的相关属性来实现:  
  182.   
  183. 1. 密码框属性 android:password="true" 这条可以让EditText显示的内容自动为星号,输入时内容会在1秒内变成*字样。  
  184.   
  185. 2. 纯数字 android:numeric="true" 这条可以让输入法自动变为数字输入键盘,同时仅允许0-9的数字输入  
  186.   
  187. 3. 仅允许 android:capitalize="cwj1987" 这样仅允许接受输入cwj1987,一般用于密码验证 下面是一些扩展的风格属性  
  188.   
  189. android:editable="false" 设置EditText不可编辑  
  190.   
  191. android:singleLine="true" 强制输入的内容在单行  
  192.   
  193. android:ellipsize="end" 自动隐藏尾部溢出数据,一般用于文字内容过长一行无法全部显示时  

推荐阅读