1.TextView中的getTextSize返回值是以像素(px)为单位的,而setTextSize()是以sp为单位的.所以如果直接用返回的值来设置会出错,解决办法是用setTextSize()的另外一种形式,可以指定单位:
1.
setTextSize(
int
unit,
int
size)
2.
3.
TypedValue.COMPLEX_UNIT_PX : Pixels
4.
5.
TypedValue.COMPLEX_UNIT_SP : Scaled Pixels
6.
7.
TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels
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(推荐使用)
001.
从网上获取一个网页,在一个TextView中将其源代码显示出来
002.
003.
package
org.unique.async;
004.
005.
import
java.io.ByteArrayOutputStream;
006.
007.
import
java.io.InputStream;
008.
009.
import
java.util.ArrayList;
010.
011.
012.
013.
import
org.apache.http.HttpEntity;
014.
015.
import
org.apache.http.HttpResponse;
016.
017.
import
org.apache.http.client.HttpClient;
018.
019.
import
org.apache.http.client.methods.HttpGet;
020.
021.
import
org.apache.http.impl.client.DefaultHttpClient;
022.
023.
024.
025.
import
android.app.Activity;
026.
027.
import
android.app.ProgressDialog;
028.
029.
import
android.content.Context;
030.
031.
import
android.content.DialogInterface;
032.
033.
import
android.os.AsyncTask;
034.
035.
import
android.os.Bundle;
036.
037.
import
android.os.Handler;
038.
039.
import
android.os.Message;
040.
041.
import
android.view.View;
042.
043.
import
android.widget.Button;
044.
045.
import
android.widget.EditText;
046.
047.
import
android.widget.TextView;
048.
049.
050.
051.
public
class
NetworkActivity
extends
Activity{
052.
053.
private
TextView message;
054.
055.
private
Button open;
056.
057.
private
EditText url;
058.
059.
060.
061.
@Override
062.
063.
public
void
onCreate(Bundle savedInstanceState) {
064.
065.
super
.onCreate(savedInstanceState);
066.
067.
setContentView(R.layout.network);
068.
069.
message= (TextView) findViewById(R.id.message);
070.
071.
url= (EditText) findViewById(R.id.url);
072.
073.
open= (Button) findViewById(R.id.open);
074.
075.
open.setOnClickListener(
new
View.OnClickListener() {
076.
077.
public
void
onClick(View arg0) {
078.
079.
connect();
080.
081.
}
082.
083.
});
084.
085.
086.
087.
}
088.
089.
090.
091.
private
void
connect() {
092.
093.
PageTask task =
new
PageTask(
this
);
094.
095.
task.execute(url.getText().toString());
096.
097.
}
098.
099.
100.
101.
class
PageTask
extends
AsyncTask<String, Integer, String> {
102.
103.
// 可变长的输入参数,与AsyncTask.exucute()对应
104.
105.
ProgressDialog pdialog;
106.
107.
public
PageTask(Context context){
108.
109.
pdialog =
new
ProgressDialog(context,
0
);
110.
111.
pdialog.setButton(
"cancel"
,
new
DialogInterface.OnClickListener() {
112.
113.
public
void
onClick(DialogInterface dialog,
int
i) {
114.
115.
dialog.cancel();
116.
117.
}
118.
119.
});
120.
121.
pdialog.setOnCancelListener(
new
DialogInterface.OnCancelListener() {
122.
123.
public
void
onCancel(DialogInterface dialog) {
124.
125.
finish();
126.
127.
}
128.
129.
});
130.
131.
pdialog.setCancelable(
true
);
132.
133.
pdialog.setMax(
100
);
134.
135.
pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
136.
137.
pdialog.show();
138.
139.
140.
141.
}
142.
143.
@Override
144.
145.
protected
String doInBackground(String... params) {
146.
147.
148.
149.
try
{
150.
151.
152.
153.
HttpClient client =
new
DefaultHttpClient();
154.
155.
// params[0]代表连接的url
156.
157.
HttpGet get =
new
HttpGet(params[
0
]);
158.
159.
HttpResponse response = client.execute(get);
160.
161.
HttpEntity entity = response.getEntity();
162.
163.
long
length = entity.getContentLength();
164.
165.
InputStream is = entity.getContent();
166.
167.
String s =
null
;
168.
169.
if
(is !=
null
) {
170.
171.
ByteArrayOutputStream baos =
new
ByteArrayOutputStream();
172.
173.
174.
175.
byte
[] buf =
new
byte
[
128
];
176.
177.
178.
179.
int
ch = -
1
;
180.
181.
182.
183.
int
count =
0
;
184.
185.
186.
187.
while
((ch = is.read(buf)) != -
1
) {
188.
189.
190.
191.
baos.write(buf,
0
, ch);
192.
193.
194.
195.
count += ch;
196.
197.
198.
199.
if
(length >
0
) {
200.
201.
// 如果知道响应的长度,调用publishProgress()更新进度
202.
203.
publishProgress((
int
) ((count / (
float
) length) *
100
));
204.
205.
}
206.
207.
208.
209.
// 让线程休眠100ms
210.
211.
Thread.sleep(
100
);
212.
213.
}
214.
215.
s =
new
String(baos.toByteArray()); }
216.
217.
// 返回结果
218.
219.
return
s;
220.
221.
}
catch
(Exception e) {
222.
223.
e.printStackTrace();
224.
225.
226.
227.
}
228.
229.
230.
231.
return
null
;
232.
233.
234.
235.
}
236.
237.
238.
239.
@Override
240.
241.
protected
void
onCancelled() {
242.
243.
super
.onCancelled();
244.
245.
}
246.
247.
248.
249.
@Override
250.
251.
protected
void
onPostExecute(String result) {
252.
253.
// 返回HTML页面的内容
254.
255.
message.setText(result);
256.
257.
pdialog.dismiss();
258.
259.
}
260.
261.
262.
263.
@Override
264.
265.
protected
void
onPreExecute() {
266.
267.
// 任务启动,可以在这里显示一个对话框,这里简单处理
268.
269.
message.setText(R.string.task_started);
270.
271.
}
272.
273.
274.
275.
@Override
276.
277.
protected
void
onProgressUpdate(Integer... values) {
278.
279.
// 更新进度
280.
281.
System.out.println(
""
+values[
0
]);
282.
283.
message.setText(
""
+values[
0
]);
284.
285.
pdialog.setProgress(values[
0
]);
286.
287.
}
288.
289.
290.
291.
}
292.
293.
294.
295.
}
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自带的软键盘进行一些界面上的设置:
01.
android:imeOptions=
"flagNoExtractUi"
//使软键盘不全屏显示,只占用一部分屏幕
02.
03.
同时,这个属性还能控件软键盘右下角按键的显示内容,默认情况下为回车键
04.
05.
android:imeOptions=
"actionNone"
//输入框右侧不带任何提示
06.
07.
android:imeOptions=
"actionGo"
//右下角按键内容为'开始'
08.
09.
android:imeOptions=
"actionSearch"
//右下角按键为放大镜图片,搜索
10.
11.
android:imeOptions=
"actionSend"
//右下角按键内容为'发送'
12.
13.
android:imeOptions=
"actionNext"
//右下角按键内容为'下一步'
14.
15.
android:imeOptions=
"actionDone"
//右下角按键内容为'完成'
15.为TextView添加阴影
01.
<
style
name
=
"Overlay"
>
02.
03.
<
item
name
=
"android:paddingLeft"
>2dip</
item
>
04.
05.
<
item
name
=
"android:paddingBottom"
>2dip</
item
>
06.
07.
<
item
name
=
"android:textColor"
>#ffffff</
item
>
08.
09.
<
item
name
=
"android:textSize"
>12sp</
item
>
10.
11.
<
item
name
=
"android:shadowColor"
>#00ff00</
item
>
12.
13.
<
item
name
=
"android:shadowDx"
>5</
item
>
14.
15.
<
item
name
=
"android:shadowDy"
>3</
item
>
16.
17.
<
item
name
=
"android:shadowRadius"
>6</
item
>
18.
19.
</
style
>
20.
21.
22.
23.
<
TextView
android:id
=
"@+id/test"
24.
25.
android:layout_width
=
"fill_parent"
26.
27.
android:layout_height
=
"wrap_content"
28.
29.
style
=
"@style/<span style="
background-color: rgb(250, 250, 250); font-family: Helvetica, Tahoma, Arial, sans-serif; ">Overlay</
span
>"
30.
31.
android:text="test"
32.
33.
android:gravity="center" />
16.如何将TextView中的中文设置成粗体?
在xml文件中使用android:textStyle="bold" 可以将英文设置成粗体,但是不能将中文设置成粗体,将中文设置成粗体的方法是:
TextView tv = (TextView)findViewById(R.id.TextView01);
TextPaint tp = tv.getPaint();
tp.setFakeBoldText(true);