• 16条Android开发小经验


    1. TextView中的getTextSize返回值是以像素(px)为单位的,

     

    而setTextSize()是以sp为单位的.

    所以如果直接用返回的值来设置会出错,解决办法是

    用setTextSize()的另外一种形式,可以指定单位:
    [java] view plaincopy
     
    1. <span style="font-size:16px;">setTextSize(int unit, int size)  
    2. TypedValue.COMPLEX_UNIT_PX : Pixels  
    3. TypedValue.COMPLEX_UNIT_SP : Scaled Pixels  
    4. 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(推荐使用)

    [java] view plaincopy
     
    1. 从网上获取一个网页,在一个TextView中将其源代码显示出来  
    2. package org.unique.async;  
    3. import java.io.ByteArrayOutputStream;  
    4. import java.io.InputStream;  
    5. import java.util.ArrayList;  
    6.   
    7. import org.apache.http.HttpEntity;  
    8. import org.apache.http.HttpResponse;  
    9. import org.apache.http.client.HttpClient;  
    10. import org.apache.http.client.methods.HttpGet;  
    11. import org.apache.http.impl.client.DefaultHttpClient;  
    12.   
    13. import android.app.Activity;  
    14. import android.app.ProgressDialog;  
    15. import android.content.Context;  
    16. import android.content.DialogInterface;  
    17. import android.os.AsyncTask;  
    18. import android.os.Bundle;  
    19. import android.os.Handler;  
    20. import android.os.Message;  
    21. import android.view.View;  
    22. import android.widget.Button;  
    23. import android.widget.EditText;  
    24. import android.widget.TextView;  
    25.   
    26. public class NetworkActivity extends Activity{  
    27.     private TextView message;  
    28.     private Button open;  
    29.     private EditText url;  
    30.   
    31.     @Override  
    32.     public void onCreate(Bundle savedInstanceState) {  
    33.        super.onCreate(savedInstanceState);  
    34.        setContentView(R.layout.network);  
    35.        message= (TextView) findViewById(R.id.message);  
    36.        url= (EditText) findViewById(R.id.url);  
    37.        open= (Button) findViewById(R.id.open);  
    38.        open.setOnClickListener(new View.OnClickListener() {  
    39.            public void onClick(View arg0) {  
    40.               connect();  
    41.            }  
    42.        });  
    43.   
    44.     }  
    45.   
    46.     private void connect() {  
    47.         PageTask task = new PageTask(this);  
    48.         task.execute(url.getText().toString());  
    49.     }  
    50.   
    51.     class PageTask extends AsyncTask<String, Integer, String> {  
    52.         // 可变长的输入参数,与AsyncTask.exucute()对应  
    53.         ProgressDialog pdialog;  
    54.         public PageTask(Context context){  
    55.             pdialog = new ProgressDialog(context, 0);     
    56.             pdialog.setButton("cancel"new DialogInterface.OnClickListener() {  
    57.              public void onClick(DialogInterface dialog, int i) {  
    58.               dialog.cancel();  
    59.              }  
    60.             });  
    61.             pdialog.setOnCancelListener(new DialogInterface.OnCancelListener() {  
    62.              public void onCancel(DialogInterface dialog) {  
    63.               finish();  
    64.              }  
    65.             });  
    66.             pdialog.setCancelable(true);  
    67.             pdialog.setMax(100);  
    68.             pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  
    69.             pdialog.show();  
    70.   
    71.         }  
    72.         @Override  
    73.         protected String doInBackground(String... params) {  
    74.   
    75.             try{  
    76.   
    77.                HttpClient client = new DefaultHttpClient();  
    78.                // params[0]代表连接的url  
    79.                HttpGet get = new HttpGet(params[0]);  
    80.                HttpResponse response = client.execute(get);  
    81.                HttpEntity entity = response.getEntity();  
    82.                long length = entity.getContentLength();  
    83.                InputStream is = entity.getContent();  
    84.                String s = null;  
    85.                if(is != null) {  
    86.                    ByteArrayOutputStream baos = new ByteArrayOutputStream();  
    87.   
    88.                    byte[] buf = new byte[128];  
    89.   
    90.                    int ch = -1;  
    91.   
    92.                    int count = 0;  
    93.   
    94.                    while((ch = is.read(buf)) != -1) {  
    95.   
    96.                       baos.write(buf, 0, ch);  
    97.   
    98.                       count += ch;  
    99.   
    100.                       if(length > 0) {  
    101.                           // 如果知道响应的长度,调用publishProgress()更新进度  
    102.                           publishProgress((int) ((count / (float) length) * 100));  
    103.                       }  
    104.   
    105.                       // 让线程休眠100ms  
    106.                       Thread.sleep(100);  
    107.                    }  
    108.                    s = new String(baos.toByteArray());              }  
    109.                // 返回结果  
    110.                return s;  
    111.             } catch(Exception e) {  
    112.                e.printStackTrace();  
    113.   
    114.             }  
    115.   
    116.             return null;  
    117.   
    118.         }  
    119.   
    120.         @Override  
    121.         protected void onCancelled() {  
    122.             super.onCancelled();  
    123.         }  
    124.   
    125.         @Override  
    126.         protected void onPostExecute(String result) {  
    127.             // 返回HTML页面的内容  
    128.             message.setText(result);  
    129.             pdialog.dismiss();   
    130.         }  
    131.   
    132.         @Override  
    133.         protected void onPreExecute() {  
    134.             // 任务启动,可以在这里显示一个对话框,这里简单处理  
    135.             message.setText(R.string.task_started);  
    136.         }  
    137.   
    138.         @Override  
    139.         protected void onProgressUpdate(Integer... values) {  
    140.             // 更新进度  
    141.               System.out.println(""+values[0]);  
    142.               message.setText(""+values[0]);  
    143.               pdialog.setProgress(values[0]);  
    144.         }  
    145.   
    146.      }  
    147.   
    148. }  

     

     

    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 filesjavajre_1.5.0_06lib t.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自带的软键盘进行一些界面上的设置: 

     

    [html] view plaincopy
     
    1. android:imeOptions="flagNoExtractUi"  //使软键盘不全屏显示,只占用一部分屏幕    
    2. 同时,这个属性还能控件软键盘右下角按键的显示内容,默认情况下为回车键    
    3. android:imeOptions="actionNone"  //输入框右侧不带任何提示    
    4. android:imeOptions="actionGo"    //右下角按键内容为'开始'    
    5. android:imeOptions="actionSearch"  //右下角按键为放大镜图片,搜索    
    6. android:imeOptions="actionSend"    //右下角按键内容为'发送'    
    7. android:imeOptions="actionNext"   //右下角按键内容为'下一步'    
    8. android:imeOptions="actionDone"  //右下角按键内容为'完成'   


    15.为TextView添加阴影

     

     

    [html] view plaincopy
     
    1. <style name="Overlay">     
    2.     <item name="android:paddingLeft">2dip</item>     
    3.     <item name="android:paddingBottom">2dip</item>     
    4.     <item name="android:textColor">#ffffff</item>     
    5.     <item name="android:textSize">12sp</item>     
    6.     <item name="android:shadowColor">#00ff00</item>     
    7.     <item name="android:shadowDx">5</item>     
    8.     <item name="android:shadowDy">3</item>     
    9.     <item name="android:shadowRadius">6</item>    
    10. </style>    
    11.     
    12. <TextView android:id="@+id/test"     
    13.        android:layout_width="fill_parent"     
    14.        android:layout_height="wrap_content"     
    15.        style="@style/<span style="background-color: rgb(250, 250, 250); font-family: Helvetica, Tahoma, Arial, sans-serif; ">Overlay</span>"     
    16.        android:text="test"     
    17.        android:gravity="center" />    

    16.如何将TextView中的中文设置成粗体? 
    在xml文件中使用android:textStyle="bold" 可以将英文设置成粗体,但是不能将中文设置成粗体,将中文设置成粗体的方法是: 
    TextView tv = (TextView)findViewById(R.id.TextView01); 
    TextPaint tp = tv.getPaint(); 
    tp.setFakeBoldText(true); 

  • 相关阅读:
    中美贸易战再次开启,世界两极化进程正在加快形成!..... Copyright: 1688澳洲新闻网 Read more at: https://www.1688.com.au/world/international/2018/06/17/369368/
    缠师的博客中关于舒伯特中的回帖,细思极恐
    南怀瑾,脱了国学大师的外衣,只剩下江湖和名利
    你可能修了一个假的“不净观”
    陈大惠老师:什么叫道德?
    C#-正则,常用几种数据解析-端午快乐
    html5+go+websocket简单实例代码
    Task三个列子的分享
    golang-web框架revel一个表单提交的总结
    百度流行音乐-资源数据整合
  • 原文地址:https://www.cnblogs.com/xiaochao1234/p/4360419.html
Copyright © 2020-2023  润新知