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值區分使用者點選.
進度條彈窗還是很實用的, 今天就帶大家了解一下! 先來張效果圖:
效果圖
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);
, 那麼就不會顯示百分比, 和處理具體數. 直接上圖:
如果你注釋掉 pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
這一行. 那麼就是那種圓形掃描式的進度條, 你見過的. 上圖:
還有下篇的五個知識點哦, 覺得不錯記得點贊或者關注我哦~