提高工作效率的16条Android开发小经验

笔者在经历了多个Android开发项目之后,个人积累也从别处学习了很多在Android开发中非常实用的小经验。下面从中选择了最实用的16条,分享给大家。

1.TextView中的getTextSize返回值是以像素(px)为单位的,而setTextSize()是以sp为单位的.所以如果直接用返回的值来设置会出错,解决办法是用setTextSize()的另外一种形式,可以指定单位:


1

2

3

4

<span style="font-size:16px;">setTextSize(int unit, int size)   

TypedValue.COMPLEX_UNIT_PX : Pixels   

TypedValue.COMPLEX_UNIT_SP : Scaled Pixels   

TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels</span>

2.在继承自View时,绘制bitmap时,需要将图片放到新建的drawable-xdpi中,否则容易出现绘制大小发生改变。

3.在文字中加下划线: textView.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG)。

4.scrollView是继承自frameLayout,所以在使用LayoutParams时需要用frameLayout的。

5.在Android中几种网络编程的方式:

(1)针对TCP/IP的Socket、ServerSocket

(2)针对UDP的DatagramSocket、DatagramPackage。这里需要注意的是,考虑到Android设备通常是手持终端,IP都是随着上网进行分配的。不是固定的。因此开发也是有 一点与普通互联网应用有所差异的。

(3)针对直接URL的HttpURLConnection

(4)Google集成了Apache HTTP客户端,可使用HTTP进行网络编程。针对HTTP,Google集成了Appache Http core和httpclient 4版本,因此特别注意Android不支持 httpclient 3.x系列,而且目前并不支持Multipart(MIME),需要自行添加httpmime.jar

(5)使用Web Service。Android可以通过开源包如jackson去支持Xmlrpc和Jsonrpc,另外也可以用Ksoap2去实现Webservice

(6) 直接使用WebView视图组件显示网页。基于WebView 进行开发,Google已经提供了一个基于chrome-lite的Web浏览器,直接就可以进行上网浏览网页。

6.TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)

这个是我们最常用的一个构造方法,

float fromXDelta:这个参数表示动画开始的点离当前View X坐标上的差值;

float toXDelta, 这个参数表示动画结束的点离当前View X坐标上的差值;

float fromYDelta, 这个参数表示动画开始的点离当前View Y坐标上的差值;

float toYDelta)这个参数表示动画开始的点离当前View Y坐标上的差值;

如果view在A(x,y)点 那么动画就是从B点(x+fromXDelta, y+fromYDelta)点移动到C 点 (x+toXDelta,y+toYDelta)点。

7.android提供了几种在其他线程中访问UI线程的方法

Activity.runOnUiThread( Runnable )

View.post( Runnable )

View.postDelayed( Runnable, long )

Hanlder

AsyncTask(推荐使用)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

从网上获取一个网页,在一个TextView中将其源代码显示出来   

package org.unique.async;   

import java.io.ByteArrayOutputStream;   

import java.io.InputStream;   

import java.util.ArrayList;   

   

import org.apache.http.HttpEntity;   

import org.apache.http.HttpResponse;   

import org.apache.http.client.HttpClient;   

import org.apache.http.client.methods.HttpGet;   

import org.apache.http.impl.client.DefaultHttpClient;   

   

import android.app.Activity;   

import android.app.ProgressDialog;   

import android.content.Context;   

import android.content.DialogInterface;   

import android.os.AsyncTask;   

import android.os.Bundle;   

import android.os.Handler;   

import android.os.Message;   

import android.view.View;   

import android.widget.Button;   

import android.widget.EditText;   

import android.widget.TextView;   

   

public class NetworkActivity extends Activity{   

    private TextView message;   

    private Button open;   

    private EditText url;   

   

    @Override

    public void onCreate(Bundle savedInstanceState) {   

       super.onCreate(savedInstanceState);   

       setContentView(R.layout.network);   

       message= (TextView) findViewById(R.id.message);   

       url= (EditText) findViewById(R.id.url);   

       open= (Button) findViewById(R.id.open);   

       open.setOnClickListener(new View.OnClickListener() {   

           public void onClick(View arg0) {   

              connect();   

           }   

       });   

   

    }   

   

    private void connect() {   

        PageTask task = new PageTask(this);   

        task.execute(url.getText().toString());   

    }   

   

    class PageTask extends AsyncTask<String, Integer, String> {   

        // 可变长的输入参数,与AsyncTask.exucute()对应   

        ProgressDialog pdialog;   

        public PageTask(Context context){   

            pdialog = new ProgressDialog(context, 0);      

            pdialog.setButton("cancel"new DialogInterface.OnClickListener() {   

             public void onClick(DialogInterface dialog, int i) {   

              dialog.cancel();   

             }   

            });   

            pdialog.setOnCancelListener(new DialogInterface.OnCancelListener() {   

             public void onCancel(DialogInterface dialog) {   

              finish();   

             }   

            });   

            pdialog.setCancelable(true);   

            pdialog.setMax(100);   

            pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);   

            pdialog.show();   

   

        }   

        @Override

        protected String doInBackground(String... params) {   

   

            try{   

   

               HttpClient client = new DefaultHttpClient();   

               // params[0]代表连接的url   

               HttpGet get = new HttpGet(params[0]);   

               HttpResponse response = client.execute(get);   

               HttpEntity entity = response.getEntity();   

               long length = entity.getContentLength();   

               InputStream is = entity.getContent();   

               String s = null;   

               if(is != null) {   

                   ByteArrayOutputStream baos = new ByteArrayOutputStream();   

   

                   byte[] buf = new byte[128];   

   

                   int ch = -1;   

   

                   int count = 0;   

   

                   while((ch = is.read(buf)) != -1) {   

   

                      baos.write(buf, 0, ch);   

   

                      count += ch;   

   

                      if(length > 0) {   

                          // 如果知道响应的长度,调用publishProgress()更新进度   

                          publishProgress((int) ((count / (float) length) * 100));   

                      }   

   

                      // 让线程休眠100ms   

                      Thread.sleep(100);   

                   }   

                   s = new String(baos.toByteArray());              }   

               // 返回结果   

               return s;   

            catch(Exception e) {   

               e.printStackTrace();   

   

            }   

   

            return null;   

   

        }   

   

        @Override

        protected void onCancelled() {   

            super.onCancelled();   

        }   

   

        @Override

        protected void onPostExecute(String result) {   

            // 返回HTML页面的内容   

            message.setText(result);   

            pdialog.dismiss();    

        }   

   

        @Override

        protected void onPreExecute() {   

            // 任务启动,可以在这里显示一个对话框,这里简单处理   

            message.setText(R.string.task_started);   

        }   

   

        @Override

        protected void onProgressUpdate(Integer... values) {   

            // 更新进度   

              System.out.println(""+values[0]);   

              message.setText(""+values[0]);   

              pdialog.setProgress(values[0]);   

        }   

   

     }   

   

}

8.Spinner不能用在dialog和tabhost中的解决办法。

9.eclipse关联JDK源码

(1).点 “window”-> "Preferences" -> "Java" -> "Installed JRES"

(2).此时"Installed JRES"右边是列表窗格,列出了系统中的 JRE 环境,选择你的JRE,然后点边上的 "Edit...", 会出现一个窗口(Edit JRE)

(3).选中rt.jar文件的这一项:“c:\program files\java\jre_1.5.0_06\lib\rt.jar”点 左边的“+” 号展开它,

(4).展开后,可以看到“Source Attachment:(none)”,点这一项,点右边的按钮“Source Attachment...”, 选择你的JDK目录下的 “src.zip”文件

10.Unable to open sync connection!

把设置里的USB调试重启

11.EditText设置光标位置问题

EditText中有一些预置文本的时候,想把光标调到最前面,一开始是使用的setSelection(0),结果发现在三星P1000上面有问题。经过研究发现需要先调用EditText.requestFocus(),再调用setSelection(0)。否则的话,在2.x的机器上有问题,但3.x上面是好着的。

12.Android中Home键被系统保留,无法象监听回退键一样用onKeyDown,但是可以根据按下home键时会触发的activity和view的一些事件来添加自己的处理代码.网上有人说可以用onAttachWindow来拦截Home键,没试过

13.在用surfaceView渲染时,如果要想在需要时其中出现其他View,可以将surfaceView和其他View放在layout中,平常时可以将其他view隐藏。

14.使用android:imeOptinos可对Android自带的软键盘进行一些界面上的设置:


1

2

3

4

5

6

7

8

android:imeOptions="flagNoExtractUi" //使软键盘不全屏显示,只占用一部分屏幕

同时,这个属性还能控件软键盘右下角按键的显示内容,默认情况下为回车键

android:imeOptions="actionNone" //输入框右侧不带任何提示

android:imeOptions="actionGo" //右下角按键内容为‘开始‘

android:imeOptions="actionSearch" //右下角按键为放大镜图片,搜索

android:imeOptions="actionSend" //右下角按键内容为‘发送‘

android:imeOptions="actionNext" //右下角按键内容为‘下一步‘

android:imeOptions="actionDone" //右下角按键内容为‘完成‘

15.为TextView添加阴影


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<style name="Overlay">      

    <item name="android:paddingLeft">2dip</item>      

    <item name="android:paddingBottom">2dip</item>      

    <item name="android:textColor">#ffffff</item>      

    <item name="android:textSize">12sp</item>      

    <item name="android:shadowColor">#00ff00</item>      

    <item name="android:shadowDx">5</item>      

    <item name="android:shadowDy">3</item>      

    <item name="android:shadowRadius">6</item>     

</style>     

     

<TextView android:id="@+id/test"

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

       style="@style/<span style="background-color: rgb(250250250); font-family: Helvetica, Tahoma, Arial, sans-serif; ">Overlay</span>"

       android:text="test"

       android:gravity="center" />

16.如何将TextView中的中文设置成粗体?

在xml文件中使用android:textStyle="bold" 可以将英文设置成粗体,但是不能将中文设置成粗体,将中文设置成粗体的方法是:

TextView tv = (TextView)findViewById(R.id.TextView01);

TextPaint tp = tv.getPaint();

tp.setFakeBoldText(true);

相关推荐:

Android程序员不可错过的十款实用工具

轻松一刻:小编又来逗程序员

三猿开泰,走进普通、文艺、2B程序猿的逗比世界

无数美女泣血总结:千万不要嫁给程序猿

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-03 10:55:18

提高工作效率的16条Android开发小经验的相关文章

Android开发小经验

1. TextView中的getTextSize返回值是以像素(px)为单位的, 而setTextSize()是以sp为单位的. 所以如果直接用返回的值来设置会出错,解决办法是 用setTextSize()的另外一种形式,可以指定单位: [java] view plaincopy <span style="font-size:16px;">setTextSize(int unit, int size) TypedValue.COMPLEX_UNIT_PX : Pixels

开发人员如何提高工作效率一:找出低效的原因

[高效能系列]开发人员如何提高工作效率一:找出低效的原因 高效能工作系列开篇,就以这一篇开发人员如何提高工作效率作为第一篇内容,写这个高效能工作系列的目的很明显,寻找各种可行的方法来提高自己的工作效率,包括时间管理的方法,如何实现目标等 1.  今天这篇的内容是找出效率低下的原因,有低效的开发人员,反过来就是高效的开发人员,那么这两者的效率差体现在哪里呢,把自己的情况也放进去比较                      十二个可让你效率提高的方面 比较方面 熟练人员 一般的开发人员 我 (20

倍数提高工作效率的 Android Studio 奇技

来源:JeremyHe 链接:http://zlv.me/posts/2015/07/13/14_android-studio-tips/ 这是从Philippe Breault的系列文章<Android Studio Tips Of the Day>中提取出来的自认为精华的部分.这些技巧在实际应用中能够非常大的提高工作效率. 关于快捷键 The File Structure Popup ctrl+f12 此快捷键可以调出当前文件的大纲,并通过模糊匹配快速跳转至指定的方法.勾选上“show a

提高工作效率:给设计师的10条建议

这篇文章虽然原本是”写给自由设计师的10条建议”.但仔细读下来,发现对于坐班的设计师人来说,也很有价值.提高效率,收获更好的成果. 对于很多人来说,自由工作是梦寐以求的事.能够自由分配时间,无人监督,听起来就很棒. 实际上,在家工作容易缺少动力,而且很多事情容易让你分心,自制力不强的人当不好自己的老板,无法有效的进行个人管理.同样的,自由设计师也有相似的问题. 一般自由设计师都会列出一堆待办事项,面对长长的列表,很多人感叹工作多得做不完,因此压力很大.下面是几条小建议,让你的自由工作”有章可循”

Vin码识别(车架号识别)技术,摆脱手动录入提高工作效率

本文主题:Vin码识别(车架号识别)技术,摆脱手动录入提高工作效率 本文关键词:Vin码识别,汽车Vin码识别,车架号识别,汽车车架号识别,车代码识别,车代号识别 本文主旨:一.Vin码(车架号)在什么位置 二.什么是Vin码识别(车架号识别) 三.Vin码识别(车架号识别)产品特点 四.Vin码识别(车架号识别)技术参数 五.Vin码识别(车架号识别)应用领域 文章正文: 一.Vin码(车架号)在什么位置 1)除挂车和摩托车外,在门铰链柱.门锁柱或与门锁柱接合的门边之一的柱子上,接近于驾驶员座

码农提高工作效率

俗话说,天下武功,唯快不破.也就是说要练成天下高手的话,出招速度一定要快,这样才能在江湖上立足,不至于掉了脑袋.而程序员要在IT界混出个名堂,也要有高效的工作效率才行.IT行业时时刻刻都产生着新知识.新技术,要想跟上变革肯定要有几把刷子. 而我本人很喜欢各种各样的方式来提高自己的工作效率,可以分享给大家一些经验. 键盘功底要扎实.敲键盘时要使用标准指法.可能你认为这是程序员的基本功,可是我发现其实很多程序员都做不到这点.看着他们敲代码时那笨拙的指法我就心急.其实炼成标准指法不难,相当年我还是一指

oracle提高查询效率的34条方法

注:本文来源:远方的守望者  <oracle提高查询效率的34条方法> oracle提高查询效率的34条方法 1.选择最有效率的表名顺序 (只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是

巧用Excel提高工作效率

程序员如何巧用Excel提高工作效率 主要讲解下Excel中VLOOKUP函数的使用,相比于上一篇中的内容,个人觉得这个相对高级一些. 1.使用背景 为什么会使用到这个函数呢,背景是这样的,有两个系统,我们假设叫A系统,B系统,这两个系统都存储了供应商的信息并且和平相处很长时间,忽然有一天上班,就看到业务同学发的钉钉消息: 业务:在不,我发现你们A系统存储的供应商名称不对啊 我:举个例子 业务:有个供应商A系统叫[联营]苏州食行生鲜电子商务有限公司,但是B系统叫苏州食行生鲜电子商务有限公司,类似

提高工作效率的准则

源于Facebook内部分享PPT:提高工作效率的26大法宝.摘抄我认为有用的. 一.Work more when you're in the zone.Relax when you're not. It's normal to have days where you just can't work and days where you'll work 12 hours straight. (当你在状态时,就多干点,不然就好好休息) 二.Respect your time and make it