乾物を開発する


一:Android 15の一般的なグラフライブラリをお勧めします.線形、棒柱状、円グラフ、扇形、レーダー、株、折れ線、散点、計器盤...
        https://blog.csdn.net/u014133119/article/details/80923327
       HelloCharts:
        http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1107/1930.html
 
二::Retrofit+RxJavaの依存:
     //Okhttpライブラリ    implementation 'com.squareup.okhttp3:okhttp:3.11.0'     implementation 'com.squareup.okhttp3:logging-interceptor:3.8.1'    //Retrofitライブラリ    implementation 'com.squareup.retrofit2:retrofit:2.1.0'     implementation 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'    //RxJava     implementation 'io.reactivex.rxjava2:rxjava:2.0.1'     implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
 
3:    TextView/string.xmlコールドゲートテクニック:プレースホルダ%1$s、%1$dなどの使い方:
        https://www.jianshu.com/p/e9fd92fd0951
 四:  EditTextには、ソフトキーボードをイジェクトしないカーソルがあります.
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
        try {
            Class cls = EditText.class;
            Method setSoftInputShownOnFocus;
            setSoftInputShownOnFocus = cls.getMethod("setShowSoftInputOnFocus", boolean.class);
            setSoftInputShownOnFocus.setAccessible(true);
            setSoftInputShownOnFocus.invoke(mEditText, false);
        } catch (Exception e) {
            e.printStackTrace();
        }

 
五:花火試験のドロップダウン効果:
开发干货_第1张图片
Webサイト:https://github.com/Cleveroad/FireworkyPullToRefresh
 
六:【Androidコレクション】クールなオープンソース10個をお勧めします.
https://www.jianshu.com/p/d608f0228fd4
 
七:Android FlycoTabLayout:スライドラベル
开发干货_第2张图片
八:浸透式を設定する:
StatusBarUtils:
package com.project.charttext;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import android.support.annotation.ColorInt;
import android.support.v4.view.ViewCompat;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;

/**
 * @author
 * @date 2019/5/15 13:44
 */
public class StatusBarUtils {
    public static void setColor(Activity activity, @ColorInt int color, int statusBarAlpha){
        //        
        setFullScreen(activity);
        //                        view
        addStatusBarBehind(activity,color,statusBarAlpha);
    }
    /**
     *         (     view),           
     */
    public static void addStatusBarBehind(Activity activity, @ColorInt int color, int statusBarAlpha) {
        //  windowphone  decorView
        ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
        int       count     = decorView.getChildCount();
        //         statusBarView
        if (count > 0 && decorView.getChildAt(count - 1) instanceof StatusBarView) {
            decorView.getChildAt(count - 1).setBackgroundColor(calculateStatusColor(color, statusBarAlpha));
        } else {
            //           view
            StatusBarView statusView = createStatusBarView(activity, color, statusBarAlpha);
            decorView.addView(statusView);
        }
        setRootView(activity);
    }

    public static void setTranslucentImageHeader(Activity activity, int alpha,View needOffsetView){
        setFullScreen(activity);
        //  windowphone  decorView
        ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
        int       count     = decorView.getChildCount();
        //         statusBarView
        if (count > 0 && decorView.getChildAt(count - 1) instanceof StatusBarView) {
            decorView.getChildAt(count - 1).setBackgroundColor(Color.argb(alpha, 0, 0, 0));
        } else {
            //           view
            StatusBarView statusView = createTranslucentStatusBarView(activity, alpha);
            decorView.addView(statusView);
        }

        if (needOffsetView != null) {
            ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) needOffsetView.getLayoutParams();
            layoutParams.setMargins(0, getStatusBarHeight(activity), 0, 0);
        }

    }



    private static StatusBarView createTranslucentStatusBarView(Activity activity, int alpha) {
        //               
        StatusBarView statusBarView = new StatusBarView(activity);
        LinearLayout.LayoutParams params =
                new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));
        statusBarView.setLayoutParams(params);
        statusBarView.setBackgroundColor(Color.argb(alpha, 0, 0, 0));
        return statusBarView;
    }

    /**
     *        
     */
    private static void setRootView(Activity activity) {
        ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
        //rootview             
        ViewCompat.setFitsSystemWindows(rootView,true);
        rootView.setClipToPadding(true);
    }
    private static StatusBarView createStatusBarView(Activity activity, int color, int alpha) {
        //               
        StatusBarView statusBarView = new StatusBarView(activity);
        LinearLayout.LayoutParams params =
                new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));
        statusBarView.setLayoutParams(params);
        statusBarView.setBackgroundColor(calculateStatusColor(color, alpha));
        return statusBarView;
    }

    /**
     *        
     *
     * @param context context
     * @return      
     */
    private static int getStatusBarHeight(Context context) {
        //        
        int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
        return context.getResources().getDimensionPixelSize(resourceId);
    }
    /**
     *        
     *
     * @param color color 
     * @param alpha alpha 
     * @return         
     */
    private static int calculateStatusColor(int color, int alpha) {
        float a = 1 - alpha / 255f;
        int red = color >> 16 & 0xff;
        int green = color >> 8 & 0xff;
        int blue = color & 0xff;
        red = (int) (red * a + 0.5);
        green = (int) (green * a + 0.5);
        blue = (int) (blue * a + 0.5);
        return 0xff << 24 | red << 16 | green << 8 | blue;
    }

    public static  void setFullScreen(Activity activity){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = activity.getWindow();
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
                    | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(Color.TRANSPARENT);
        }else
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            //        ,      ContentView   
            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        }
    }

    public static class StatusBarView extends View {

        public StatusBarView(Context context) {
            super(context);
        }

        public StatusBarView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }

        public StatusBarView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    }
}

使用方法:直接呼び出せばいい
eg:(0-250)透明度、0の場合は透明、UItilのargbを設定することでステータスバーの色を調整
 StatusBarUtils.setTranslucentImageHeader(this,250,view);

九:各種コントロールサイト(完備)
https://hndeveloper.github.io/2017/github-android-ui.html#SwitchButton
 
十:Androidサードパーティのオープンソース(更新を続け、乾物がたくさんあります.好きなものを包んでください)
https://www.jianshu.com/p/f64df400e16f
十一:CollapsingToolbarLayout+FloatingActionButton美しい詳細インタフェースを構築(転送)
https://blog.csdn.net/smile_Running/article/details/97183522