android小知识
使用SparseArray替代HashMap
- 建议使用SparseArray替代HashMap,据说更省资源,相对来说也更好用
instanceof关键字判断类型
- 这个用处很多,配合这多态使用
LayoutParams的用法:
- 继承自ViewGroup的布局控件都有一个LayoutParams,设置控件宽高时可直接使用ViewGroup.LayoutParams,要设置更多属性的时候要清楚知道当前控件在那个布局中,就用那个布局的类名.LayoutParams。
RadioButton在代码中设置button为空
- 可以使用rb.setButtonDrawable(android.R.color.transparent);
RadioGroup在监听中判断第几个RadioButton被选中了
rg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup rg, int rid) {
int count = rg.getChildCount();
int num = 0;
for (int i = 0; i < count; i++) {
if (rg.getChildAt(i).getId() == rid) {
num = i;
break;
}
}
pager.setCurrentItem(num);
}
});
ThreadLocal理解
- 就是在多个线程访问同一个方法时,使用线程里的全局变量ThreadLocal对象时,ThreadLocal.set时相当于map.put,存了一个线程的id的键与一个对象的值,ThreadLocal.get时相当于用当前线程的id为键,取存储的对象。
activity.setProgress
requestWindowFeature要放在 setContentView前,会在Activity顶部出现进度条
- 确定的进度条requestWindowFeature(Window.FEATURE_PROGRESS);
setContentView(view);
setProgress(100);
- 不确定的进度条
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(view);
setProgressBarVisibility(true);
取两位小数
String fmoney = String.format(“%.2f”, (double) money);
改变TextView部分字体颜色
Spanned html1 = Html
.fromHtml("hello<font color='#49afef'>"+"world"
+ "</font>");
tv.setText(html1);
或
SpannableStringBuilder builder = new SpannableStringBuilder(
"helloworld");
ForegroundColorSpan redSpan = new ForegroundColorSpan(Color.RED);
builder.setSpan(redSpan, 2, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(builder);
service的onStartCommand的四个返回值
- START_STICKY: 如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。
- START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务
START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
inputstream、outputstream、byte[]、string
BufferedReader转string
1
BufferedReader br = new BufferedReader(
new InputStreamReader(con.getInputStream(), Charset
.forName("utf-8")));
StringWriter sw=new StringWriter();
int i=-1;
while ((i = br.read()) != -1) {
sw.write(i);
}
string=sw.getBuffer().toString();
2
while (br.ready()) {
String readLine = br.readLine();
System.out.println(readLine);
string += readLine;
}
byte[]转换为InputStream
InputStream sbs = new ByteArrayInputStream(string.getBytes());
InputStream转换为byte[]
ByteArrayInputStream is=new ByteArrayInputStream(string.getBytes());
ByteArrayOutputStream os = new ByteArrayOutputStream();
int i = -1;
while ((i = br.read()) != -1) {
os.write(i);
}
byte[] in_b = os.toByteArray();
view.setTag(int1, object);
int1一般传一个控件id,传不唯一的值会报错。
VideoView播放视频
vv = (VideoView) findViewById(R.id.vv);
MediaController mediaco = new MediaController(this);
File file = new File("/mnt/sdcard/Test.mp4");
if (file.exists()) {
// vv.setVideoURI(uri);
vv.setVideoPath(file.getAbsolutePath());
// 与MediaController关联
vv.setMediaController(mediaco);
mediaco.setMediaPlayer(vv);
// 获取焦点
vv.requestFocus();
}
viewpager缓存
pager.setOffscreenPageLimit(3);
ImageLoader使用
String imageUri = “http://site.com/image.png“; // 网络图片
String imageUri = “file:///mnt/sdcard/image.png”; //SD卡图片
String imageUri = “content://media/external/audio/albumart/13”; // 媒体文件夹
String imageUri = “assets://image.png”; // assets
String imageUri = “drawable://” + R.drawable.image; // drawable文件
.displayer(new RoundedBitmapDisplayer(400))// 圆角
TextView中放图片
sp = Html.fromHtml(html, new Html.ImageGetter() {
@Override
public Drawable getDrawable(String source) {
InputStream is = null;
try {
is = (InputStream) new URL(source)
.getContent();
Drawable d = Drawable.createFromStream(is,
"src");
d.setBounds(
0,
0,
480,
(int) (d.getIntrinsicHeight()
/ (float) d
.getIntrinsicWidth() * 480));
is.close();
return d;
} catch (Exception e) {
return null;
}
}
}, null);
textView.setText(sp);