天天看點

Android小知識10則(上)(2018.8重編版)

Android小知識10則(下)

目錄

  • 前言
  • 橫豎屏鎖定
  • 不同分辨率的圖示
  • 将字元串寫在資源檔案中
  • 為AlertDialog設定點選監聽
  • ProgressDialog了解一下
  • 最後

Android的知識還是比較碎的, 日常積累很重要. 我把平常一些小知識點整合整合, 理成了上下兩篇文章, 每篇五個知識點.

有兩種方法可以實作
  • 使用配置檔案

    AndroidManifest.xml

    activity

    标簽下添加

    android:screenOrientation="portrait"

    即可.預設是

    android:screenOrientation="unspecified"

    , 也就是根據系統目前的橫豎屏狀态切換.
  • 使用Java代碼

    使用

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    是鎖定橫屏. 使用

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    是鎖定豎屏.
個人推薦寫在配置檔案裡面. 來兩張圖:

配置檔案

Java代碼

由于Android的分辨率很不統一, 小到4寸左右, 大到10寸左右. 螢幕适配是很惡心人的問題. 這裡就簡單說一下如何添加不同分辨率的圖示到工程當中.

首先看一下官方的例子, 我們的目标就是讓我們的圖示按照不同分辨率, 放在一個同名檔案夾中.

官方例子

右擊mipmap檔案夾, 在目錄中打開, 我的是mac是以顯示finder, win/linux的話好像是檔案浏覽器之類的名稱吧, 位置是差不多的.

右擊mipmap檔案夾

然後就很簡單了, 你隻需要把不同分辨率的圖示, 由小到大逐一放入到mipmap-hdpi到mipmap-xxxhdpi中即可. 當然了, drawable也是一樣, 從drawable-hdpi到drawable-xxxhdpi.
回到Android Studio就會有想要的效果了, 用的時候隻要輸入圖檔名稱即可, 系統會自動選擇最合适的圖檔顯示. 當然說是這麼說, 其實布局檔案還得按照分辨率來寫不是, 沒準還要區分版本(手動無奈).

将字元串寫在資源檔案中好處是不言而喻的, 便于管理, 便于查找, 便于維護, 便于全球化等等, 而且上傳github的時候, 它也會死命提示你的(手動滑稽). 那就來看看這個知識點吧.
  • 單個字元串

    單個字元串的使用是非常簡單的. 将字元串寫在strings.xml中, java直接引用就好. 或者用getResources().getString()方法

<string name="single_str">SingleStr</string>
           
TextView tvSingleStr = (TextView) findViewById(R.id.tv_single_str);
tvSingleStr.setText(R.string.single_str);
           
getResources().getString(R.string.app_name);
           
  • 字元串數組

    字元串數組的使用稍微麻煩點. 同樣在strings.xml中寫一個字元串數組. 然後在java裡面引用.

<string-array name="str_arr">
    <item>a</item>
    <item>b</item>
    <item>c</item>
    <item>d</item>
</string-array>
           
String[] stringArray = getResources().getStringArray(R.array.str_arr);
TextView tvStrArr = (TextView) findViewById(R.id.tv_str_arr);
tvStrArr.setText(Arrays.toString(stringArray));
           
  • 格式化字元串

    這個格式化字元串在c裡面是家常便飯, 但是到了java可能就沒那麼好使了. 總之, 也還是可以用的. 步驟還是一樣, 先strings.xml, 後java.

<string name="format_str">我買了%1$d個蘋果, 花了%2$.2f元, 抽到了%3$s去夏威夷的票, 用手比了一個%4$c</string>
           
String formatStr
        = String.format(getResources().getString(R.string.format_str), 5, 3.2, "兩張", 'v');
TextView tvFormatStr = (TextView) findViewById(R.id.tv_format_str);
tvFormatStr.setText(formatStr);
           

  • 為清單和單選清單設定監聽

    關于AlertDialog的初步使用請參見

    之前的文章 . 然後來看具體添加監聽的代碼.
  • 清單

    直接在setItems後面添加監聽函數, 或者建立類實作監聽接口都是可以的, 要說的是, which對應點選的條目, 從0開始. 比如說點選"apple"就是0, 點選"boy"就是1.

builder.setItems(new String[]{"apple", "boy", "cat"}, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        Log.i("sorrower", "which: " + which);
    }
});
           
  • 單選清單

    單選清單大體和清單相同, 值得一提的就是setSingleChoiceItems的第二個參數如果是-1, 就代表都不選, 如果是0, 代表預設選中第一個, 這裡的話就是"apple".

builder.setSingleChoiceItems(new String[]{"apple", "boy", "cat"}, -1, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        Log.i("sorrower", "which: " + which);
    }
});
           
  • 為AlertDialog自帶按鈕設定監聽

    每個AlertDialog預設有三個按鈕的, 肯定否定和中性. 這裡不使用匿名監聽, 我們建立一個類實作監聽接口.

builder.setPositiveButton("positive", new clickListener());
builder.setNegativeButton("negative", new clickListener());
builder.setNeutralButton("neutral", new clickListener());
           
class clickListener implements DialogInterface.OnClickListener {
    @Override
    public void onClick(final DialogInterface dialog, int which) {
        Log.i("sorrower", "which: " + which);
    }
}
           
然後得到的結果和猜想的不太一樣, 點選NeutralButton, which的值是-3; 點選NegativeButton, which的值是-2; 點選PositiveButton, which的值是-1. 我們可以使用which值區分使用者點選.

進度條彈窗還是很實用的, 今天就帶大家了解一下! 先來張效果圖:
Android小知識10則(上)(2018.8重編版)

效果圖

final ProgressDialog pd = new ProgressDialog(this);
pd.setIcon(R.mipmap.ic_launcher_round);
pd.setTitle("Dealing...");

pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // 設定為矩形進度條

pd.setCancelable(false);

pd.setIndeterminate(false); // 設定進度條是否為不明确
pd.setMax(100);
pd.setProgress(0);

pd.show();

new Thread() {
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            try {
                Thread.sleep(80);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            final int j = i + 1;
            pd.setProgress(j);
        }
        pd.dismiss();
    }
}.start();
           
如果你改一行

pd.setIndeterminate(true);

, 那麼就不會顯示百分比, 和處理具體數. 直接上圖:
Android小知識10則(上)(2018.8重編版)
如果你注釋掉

pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

這一行. 那麼就是那種圓形掃描式的進度條, 你見過的. 上圖:
Android小知識10則(上)(2018.8重編版)

還有下篇的五個知識點哦, 覺得不錯記得點贊或者關注我哦~