android小知識總結,持續更新...

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的四個返回值

  1. START_STICKY: 如果service進程被kill掉,保留service的狀態爲開始狀態,但不保留遞送的intent對象。隨後系統會嘗試重新創建service,由於服務狀態爲開始狀態,所以創建服務後一定會調用onStartCommand(Intent,int,int)方法。如果在此期間沒有任何啓動命令被傳遞到service,那麼參數Intent將爲null。
  2. START_NOT_STICKY:“非粘性的”。使用這個返回值時,如果在執行完onStartCommand後,服務被異常kill掉,系統不會自動重啓該服務
  3. 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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章