Android 筆記 (持續(xù)更新)

覺(jué)得有意思有用處的就簡(jiǎn)單記下

作為備忘錄

1 , 更改頂部狀態(tài)欄和底部導(dǎo)航欄顏色

  • Android L及以上版本
  • 狀態(tài)欄顏色在style.xml中修改colorPrimaryDark顏色即可
  • 導(dǎo)航欄顏色在style.xml中修改navigationBarColor顏色即可
  • Android L以下版本
  • 參考:http://m.itdecent.cn/p/bae25b5eb867

2 , 一個(gè)非常好用的翻譯插件

是我這個(gè)英語(yǔ)渣的福利

3 , Android studio自帶的截圖與錄制視頻功能

  • 連接手機(jī)后,點(diǎn)開(kāi)底部Android Monitor,如圖 :
sample0.png

4 , 布局文件中的含透明值顏色的寫(xiě)法

  • android:background="#80000000"
  • 前面兩個(gè)數(shù)字是透明值【00~99 : 透明~不透明】,后面為顏色代碼

5 , 在service里啟動(dòng)activity

Intent intent = new Intent(getBaseContext() , Activity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
getApplication().startActivity(intent);

6 , 進(jìn)入activity的時(shí)候取消edittext自動(dòng)獲取焦點(diǎn)

在父布局加這兩句話

android:focusable="true"
android:focusableInTouchMode="true"

7 , 顯示簡(jiǎn)單的加載框

ProgressDialog progressDialog = ProgressDialog.show(context, title, message);

8 , 防止點(diǎn)擊edittext的時(shí)候被軟鍵盤(pán)遮住

在Androidmanifest中添加

android:windowSoftInputMode="stateHidden|adjustPan"

9 , 同一個(gè)Textview設(shè)置不同文字顏色

String string = "設(shè)置不同文字顏色"; 
SpannableString ss = new SpannableString(string);
ss.setSpan(new ForegroundColorSpan(Color.GREEN), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
textview.setText(ss);

10 , Bitmap轉(zhuǎn)為Drawable

Drawable drawable = new BitmapDrawable(bitmap);

11 , 將本地圖片取出并設(shè)置為bitmap格式

Bitmap bitmap = BitmapFactory.decodeFile(PhotoPath);

12 , 保存bitmap格式的文件到本地

try { 
      FileOutputStream out = new FileOutputStream(outFilePath); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); 
      out.flush(); out.close(); 
    } catch (IOException e) {
      e.printStackTrace();
    }

13 , 使用過(guò)bitmap后不再使用時(shí)謹(jǐn)記釋放內(nèi)存

if (bitmap != null) { 
    bitmap.recycle();//釋放bitmap
 }

14 , Material風(fēng)格的Dialog的使用

AlertDialog.Builder builder = new AlertDialog.Builder(context); 
builder.setTitle(title)
       .setMessage(message) 
       .setView(view) 
       .setNegativeButton("取消", null)
       .setPositiveButton("加入", null)
       .create()
       .show();

15 , Android5.0全透明狀態(tài)欄效果

//取消標(biāo)題欄
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().requestFeature(Window.FEATURE_NO_TITLE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = 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_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(Color.TRANSPARENT);
    window.setNavigationBarColor(Color.TRANSPARENT);
}

16 , 不同APP之間的Activity跳轉(zhuǎn)

Intent intent = new Intent(); 
intent.setClassName(packageName,packageName+activityName); 
startActivity(intent);

17 , 帶陰影的背景xml

示例圖:


sample2.png
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#BBB" />
            <corners android:radius="5dp" />
        </shape>
    </item> 
    <item android:bottom="3px">
        <shape android:shape="rectangle">
            <solid android:color="#FFE0EEEE" />
            <stroke
                android:width="0.5dp"
                android:color="@color/colorCcc" />
            <corners android:radius="5dp" />
            <padding
                android:bottom="15dp"
                android:left="15dp"
                android:right="15dp"
                android:top="15dp" />
        </shape>
    </item>
</layer-list>

18 , AlertDialog點(diǎn)擊按鈕后對(duì)話框不消失的處理方法

在點(diǎn)擊PositiveButton或NegativeButton按鈕的方法中加入

try {    
      Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");    
      field.setAccessible(true);   
      field.set(dialog, false); // false - 不能關(guān)閉 , true - 關(guān)閉
} catch (Exception e) {   
     e.printStackTrace();
}

19 , 使用代碼為textview設(shè)置drawableLeft

1.在XML中使用

android:drawableLeft="@drawable/icon"  

2.代碼中動(dòng)態(tài)變化

Drawable drawable= getResources().getDrawable(R.drawable.drawable);  
/// 這一步必須要做,否則不會(huì)顯示.  
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());  
mTextview.setCompoundDrawables(drawable,null,null,null);  

20, 使用代碼為textview設(shè)置下劃線

textView.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); //下劃線
textView.getPaint().setAntiAlias(true);//抗鋸齒

21, 對(duì)話框AlertDialog中的EditText不能自動(dòng)打開(kāi)軟鍵盤(pán)

Activity中需要啟動(dòng)一個(gè)AlertDialog,這個(gè)對(duì)話框使用的是自定義布局,在這個(gè)對(duì)話框里有個(gè)EditText,可能是自定義布局的問(wèn)題,導(dǎo)致對(duì)話框彈出時(shí)不能自動(dòng)打開(kāi)軟鍵盤(pán)并定位焦點(diǎn)到文本框里。

解決方法:延遲一會(huì)兒調(diào)出輸入法

public void showKeyboard() {  
      //調(diào)用系統(tǒng)輸入法  
    InputMethodManager inputManager = (InputMethodManager) editText  
            .getContext().getSystemService(Context.INPUT_METHOD_SERVICE);  
    inputManager.showSoftInput(editText, 0);  
}  

//在dialog.show()后,
dialog.show();  
Timer timer = new Timer();  
timer.schedule(new TimerTask() {  
    @Override  
    public void run() {  
        dialog.showKeyboard();  
    }  
}, 300);  

22, Android L版本以后, style.xml能做什么

style.jpg

23, 幾行代碼通知系統(tǒng)自動(dòng)安裝apk

//apk文件的本地路徑  
File apkfile = new File(apkFilePath);  
//會(huì)根據(jù)用戶的數(shù)據(jù)類型打開(kāi)android系統(tǒng)相應(yīng)的Activity。  
Intent intent = new Intent(Intent.ACTION_VIEW);  
//設(shè)置intent的數(shù)據(jù)類型是應(yīng)用程序application  
intent.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");  
//為這個(gè)新apk開(kāi)啟一個(gè)新的activity棧  
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
//開(kāi)始安裝  
startActivity(intent);  
//關(guān)閉舊版本的應(yīng)用程序的進(jìn)程  
android.os.Process.killProcess(android.os.Process.myPid());

24, Android5.0改變AlertDialog的樣式

在xml中定義一個(gè)主題:

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <!-- Used for the buttons -->
    <item name="colorAccent">#FFC107</item>
    <!-- Used for the title and text -->
    <item name="android:textColorPrimary">#FFFFFF</item>
    <!-- Used for the background -->
    <item name="android:background">#4CAF50</item>
</style>

樣式如下圖所示:


Paste_Image.png

在創(chuàng)建的對(duì)話框的時(shí)候,這樣創(chuàng)建就可以了。

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyAlertDialogStyle);
builder.setTitle("AppCompatDialog");
builder.setMessage("Lorem ipsum dolor...");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();

這樣的方法是每個(gè)地方使用的時(shí)候,都要在構(gòu)造函數(shù)傳我們的這個(gè)Dialog的Theme,我們也可以全局的定義對(duì)話框的樣式。

<style name="MyTheme" parent="Base.Theme.AppCompat.Light">
    <item name="alertDialogTheme">@style/MyAlertDialogStyle</item>
    <item name="colorAccent">@color/accent</item>
</style>

在我們的AndroidManifest.xml文件中聲明application或者activity的時(shí)候設(shè)置theme為MyTheme即可,不過(guò)需要注意的一點(diǎn)是,我們的Activity需要繼承自AppCompatActivity。

25, 當(dāng)從 Recent Apps 界面劃掉一個(gè)程序時(shí)

service會(huì)觸發(fā)onTaskRemoved()這個(gè)方法
假如你當(dāng)前啟動(dòng)service的方式是bindService , 那么就不會(huì)觸發(fā) , 必須要用startService;
當(dāng)然 , 你也可以兩種方式一起開(kāi)啟;
在做后臺(tái)下載的時(shí)候遇到了這個(gè)問(wèn)題 , 搜索了很久才解決的 , 而且用的是Google
http://stackoverflow.com/questions/24127923/service-ontaskremoved-not-called-if-started-with-bindservice
嗯 , 做一下筆記

26, 查看默認(rèn)debug的簽名

keytool -v -list -keystore C:\Users\Administrator\.android\debug.keystore

27, TextView文字設(shè)置豎向顯示

1.屬性介紹:
安卓中XML屬性有 android:ems="x"
x表示一行顯示的字符個(gè)數(shù)。
2.具體的設(shè)置
第一步:設(shè)置控件寬度為包裹內(nèi)容 android:layout_width="wrap_content"
第二步:設(shè)置每行顯示一個(gè)字符 android:ems="1"

28, 獲取當(dāng)前是否有網(wǎng)絡(luò)

添加權(quán)限 :

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

代碼如下 :

ConnectivityManager connectivityManager = (ConnectivityManager)
                getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable()) {
    //網(wǎng)絡(luò)已打開(kāi)
    } else {
    //網(wǎng)絡(luò)已關(guān)閉
}

29, 發(fā)送一個(gè)系統(tǒng)廣播通知手機(jī)有圖片更新

保存好圖片之后 , 有時(shí)候在本地相冊(cè)查看不了 , 其實(shí)是要發(fā)送一條廣播去通知手機(jī)有圖片更新 , 代碼如下 :

Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(new File(filePath));
intent.setData(uri);
sendBroadcast(intent);

30, 重啟APP :

 Intent intent = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 startActivity(intent);
最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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