一些小東西(持續(xù)更新)

其他的東西:
1'按 win+X 組合鍵或右鍵點(diǎn)擊開始菜單按鈕,打開CMD選擇(命令提示符) (管理員) (必須要用管理員身份運(yùn)行,要不然權(quán)限不夠)
2,轉(zhuǎn)到2016安裝目錄(復(fù)制進(jìn)去按回車鍵):cd C:\Program Files\Microsoft Office\Office16
注意:64位: cd C:\Program Files\Microsoft Office\Office16
32位:cd C:\Program Files (x86)\Microsoft Office\Office16
3,先運(yùn)行cscript ospp.vbs /dstatus 顯示已安裝KEY的狀態(tài),這里只顯示KEY的后5位。
4,把要卸載的KEY用命令cscript ospp.vbs /unpkey:XXXXX(KEY后5位)卸載。

0、一個(gè)好用的壓縮工具(LuBan)

github地址:https://github.com/Curzibn/Luban

# 0.0:準(zhǔn)備

    compile 'top.zibin:Luban:1.0.9'
    compile 'io.reactivex:rxandroid:1.2.1'
    compile 'io.reactivex:rxjava:1.1.6'

0.1:使用:

    private void GearImage(File file){
        Luban.get(this)
                .load(file)                     //傳人要壓縮的圖片
                .putGear(Luban.THIRD_GEAR)      //設(shè)定壓縮檔次,默認(rèn)三擋
                .setCompressListener(new OnCompressListener() { //設(shè)置回調(diào)
                    @Override
                    public void onStart() {
                        showMyDialog();//開始?jí)嚎s,這里可以添加一個(gè)loading
                    }
                    @Override
                    public void onSuccess(File file) {//壓縮結(jié)束
                        // 隱藏loading
                        hideMyDialog();
                        // 拿到file
                        headImgfile=file;
                        // 使用Glide顯示圖片
                        GlidePicUtils.CircleHeadPic(mContext, headImgfile.getPath(), childrenimg); 
                    }
                    @Override
                    public void onError(Throwable e) {//失敗
                        //隱藏loading
                        hideMyDialog();
                        // 提示用戶
                        T.shortToast(mContext,getResources().getString(R.string.text_editdekaron_nopic));
                    }
                }).launch();    //啟動(dòng)壓縮
    }

1、設(shè)置App打開之后的白屏,這里設(shè)置了一個(gè)圖片

   <style name="SplashTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- 將splash圖片設(shè)置在這,這樣這張圖片取代白屏 -->
        <item name="android:windowBackground">@drawable/loading</item>
        <!--去掉電池電量條 -->
        <!--<item name="android:windowFullscreen">true</item> -->
        <!-- 或者是將主題設(shè)置成透明,雖然點(diǎn)擊圖標(biāo)會(huì)有點(diǎn)小小的卡頓,但是用戶體驗(yàn)不影響 -->
        <!-- <item name="android:windowIsTranslucent">true</item> --> <!-- 透明背景不要了 -->
   </style>

2、在android6.0(api 23)之后找不到org.apache.http.xxx包

在app里邊的build.gradle中添加userLibrary 'org.apache.http.legacy'


添加位置

3、在使用Fragment的時(shí)候,有時(shí)需要及時(shí)刷新數(shù)據(jù),來重寫這個(gè)方法試試吧。

   @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        //判斷該Fragment時(shí)候已經(jīng)正在前臺(tái)顯示  通過這兩個(gè)判斷,就可以知道什么時(shí)候去加載數(shù)據(jù)了
        if (isVisibleToUser && isVisible()) {
           //這里去加載數(shù)據(jù)
        }
        super.setUserVisibleHint(isVisibleToUser);
    }

4、屏幕方向

1、判斷屏幕方向

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { // 豎屏
            // 豎屏?xí)rdoSomrthing
        } else {
            // 橫屏?xí)rdosomething
        }

        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_bigpic);
        
    }

2、設(shè)置屏幕方向

方法一:在AndroidManifest.xml中配置

如果不想讓軟件在橫豎屏之間切換,最簡(jiǎn)單的辦法就是在項(xiàng)目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation屬性,他有以下幾個(gè)參數(shù):

"unspecified":默認(rèn)值 由系統(tǒng)來判斷顯示方向.判定的策略是和設(shè)備相關(guān)的,所以不同的設(shè)備會(huì)有不同的顯示方向.
"landscape":橫屏顯示(寬比高要長(zhǎng))
"portrait":豎屏顯示(高比寬要長(zhǎng))
"user":用戶當(dāng)前首選的方向
"behind":和該Activity下面的那個(gè)Activity的方向一致(在Activity堆棧中的)
"sensor":有物理的感應(yīng)器來決定。如果用戶旋轉(zhuǎn)設(shè)備這屏幕會(huì)橫豎屏切換。
"nosensor":忽略物理感應(yīng)器,這樣就不會(huì)隨著用戶旋轉(zhuǎn)設(shè)備而更改了("unspecified"設(shè)置除外)。

設(shè)置強(qiáng)制橫屏豎屏

方法二:在java代碼中設(shè)置

設(shè)置橫屏代碼:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//橫屏
設(shè)置豎屏代碼:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//豎屏

因?yàn)闄M屏有兩個(gè)方向的橫法,而這個(gè)設(shè)置橫屏的語句,如果不是默認(rèn)的橫屏方向,會(huì)把已經(jīng)橫屏的屏幕旋轉(zhuǎn)180°。
所以可以先判斷是否已經(jīng)為橫屏了,如果不是再旋轉(zhuǎn),不會(huì)讓用戶覺得轉(zhuǎn)的莫名其妙啦!代碼如下:

if(this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT){
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}

5、需要在TextView旁邊放一個(gè)圖片。但是距離太近了。

xml文件中這樣:

//設(shè)置距離
 android:drawablePadding="@dimen/px_10"
//設(shè)置圖片
 android:drawableLeft="@drawable/nav_location"

6、Edittext的一些屬性。

//設(shè)置光標(biāo)在左上角
android:gravity="top"
//設(shè)定光標(biāo)為顯示/隱藏,默認(rèn)顯示
android:cursorVisible="true"
//設(shè)置允許輸入哪些字符。如“1234567890.+-*/% ()”
android:digits="1234567890.+-*/% ()"

限制只能輸入中文:
String文件:

<string name="rule_password">0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`?!"£$%^*()~=#{}[];':,./?/*-_+<>@&</string>

然后在edittext中設(shè)置上文說到的digits屬性

7、View.setVisibility的三種狀態(tài):

invisible:     View   不可見,占位置;
visible  :     View   可見,占位置;
gone    :      View   不可見,不占位置;

8、一個(gè)自定義的Toast,可以把自己的layout用Toast的方式顯示出來:

    private static Toast mToast;

    /**
     * @param mContext
     * @param duration  顯示時(shí)間
     * @param layout    布局
     * @return
     */
    public  static void showToast(Context mContext,int duration,int layout) {
        if (mToast != null) {
            mToast.cancel();
            mToast = null;
        }
        View view = LayoutInflater.from(mContext).inflate(layout, null);
        mToast = new Toast(mContext);
        //設(shè)置顯示的位置
        mToast.setGravity(Gravity.CENTER, 0, 2);
       //設(shè)置顯示時(shí)間
        mToast.setDuration(duration);
        mToast.setView(view);
        mToast.show();
    }

效果圖:

自定義Toast

9、Glide的一些簡(jiǎn)單用法:

       Glide.with(LoginActivity.this)
                .load("http://4493bz.1985t.com/uploads/allimg/150127/4-15012G52133.jpg")
                .diskCacheStrategy(DiskCacheStrategy.ALL)//設(shè)置緩存(緩存源資源和轉(zhuǎn)換后的資源)
////              .diskCacheStrategy(DiskCacheStrategy.NONE)//設(shè)置緩存(不作任何磁盤緩存)
////              .diskCacheStrategy(DiskCacheStrategy.SOURCE)//設(shè)置緩存(緩存源資源)
////              .diskCacheStrategy(DiskCacheStrategy.RESULT)//設(shè)置緩存(緩存轉(zhuǎn)換后的資源)
//                .transform(new GlideRoundTransform(mContext))//圓角圖片
                .transform(new GlideCircleTransform(this))//圓形圖片
                .placeholder(R.mipmap.ic_launcher)//加載中的圖片
                .error(R.mipmap.ic_launcher)//加載失敗的圖片
                .thumbnail(0.1f)//先加載縮略圖,再加載大圖
//                .override(800, 800)//設(shè)置加載圖片尺寸
//                .skipMemoryCache(true)//跳過內(nèi)存緩存
               .into(heatview);

10、彈出選擇框后,把頁面其他位置變暗:

      //設(shè)置其他部分陰暗效果,在回調(diào)之后設(shè)置為1
        WindowManager.LayoutParams params=mActivity.getWindow().getAttributes();
        params.alpha=0.5f;//陰暗效果
        mActivity.getWindow().setAttributes(params);

效果圖:

陰影效果

11、動(dòng)態(tài)設(shè)置控件大?。?/h1>
        RecyclerView.LayoutParams linearParams = (RecyclerView.LayoutParams) HeadView.getLayoutParams(); //取控件textView當(dāng)前的布局參數(shù)
        linearParams.width = ScreenUtils.getScreenWidth(getActivity());// 控件的寬強(qiáng)制設(shè)成30
        HeadView.setLayoutParams(linearParams); //使設(shè)置好的布局參數(shù)應(yīng)用到控件

哦,然后就遇到問題了,在有些view中獲取的LayoutParams為null,這是因?yàn)関ewi還沒有加載完。這時(shí)候就出現(xiàn)空指針了。這樣,給view設(shè)置一個(gè)觀察樹。等view加載完了之后再去設(shè)置大小。具體代碼如下:

        //動(dòng)態(tài)設(shè)置headerview的大小,給headerview添加一個(gè)觀察樹
        ViewTreeObserver viewTreeObserver = HeadView.getViewTreeObserver();
        //當(dāng)veiw被加載完成之后,調(diào)用該方法回調(diào),這時(shí)候去設(shè)置veiw的大小
        viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                RecyclerView.LayoutParams linearParams = (RecyclerView.LayoutParams) HeadView.getLayoutParams(); //取控件textView當(dāng)前的布局參數(shù)
                linearParams.width = ScreenUtils.getScreenWidth(getActivity());// 控件的寬強(qiáng)制設(shè)成30
                HeadView.setLayoutParams(linearParams); //使設(shè)置好的布局參數(shù)應(yīng)用到控件
            }
        });

12、在Fragment中使用 FragmentManager要使用getChildFragmentManager():

//使用 
SimpleFragmentPagerAdapter pagerAdapter = new SimpleFragmentPagerAdapter( getChildFragmentManager(), getActivity(),list_fragment,list_title);

//構(gòu)造方法
public SimpleFragmentPagerAdapter(FragmentManager fm,Context context,ArrayList<Fragment>  mList,ArrayList<String> mListString) {
        super(fm);
        this.context = context;
        this.mList = mList;
        this.mListString = mListString;
    }
        

13、要去加載一個(gè)帶有標(biāo)簽的webview

 myWeb.setWebViewClient(new WebViewClient() {
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){
                handler.proceed();  // 接受所有網(wǎng)站的證書
            }
        });
        myWeb.getSettings().setJavaScriptEnabled(true);
  myWeb.loadDataWithBaseURL(null,mBean.getData().getAdDetails().getContent(), "text/html", "utf-8", null);

14、進(jìn)入activity,Edittext占用焦點(diǎn),鍵盤總是彈出來,在AndroidMainfest.xml文件中添加這句。

  android:windowSoftInputMode="stateHidden"

15、Edittext輸入兩位小數(shù),只能輸入一個(gè)小數(shù)點(diǎn),第一個(gè)數(shù)字是0的時(shí)候(不能輸入其他數(shù)字,不能連續(xù)輸入兩個(gè)0)

        mInPoints.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                                      int count) {
                if (s.toString().contains(".")) {
                    if (s.length() - 1 - s.toString().indexOf(".") > 2) {
                        s = s.toString().subSequence(0,
                                s.toString().indexOf(".") + 3);
                        mInPoints.setText(s);
                        mInPoints.setSelection(s.length());
                    }
                }
                if (s.toString().trim().substring(0).equals(".")) {
                    s = "0" + s;
                    mInPoints.setText(s);
                    mInPoints.setSelection(2);
                }

                if (s.toString().startsWith("0")
                        && s.toString().trim().length() > 1) {
                    if (!s.toString().substring(1, 2).equals(".")) {
                        mInPoints.setText(s.subSequence(0, 1));
                        mInPoints.setSelection(1);
                        return;
                    }
                }
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void afterTextChanged(Editable s) {

            }

        });

16、6.0以后的藍(lán)牙權(quán)限,需要另外加上這個(gè)!

 <uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION"/>

17、swiperefreshlayout與scrollview的沖突

原理很簡(jiǎn)單:就是在scrollview還沒有到達(dá)第一條數(shù)據(jù)頂部的時(shí)候,就設(shè)置swipeRefreshLayout為不可操作狀態(tài),那么檢測(cè)swipeRefreshLayout的滾動(dòng)分發(fā)就不起作用了,就達(dá)到我們需要的目的了。代碼如下:

  if (myScroll != null) {
            myScroll.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
                @Override
                public void onScrollChanged() {
                    if (me_swipe != null) {
                        me_swipe.setEnabled(myScroll.getScrollY() == 0);
                    }
                }
            });
        }

18、Android studio 查看sha1

1、cd 到 .Android 目錄下
2、輸入: keytool -list -keystore debug.keystore
C:\Users\Administrator.android>keytool -list -keystore debug.keystore
3、輸入密碼,密碼是不顯示的,輸入正確回車就可以了
密碼:android (默認(rèn)密碼)

效果圖

19、TextView劃線

textView.getPaint().setFlags(Paint. UNDERLINE_TEXT_FLAG ); //下劃線

textView.getPaint().setAntiAlias(true);//抗鋸齒

textview.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG); //中劃線

setFlags(Paint. STRIKE_THRU_TEXT_FLAG|Paint.ANTI_ALIAS_FLAG);  // 設(shè)置中劃線并加清晰 

textView.getPaint().setFlags(0);  // 取消設(shè)置的的劃線

20、onActivityResult不執(zhí)行問題

如果Activity 的加載啟動(dòng)模式(launchMode )是SingleTask或者 SingleInstance,會(huì)導(dǎo)致onActivityResult()沒有調(diào)用。修改啟動(dòng)模式為singleTop或者標(biāo)準(zhǔn)。原因是:設(shè)置為 launchmode=”SingleTask”,系統(tǒng)將在 startActivityForResult() 后直接調(diào)用 onActivityResult()。

21、在Scrollview中用到一個(gè)listview之列的控件,總是到ScrollView的底步,原因是listview獲取了焦點(diǎn)。給控件設(shè)置這個(gè)屬性。

listaddeq.setFocusable(false);

22、事件分發(fā)機(jī)制的一個(gè)視頻連接

https://ke.qq.com/webcourse/index.html?from=qqchat#course_id=166061&term_id=100193159&taid=917065712175277&vid=w1414asmavu&ADUIN=1538818231&ADSESSION=1495671726&ADTAG=CLIENT.QQ.5515_.0&ADPUBNO=26657

23、ListView的一些屬性:

android:dividerHeight="10dp"  //設(shè)置分割線高度
android:divider="@color/colorAccent"http://設(shè)置分割線顏色
android:divider="@null"http://透明分割線
android:scrollbars="none"http://隱藏滾動(dòng)條
android:listSelector="#00000000"http://隱藏Item的點(diǎn)擊效果
android:listSelector="@android:color/transparent"http://隱藏Item的點(diǎn)擊效果

//設(shè)置需要顯示第幾個(gè)item
mListView.setSelection(50);//瞬間完成
mListView.smoothScrollToPosition(100);//平滑移動(dòng)
View mView=mListView.getChildAt(0);//取到第0個(gè)item的view
mListView.getLastVisiblePosition();//當(dāng)前區(qū)域的最后一個(gè)可見的item
mListView.getFirstVisiblePosition();//當(dāng)前區(qū)域的第一個(gè)可見的item

//帶有彈性效果的listview,自定義Listvewi,然后重寫方法:
    @Override
    protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
        return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, 200, isTouchEvent);
    }

//listview的滾動(dòng)事件
        mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView absListView, int i) {
                switch (i){
                    case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
                        //停止滑動(dòng)
                        break;
                    case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
                        //正在滑動(dòng)
                        break;
                    case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
                        //手指松開,listview由于慣性繼續(xù)滑動(dòng)
                        break;
                }
            }
            @Override
            public void onScroll(AbsListView absListView, int i, int i1, int i2) {
                //i   能看到的第一個(gè)Item的是第幾個(gè)
                //i1  當(dāng)前頁面能看到的item的數(shù)量
                //i2  listveiw一共有多少個(gè)item
                if(i+i1==i2&&i2-總數(shù)>0){
                    //這時(shí)候就滑動(dòng)到了最后一個(gè)
                }
            }
        });

24、hellowcharts的簡(jiǎn)單實(shí)用:

1、導(dǎo)入

compile 'com.github.lecho:hellocharts-library:1.5.8@aar'

2、xml文件

    <lecho.lib.hellocharts.view.LineChartView
        android:id="@+id/test_chart"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

3、activity

import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import java.util.ArrayList;
import java.util.List;

import lecho.lib.hellocharts.gesture.ContainerScrollType;
import lecho.lib.hellocharts.gesture.ZoomType;
import lecho.lib.hellocharts.model.Axis;
import lecho.lib.hellocharts.model.AxisValue;
import lecho.lib.hellocharts.model.Line;
import lecho.lib.hellocharts.model.LineChartData;
import lecho.lib.hellocharts.model.PointValue;
import lecho.lib.hellocharts.model.ValueShape;
import lecho.lib.hellocharts.view.LineChartView;

public class MainActivity extends AppCompatActivity {
    LineChartView mLineChartView;

    ArrayList <Line> mLines=new ArrayList<>();
    private List<AxisValue> mAxisXValues = new ArrayList<AxisValue>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mLineChartView= (LineChartView) findViewById(R.id.test_chart);



        Line line = new Line(addV()).setColor(Color.BLUE);//聲明線并設(shè)置顏色
        line.setShape(ValueShape.CIRCLE);//折線圖上每個(gè)數(shù)據(jù)點(diǎn)的形狀  這里是圓形 (有三種 :ValueShape.SQUARE  ValueShape.CIRCLE  ValueShape.DIAMOND)
        line.setCubic(true);//曲線是否平滑,即是曲線還是折線
        line.setFilled(true);//是否填充曲線的面積
        line.setHasLabels(true);//曲線的數(shù)據(jù)坐標(biāo)是否加上備注
//      line.setHasLabelsOnlyForSelected(true);//點(diǎn)擊數(shù)據(jù)坐標(biāo)提示數(shù)據(jù)(設(shè)置了這個(gè)line.setHasLabels(true);就無效)
        line.setHasLines(true);//是否用線顯示。如果為false 則沒有曲線只有點(diǎn)顯示
        line.setHasPoints(true);//是否顯示圓點(diǎn) 如果為false 則沒有原點(diǎn)只有點(diǎn)顯示(每個(gè)數(shù)據(jù)點(diǎn)都是個(gè)大的圓點(diǎn))
        mLines.clear();
        mLines.add(line);


        mLineChartView.setInteractive(false);//設(shè)置圖表是可以交互的(拖拽,縮放等效果的前提)
        mLineChartView.setZoomType(ZoomType.HORIZONTAL_AND_VERTICAL);//設(shè)置縮放方向

        mLineChartView.setMaxZoom((float) 2);//最大方法比例
        mLineChartView.setContainerScrollEnabled(true, ContainerScrollType.HORIZONTAL);




        LineChartData data = new LineChartData();
        Axis axisX = new Axis();//x軸
        axisX.setHasTiltedLabels(true);  //X坐標(biāo)軸字體是斜的顯示還是直的,true是斜的顯示
        axisX.setTextColor(Color.WHITE);  //設(shè)置字體顏色
        //axisX.setName("date");  //表格名稱
        axisX.setTextSize(10);//設(shè)置字體大小
        axisX.setMaxLabelChars(8); //最多幾個(gè)X軸坐標(biāo),意思就是你的縮放讓X軸上數(shù)據(jù)的個(gè)數(shù)7<=x<=mAxisXValues.length
        axisX.setValues(mAxisXValues);  //填充X軸的坐標(biāo)名稱
        data.setAxisXBottom(axisX); //x 軸在底部
        //data.setAxisXTop(axisX);  //x 軸在頂部
        axisX.setHasLines(true); //x 軸分割線

        Axis axisY = new Axis();//y軸
        axisY.setName("");//y軸標(biāo)注
        axisY.setTextSize(10);//設(shè)置字體大小
        data.setAxisYLeft(axisY);  //Y軸設(shè)置在左邊
        //data.setAxisYRight(axisY);  //y軸設(shè)置在右邊


        data.setAxisXBottom(axisX);
        data.setAxisYLeft(axisY);
        data.setLines(mLines);


        mLineChartView.setLineChartData(data);//給圖表設(shè)置數(shù)據(jù)

    }


    /**
     * 初始化折線上的點(diǎn)
     * @return
     */
    private ArrayList<PointValue> addV(){

        ArrayList<PointValue> values = new ArrayList<PointValue>();//折線上的點(diǎn)
        values.add(new PointValue(0, 200));
        values.add(new PointValue(1, 4));
        values.add(new PointValue(2, 300));
        values.add(new PointValue(3, 50));
        values.add(new PointValue(4, 100));
        values.add(new PointValue(5, 150));
        values.add(new PointValue(6, 70));
        return values;
    }

}

4、參考地址

http://blog.csdn.net/androidtalent/article/details/52290051

25、環(huán)境變量:

1、 新建java_home

C:\Program Files (x86)\Java\jdk1.7.0_15(jdk的路徑)

2、 編輯path

;%java_home%\bin(在最后加上)

3、 新建classpath

.;%java_home%\lib

26、Fragment使用hind()、show()方法切換fragment的時(shí)候出現(xiàn)重疊現(xiàn)象:

1、 定義一個(gè)變量

int position=0;

2、 添加如下方法

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        //記錄當(dāng)前的position
        outState.putInt("position", position);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        position = savedInstanceState.getInt("position");
        switchFragment(position);
        super.onRestoreInstanceState(savedInstanceState);
    }

3、別忘記了在切換fragment的時(shí)候更改position的值

26、Fragment中動(dòng)態(tài)申請(qǐng)權(quán)限不走onRequestPermissionsResult方法:

先看代碼:
activity:

 // 申請(qǐng)授權(quán)
 ActivityCompat.requestPermissions(PersonalDataActivity.this, stringPermissions, REQUEST_PERMISSION_CAMERA_6_0);

fragment

  // 申請(qǐng)授權(quán)
  HomeFragment.getInstance().requestPermissions(stringPermissions, REQUEST_PERMISSION_CAMERA_6_0);

fragment不能用activity去申請(qǐng)權(quán)限的,要用fragment去申請(qǐng),這樣才走自己的方法。還有fragment,startActivityForResult方法也是這樣。

27、設(shè)置activity禁止截圖/錄屏:

 //設(shè)置禁止截圖,禁止錄屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
setContentView(R.layout.activity_main);

通過代碼中的flags,有以下三個(gè)效果:
1.阻止屏幕截圖
2.在Recent apps(任務(wù)切換界面)中只顯示應(yīng)用名字和圖標(biāo), 不顯示內(nèi)容
3.Google App的Now on tap功能不會(huì)去分析你的頁面的內(nèi)容

28、取消github的關(guān)聯(lián)

settings->version control 點(diǎn)右側(cè)的刪除添加就好了


取消github關(guān)聯(lián)

29、android studio不顯示方法注釋

在setting->Editor->General中的ShowQuick..

設(shè)置
效果

30、org.gradle.api,tasks.TaskExecutionException:Execution falied for task ':xxx:compileDebugJavaWithJavac'

遇到問題

這樣解決

31、Scroller/RecyclerView設(shè)置setOnScrollChangeListener不兼容<api23

scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
    @Override
    public void onScrollChanged() {
 
    }
});

32、分配內(nèi)存太大了,導(dǎo)致的項(xiàng)目報(bào)錯(cuò)

2048m.png

解決方法:在gradle.properties文件中改小一點(diǎn)內(nèi)存

org.gradle.jvmargs=-Xmx1024m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

33、api28網(wǎng)絡(luò)請(qǐng)求報(bào)錯(cuò)

原因:由于 Android P(版本27以上) 限制了明文流量的網(wǎng)絡(luò)請(qǐng)求,非加密的流量請(qǐng)求都會(huì)被系統(tǒng)禁止掉。
如果當(dāng)前應(yīng)用的請(qǐng)求是 htttp 請(qǐng)求,而非 https ,這樣就會(huì)導(dǎo)系統(tǒng)禁止當(dāng)前應(yīng)用進(jìn)行該請(qǐng)求

解決辦法:

方法一

1.在 res 下新建一個(gè) xml 目錄,然后創(chuàng)建一個(gè)名為:network_security_config.xml 文件 ,該文件內(nèi)容如下:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>

2.AndroidManifest.xml application中添加

android:networkSecurityConfig="@xml/network_security_config"

方法二

改為https請(qǐng)求

方法三

targetSdkVersion 降級(jí)回到 27

34、一個(gè)形象的生命周期圖

activity_生命周期圖.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容