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);