当前位置: 首页 > 科技观察

Android开发的16条小经验

时间:2023-03-12 07:50:40 科技观察

2dip2dip#ffffff<项目名称="android:textSize">12sp#00ff005361.TextView中getTextSize的返回值以像素(px)为单位,而setTextSize()以sp为单位。所以如果直接使用返回值来设置会出错,解决方法是使用另一种形式的setTextSize(),可以指定单位:setTextSize(intunit,intsize)TypedValue.COMPLEX_UNIT_PX:PixelsTypedValue.COMPLEX_UNIT_SP:ScaledPixelsTypedValue.COMPLEX_UNIT_DIP:DeviceIndependentPixels2。继承View时,绘制位图时,需要将图片放在新建的drawable-xdpi中,否则容易改变绘制尺寸。3.给文字下划线:textView.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);4、scrollView继承自frameLayout,所以在使用LayoutParams时需要使用frameLayout5、Android中的几种网络编程方式:(1)TCP/IP的Socket和ServerSocket(2)UDP的SocketDatagramSocket、DatagramPackage。这里需要注意的是,考虑到Android设备通常是手持终端,IP是随上网分配的。不固定。因此,开发与普通的互联网应用有些不同。(3)HttpURLConnectionfordirectURLs(4)Google集成了ApacheHTTP客户端,可以使用HTTP进行网络编程。对于HTTP,Google已经集成了AppacheHttpcore和httpclient4版本,所以要特别注意Android不支持httpclient3.x系列,目前不支持Multipart(MIME),需要添加httpmime.jar(5)使用网络服务。Android可以通过jackson等开源包支持Xmlrpc和Jsonrpc。另外,可以使用Ksoap2实现Webservice(6),直接使用WebView视图组件显示网页。基于WebView开发,Google提供了基于chrome-lite的网页浏览器,可以直接浏览互联网上的网页。6.TranslateAnimation(floatfromXDelta,floattoXDelta,floatfromYDelta,floattoYDelta)  这是我们最常用的构造方法,  floatfromXDelta:该参数表示动画起点与X坐标的差值当前的查看值;  floattoXDelta,该参数表示动画结束点与当前View的X坐标的差值;  floatfromYDelta,该参数表示动画开始点与当前View的Y坐标的差值;  floattoYDelta)该参数表示动画起点与当前View的Y坐标的差值;  如果视图在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)HanlderAsyncTask(推荐使用)从网上获取一个网页,在一个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;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.network);message=(TextView)findViewById(R.id.message);url=(EditText)findViewById(R.id.url);打开=(Button)findViewById(R.id.open);open.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewarg0){connect();}});}privatevoidconnect(){PageTasktask=newPageTask(this);task.execute(url.getText().toString());}classPageTaskextendsAsyncTask{//可变长的输入参数,与AsyncTask.exucute()对应ProgressDialogpdialog;publicPageTask(Contextcontext){pdialog=newProgressDialog(context,0);pdialog.setButton("取消",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();}@OverrideprotectedStringdoInBackground(String...params){try{HttpClientclient=newDefaultHttpClient();//params[0]表示连接的urlHttpGetget=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));}//让线程休眠100msThread.sleep(100);}s=newString(baos.toByteArray());}//返回结果returns;}catch(Exceptione){e.printStackTrace();}returnnull;}@OverrideprotectedvoidonCancelled(){super.onCancelled();}@OverrideprotectedvoidonPostExecute(Stringresult){//返回HTML页面message.setText(result);pdialog.dismiss();}@Overrideprotectedvo的内容idonPreExecute(){//任务启动,这里可以显示一个对话框,这里简单处理message.setText(R.string.task_started);}@overrideprotectedvoidonProgressUpdate(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”->“InstalledJRES”(2)此时“InstalledJRES”右边有一个列表面板,列出了系统中的JRE环境,选择你的JRE,然后点击旁边的“Edit...”,会出现一个窗口(EditJRE)(3).选择rt.jar文件的这一项:“c:\programfiles\java\jre_1.5.0_06\lib\rt.jar”点击左边的“+”号展开,(4)。展开后可以看到Goto"SourceAttachment:(none)",点击此项,点击右边的按钮“SourceAttachment...”,选择你的JDK目录下的“src.zip”文件10.Unable打开同步连接!在设置里重启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自带的软键盘进行一些界面设置:android:imeOptions="flagNoExtractUi"//使软键盘不全屏显示,只占屏幕的一部分同时,该属性还可以控制软键盘右下角按钮的显示Content,默认为回车键android:imeOptions="actionNone"//输入框右侧没有提示android:imeOptions="actionGo"//右下角按钮内容为'开始'android:imeOptions="actionSearch"//右下角按钮为放大镜图片,搜索android:imeOptions="actionSend"//右下角按钮内容为'send'android:imeOptions="actionNext"//右下角按钮内容为'Next'android:imeOptions="actionDone"//右下角按钮内容为'Done'15.给T加阴影extView2dip2dip#ffffff<项目名称="android:textSize">12sp#00ff00536Overlay"android:text="test"android:gravity="center"/>16.如何设置TextView中的中文为粗体?在xml文件中使用android:textStyle="bold"设置英文为粗体,但是不能设置中文为粗体,而中文为粗体的方法是:TextViewtv=(TextView)findViewById(R.id.TextView01);TextPainttp=tv.getPaint();tp.setFakeBoldText(true);