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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值