zoukankan      html  css  js  c++  java
  • Android开发Tips(3)

    欢迎Follow我的GitHub, 关注我的CSDN.

    我会介绍关于Android的一些有趣的小知识点. 本文是第三篇, 其余第一篇, 第二篇.

    Android


    1. UIAutomatorViewer

    自己主动化測试是Android測试的趋势, 稳定复用, 最经常使用的工具就是Espresso.
    使用UIAutomatorViewer获取资源的Id,
    位置/android-sdk/tools/uiautomatorviewer, 点击就可以使用.

    视图


    2. GitHub标签

    网址, 比方:


    3. 有趣的改动SVG库

    地址, 载入SVG格式的图片, 改动颜色属性.

    Demo


    4. 请求和生成的Json插件

    JSONOnlineViewer, 网络请求插件, 获取Json数据, 位置View->JSONViewer.
    GsonFormat, 依据Json自己主动生成类的插件, 在Command+N里面.

    附一张插件的截图, 其它任意.

    Plugins


    5. Retrofit2+Okhttp3的Interceptor设置方式

    Retrofit升级到beta3版本号, 使用了最新Okhttp3, Interceptor的设置方式发生改变.

    旧版

    OkHttpClient client = new OkHttpClient().Builder();
    
    HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
    loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);
    MarvelSigningInterceptor signingInterceptor = new MarvelSigningInterceptor(
        BuildConfig.MARVEL_PUBLIC_KEY, BuildConfig.MARVEL_PRIVATE_KEY);
    
    client.interceptors().add(signingInterceptor);
    client.interceptors().add(loggingInterceptor);

    替换, 新版

            HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
            loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);
    
            MarvelSigningInterceptor signingInterceptor = new MarvelSigningInterceptor(
                    BuildConfig.MARVEL_PUBLIC_KEY, BuildConfig.MARVEL_PRIVATE_KEY);
    
            OkHttpClient client = new OkHttpClient.Builder()
                    .addInterceptor(signingInterceptor)
                    .addInterceptor(loggingInterceptor)
                    .build();

    否则可能会发生: HTTP 409 Conflict, 未输入正确的验证方式, 私钥错误.


    6. okhttp-logging-interceptor输出log信息

    參考, 能够输出log信息, 使用, 当前版本号是3.0.1.

    compile "com.squareup.okhttp3:logging-interceptor:${libs.okhttp}"

    输出參考:

    D/OkHttp: <-- 200 OK http://gateway.marvel.com/v1/public/characters?

    offset=0&... (1552ms, unknown-length body)


    7. 透明statusbar和全屏ImageView

    status bar设置成为透明颜色.

        <style name="AppTheme.NoStatusBar">
            <item name="android:windowTranslucentStatus">true</item>
        </style>

    页面的根布局是CollapsingToolbarLayout.

    <android.support.design.widget.CollapsingToolbarLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">
    
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:contentDescription="@null"
            android:fitsSystemWindows="true"
            android:scaleType="centerCrop"
            android:src="@drawable/christmas"/>
    
    </android.support.design.widget.CollapsingToolbarLayout>

    效果
    全屏


    8. Android Studio模板

    位置: File->Other Settings->Default Settings->Editor->Live Templates
    熟练之后, 依据简写+Tab就能够使用了, 当然也能够自己加入.

    模板

    自己定义模板:
    缩写(Abbreviation), 描写叙述(Description), 内容(Template text), 应用场景, 格式化.
    自己定义


    9. 推荐动画效果的站点

    网址, 站点里面有非常多好玩的动画效果, 并且都是编程实现, 方便移植, 如雪花效果.


    10. ListView的ViewHolder

    Android官方推荐使用RecyclerView取代ListView, 可是非常多守旧的人不想这么做, 那么, 也须要使用ViewHolder提升载入速度. 參考.

    基本使用方法.

    static class ViewHolder() {
        TextView testName;
        TextView testDesc;
    }
    
    ...
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View rowView = convertView;
    
        // 初始化ViewHolder
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) parent.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            rowView = inflater.inflate(R.layout.view_test_row, parent, false);
            ViewHolder viewHolder = new ViewHolder();
            viewHolder.testName = (TextView) rowView.findViewById(R.id.test_tv_name);
            viewHolder.testDesc = (TextView) rowView.findViewById(R.id.test_tv_desc);
            rowView.setTag(viewHolder);
        }
    
        // 使用ViewHolder
        ViewHolder holder = (ViewHolder) rowView.getTag();
        holder.testName.setText("Test: " + position);
        holder.testDesc.setText("This is number " + position + ". ");
    
        return rowView;
    }

    OK, that’s all! Enjoy it.

  • 相关阅读:
    java代码split分割数字类
    P1330 封锁阳光大学
    1022 舞会2
    1626 爱在心中
    P2024 食物链(two)
    P1196 银河英雄传说
    P1892 团伙
    P1546 最短网络(最小生成树)
    烦人的幻灯片(拓扑)
    例4.15 奖金(拓扑排序)
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7190178.html
Copyright © 2011-2022 走看看