`
qwzs112
  • 浏览: 121200 次
文章分类
社区版块
存档分类
最新评论

提高工作效率的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程序员不可错过的十款实用工具

2
2
分享到:
评论
1 楼 qwzs112 2015-07-22  
希望能对大家有帮助

相关推荐

    Android-提高AndroidUI开发效率的UI库

    QMUI 是腾讯团队推出的一款专为提升 Android 项目 UI 开发效率而设计的开源库。这个库包含了丰富的组件和工具,旨在简化界面设计,优化...总之,QMUI 是一个强大的工具,能够显著提高 Android UI 开发的效率和质量。

    android开发小图标

    综上所述,这套"android开发小图标"资源为Android开发者提供了一站式的图标解决方案,包含了设计和适配的全部要素,无论是新手还是经验丰富的开发者,都能从中受益,快速打造符合Android设计规范、美观易用的应用...

    开发助手专业版 v6.3.5 for Android 一个可以帮助开发者提高效率的工具.rar

    《开发助手专业版 v6.3.5 for Android:提升开发者效率的秘密武器》 在如今快节奏的软件开发...无论你是经验丰富的开发者还是初入行业的新人,这款工具都能成为你得力的助手,帮助你在Android开发的道路上更进一步。

    Android开发艺术探索源码和PDF

    总之,《Android开发艺术探索》这本书结合了高质量的PDF文档和完整的源码,为Android开发者提供了一条全面而深入的学习路径。无论你是初学者还是有一定经验的开发者,都可以从中获得宝贵的知识和实践经验。通过深入...

    Android开发从入门到精通_android_

    《Android开发从入门到精通》是一本针对Android Studio的详细开发指南,旨在帮助初学者和有一定基础的开发者深入了解和掌握Android应用开发的核心技术。在学习Android开发的过程中,Android Studio是官方推荐的集成...

    Android小程序源代码集合

    同时,了解Android Studio IDE的使用也是必不可少的,它是Android开发的官方集成开发环境,提供了丰富的调试和代码编辑功能。 二、小程序框架 在Android小程序开发中,通常会用到Apache的开源库,这些库能帮助...

    android天气预报开发小程序以及相关资料

    在Android平台上开发天气预报小程序是一项综合性的任务,涉及到多个技术领域和组件的集成。下面将详细探讨这个主题,包括核心的开发步骤、所需的技术知识、可能遇到的问题以及解决方案。 首先,"android天气预报...

    下载Android Studio的步骤及基本设置,Android开发建议及开发时提高效率和提升技能.md

    以下内容将详细介绍如何下载、安装以及配置Android Studio,并结合Android开发的最佳实践,提出提高开发效率和技能的建议。 ### 下载与安装Android Studio 为了开始使用Android Studio进行应用开发,首先需要完成...

    Android开发视频教学下载地址

    这篇博文提供的“Android开发视频教学下载地址”无疑为初学者和有经验的开发者提供了一个宝贵的自学平台。Android开发涵盖了许多方面,包括编程语言、UI设计、应用架构、性能优化等,通过视频教学的方式,可以让学习...

    实战Android应用开发-李鸥

    理解Intent的工作机制,是深入Android开发的关键。 10. **第三方库集成**:许多优秀的第三方库,如Glide(图片加载库)、Retrofit(网络请求库)、Dagger(依赖注入框架)等,能极大地提高开发效率和应用性能。学会...

    Android开发入门与实战 第二版 源码 最新更新

    Android开发中,经常使用到诸如Glide(图片加载库)、Retrofit(网络请求库)、Butter Knife(视图绑定库)等第三方库,理解它们的工作原理和使用方法能提高开发效率。 《Android开发入门与实战 第二版》附带的源码...

    Android 开发范例实战宝典

    《Android 开发范例实战宝典》是一本深入浅出的Android应用开发指南,它针对初学者和有经验的开发者提供了丰富的实践案例,旨在帮助读者掌握Android开发的关键技术和最佳实践。这本书涵盖了Android开发的各个方面,...

    经典Android开发教程奉献

    这篇教程集合了全面的Android开发知识,旨在帮助初学者和有经验的开发者深入理解平台的工作原理,提升应用开发技能。以下是本教程涉及的一些关键知识点: 1. **环境搭建**:首先,你需要安装Java Development Kit ...

    Android 开发范例代码大全(第2版)高清版

    Android开发范例代码大全(第2版)采用100多个真实范例来指导你如何:使用外部库来提高工作效率 ;使用Android NDK和Renderscript来提高应用程序 的性能;设计高性能、响应及时、无缝衔接的应用程序 ;在设备和其他...

    Android开发艺术探索pdf版

    总的来说,《Android开发艺术探索》是一本全面而深入的Android开发指南,无论你是初学者还是有经验的开发者,都能从中获益匪浅,提升自己的开发艺术,创作出更具吸引力的Android应用。通过阅读和实践,你可以更好地...

    Android开发关键技术与精彩案例全书源代码

    在Android开发过程中,掌握关键技术与实施精彩的案例是提升应用质量与用户体验的关键。"Android开发关键技术与精彩案例全书源代码"提供了丰富的学习资源,帮助开发者深入理解并实践Android平台的各种功能和特性。...

    android开发助手

    Android开发助手是一款为Android开发者量身打造的工具,旨在帮助初学者和有经验的开发者更高效地进行应用程序的开发工作。这份开发手册包含了Android开发的各个方面,从基础概念到高级技术,提供了详尽的指导和实用...

    Android系统、驱动开发者提高工作效率的小工具.zip

    Android 项目是使用 Android 操作系统和相关开发工具开发的一款移动应用程序。Android 平台提供了丰富的功能和接口,开发人员可以使用 Java 或 Kotlin 等编程语言编写 Android 应用程序。Android 项目也可以是针对...

    Android开发入门与实战包含代码

    在Android开发领域,初学者和经验丰富的开发者都不断寻求学习资源来提升技能。"Android开发入门与实战"是一个绝佳的学习平台,它包含了丰富的实践项目和源代码,旨在帮助你从零基础快速掌握Android应用开发的核心...

Global site tag (gtag.js) - Google Analytics