Android开发中15条小经验

来源:互联网 发布:耳机线材靠谱的淘宝店 编辑:程序博客网 时间:2024/05/22 01:32

转自出处:http://blog.csdn.net/gao_chun/article/details/45502313

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

setTextSize(intunit,intsize) TypedValue.COMPLEX_UNIT_PX:Pixels TypedValue.COMPLEX_UNIT_SP:ScaledPixels TypedValue.COMPLEX_UNIT_DIP:DeviceIndependentPixels

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 )

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

packageorg.unique.async; importjava.io.ByteArrayOutputStream; importjava.io.InputStream; importjava.util.ArrayList; importorg.apache.http.HttpEntity; importorg.apache.http.HttpResponse; importorg.apache.http.client.HttpClient; importorg.apache.http.client.methods.HttpGet; importorg.apache.http.impl.client.DefaultHttpClient; importandroid.app.Activity; importandroid.app.ProgressDialog; importandroid.content.Context; importandroid.content.DialogInterface; importandroid.os.AsyncTask; importandroid.os.Bundle; importandroid.os.Handler; importandroid.os.Message; importandroid.view.View; importandroid.widget.Button; importandroid.widget.EditText; importandroid.widget.TextView; publicclassNetworkActivityextendsActivity{   privateTextViewmessage;   privateButtonopen;   privateEditTexturl;   @Override   publicvoidonCreate(BundlesavedInstanceState){    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(newView.OnClickListener(){      publicvoidonClick(Viewarg0){        connect();      }    });   }   privatevoidconnect(){     PageTasktask=newPageTask(this);     task.execute(url.getText().toString());   }   classPageTaskextendsAsyncTask<String,Integer,String>{     //可变长的输入参数,与AsyncTask.exucute()对应     ProgressDialogpdialog;     publicPageTask(Contextcontext){       pdialog=newProgressDialog(context,0);         pdialog.setButton("cancel",newDialogInterface.OnClickListener(){       publicvoidonClick(DialogInterfacedialog,inti){        dialog.cancel();       }       });       pdialog.setOnCancelListener(newDialogInterface.OnCancelListener(){       publicvoidonCancel(DialogInterfacedialog){        finish();       }       });       pdialog.setCancelable(true);       pdialog.setMax(100);       pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);       pdialog.show();     }     @Override     protectedStringdoInBackground(String...params){       try{        HttpClientclient=newDefaultHttpClient();        //params[0]代表连接的url        HttpGetget=newHttpGet(params[0]);        HttpResponseresponse=client.execute(get);        HttpEntityentity=response.getEntity();        longlength=entity.getContentLength();        InputStreamis=entity.getContent();        Strings=null;        if(is!=null){          ByteArrayOutputStreambaos=newByteArrayOutputStream();          byte[]buf=newbyte[128];          intch=-1;          intcount=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=newString(baos.toByteArray());}        //返回结果        returns;       }catch(Exceptione){        e.printStackTrace();       }       returnnull;     }     @Override     protectedvoidonCancelled(){       super.onCancelled();     }     @Override     protectedvoidonPostExecute(Stringresult){       //返回HTML页面的内容       message.setText(result);       pdialog.dismiss();      }     @Override     protectedvoidonPreExecute(){       //任务启动,可以在这里显示一个对话框,这里简单处理       message.setText(R.string.task_started);     }     @Override     protectedvoidonProgressUpdate(Integer...values){       //更新进度        System.out.println(""+values[0]);        message.setText(""+values[0]);        pdialog.setProgress(values[0]);     }   } }

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


9. Unable to open sync connection!
把设置里的USB调试重启

10.EditText设置光标位置问题

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

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

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


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

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

<stylename="Overlay">     <itemname="android:paddingLeft">2dip</item>     <itemname="android:paddingBottom">2dip</item>     <itemname="android:textColor">#ffffff</item>     <itemname="android:textSize">12sp</item>     <itemname="android:shadowColor">#00ff00</item>     <itemname="android:shadowDx">5</item>     <itemname="android:shadowDy">3</item>     <itemname="android:shadowRadius">6</item>  </style>  <TextViewandroid:id="@+id/test"      android:layout_width="fill_parent"      android:layout_height="wrap_content"      style="@style/<spanstyle="background-color:rgb(250,250,250);font-family:Helvetica,Tahoma,Arial,sans-serif;">Overlay</span>"      android:text="test"      android:gravity="center"/>

15.如何将TextView中的中文设置成粗体?
在xml文件中使用android:textStyle=”bold” 可以将英文设置成粗体,但是不能将中文设置成粗体,将中文设置成粗体的方法是:

TextView tv = (TextView)findViewById(R.id.TextView01);TextPaint tp = tv.getPaint();tp.setFakeBoldText(true);



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信信息写好没有发送两字怎么办 3d模型导进去 材质丢失怎么办 3d模型导入材质没了怎么办 淘宝上的电视尺寸与实际不符怎么办 医师面试题号忘了写怎么办 淘宝买东西东西被别人拿走了怎么办 9个月宝宝上肢支撑不好怎么办 宝宝快十一个月了留口水怎么办 两岁宝宝不会自己登着大小便怎么办 小新家的房子被炸了房贷怎么办 怀孕8个月感冒鼻窦炎头疼怎么办 买的全身镜下面的框子坏了怎么办 单位上司姐姐每天要接我上班怎么办 企业微信公众号中的文章边框怎么办 怎么办我在数学答题卡上画了分割线 游泳的时候泳裙飘起来怎么办 两岁宝宝误服了酵素梅怎么办 人被困在山洞里没有氧气怎么办? 一个人太爱你可你不爱他怎么办 牙齿还没掉又长了新牙齿怎么办 两岁宝宝牙齿发黑烂牙怎么办 怀孕八个月被小孩压到肚子了怎么办 在花场上班客人约我出去玩怎么办 小天才电话手表开不了机怎么办 黑色笔芯弄在白色衣服上怎么办 su文件打开是意外的格式怎么办 su卡的动一下就卡怎么办 犀牛vary渲染的太曝光了怎么办 脑子老是乱想幻想控制不住怎么办 猫抓了破了点皮怎么办 小孩子喜欢玩别人家的玩具怎么办 孩子把别人家的玩具玩坏了怎么办 小新和爸妈一起睡觉那他们怎么办 ps画纸画的时候一直在移动怎么办 宝宝磕碰到家具上鼻梁碰破该怎么办 月经推迟11天了怎么办孕测棒单杠 小孩子不小心把蜡笔吃一点怎么办 线切割切割的工件表面有条纹怎么办 苹果手机不能用流量更新吃鸡怎么办 吃鸡更新成雨林如果内存不够怎么办 绝地求生刺激战场背包满了怎么办