01-進度條(ProgressBar)的概述,屬性,常用方法
//在開發(fā)時,當(dāng)需要下載或上傳文件時,需要讓用戶知道當(dāng)前的進度,就需要使用進度條
//xml中使用
<ProgressBar android:id="@+id/pb_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:progress="20"
android:secondaryProgress="50"
style="@android:style/Widget.ProgressBar.Horizontal"
android:max="100"/>
//減少或增加進度,值為整數(shù)就是增加,負數(shù)就是減少
pb_show.incrementProgressBy(-5);//第一進度
pb_show.incrementSecondaryProgressBy(-3);//第二進度
02-拖動條(SeekBar)的概述,屬性,常用方法
//在開發(fā)過程中,音量及音視頻播放的時候,
//需要快速定位到某個地方,這時候可以使用拖動條來實現(xiàn)
//xml中定義拖動條來使用
<SeekBar
android:id="@+id/sb_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="255" //最大進度,是音視頻的最大時長
android:progress="50" //當(dāng)前定位到的播放位置/>
//拖動SeekBar,進行監(jiān)聽,調(diào)整當(dāng)前位置
//為seekBar設(shè)置監(jiān)聽事件
sb_id.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
//停止拖動
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
Log.e("--Main--", "--------停止拖動-------");
}
19
//開始拖動
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
Log.e("--Main--", "--------開始拖動-------");
}
//拖動中
@Override
public void onProgressChanged(SeekBar seekBar,
int progress, boolean fromUser) {
Log.e("--Main--", "--------拖動中:progress="+progress);
iv_head.setAlpha(progress);//修改圖片的透明度
tv_show.setText(String.valueOf(progress));//修改文本顯示的內(nèi)容
}
});
03-AlertDialog作用以及使用場景,不同樣式的對話框創(chuàng)建顯示(兩個案例 基本 和 自定義)

image.png
1.普通對話框:
//在做刪除修改退出等時,需要提示用戶就需要用到提示框
//AlertDialog彈出對話框就是完成這項功能的
// A:彈出普通對話框
// 1.創(chuàng)建一個AlertDialog.Builder對象
new AlertDialog.Builder(this)
// 2.給Builder對象設(shè)置標(biāo)題,圖標(biāo)等
.setIcon(R.drawable.f).setTitle("普通對話框ssss")
// 3.給Builder對象設(shè)置信息
.setMessage("大家好帥嗎?sssss")
// 4.設(shè)置確定,取消按鈕
.setPositiveButton("帥ssss", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你選擇帥sss", Toast.LENGTH_SHORT).show();
}
}).setNegativeButton("不帥sss", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你選擇不帥sss", Toast.LENGTH_SHORT).show();
}
})
// 5.顯示對話框
.show();
2.自定義視圖的對話框

image.png
//創(chuàng)建線性布局
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);//設(shè)置布局走向為垂直
//創(chuàng)建輸入框?qū)ο?
final EditText et_name = new EditText(this);
et_name.setHint("請輸入用戶名");
final EditText et_psw = new EditText(this);
et_psw.setHint("請輸入密碼");
Button button = new Button(this);
button.setText("哈哈");
button.setLayoutParams(new ViewGroup.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
//將輸入框添加到線性布局中
ll.addView(et_name);
ll.addView(et_psw);
ll.addView(button);
//1.創(chuàng)建一個AlertDialog.Builder對象
new AlertDialog.Builder(this)
//2.給Builder對象設(shè)置圖標(biāo),標(biāo)題
.setIcon(R.drawable.ic_launcher)
.setTitle("自定義對話框")
//3.給Builder對象設(shè)置自定義內(nèi)容
.setView(ll)//將自定義視圖設(shè)置到對話框中
//4.設(shè)置確定和取消按鈕
.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 獲取輸入框中的內(nèi)容
String name = et_name.getText().toString();
String psw = et_psw.getText().toString();
Toast.makeText(MainActivity.this, "輸入框的內(nèi)容是:用戶名:"+
name+",密碼:"+psw, Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("取消", null)
//5.顯示對話框
.show();
04-通過java代碼實現(xiàn)UI效果(最基礎(chǔ)的)
//創(chuàng)建線性布局
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);//設(shè)置布局走向為垂直
//創(chuàng)建輸入框?qū)ο?
final EditText et_name = new EditText(this);
et_name.setHint("請輸入用戶名");
final EditText et_psw = new EditText(this);
et_psw.setHint("請輸入密碼");
05-資源命名規(guī)范,以及應(yīng)用資源的統(tǒng)一整理(尺寸適配和圖片適配的命名)
dpi范圍密度對應(yīng)范圍
dpi 密度
0dpi ~ 120dpi ldpi
120dpi ~ 160dpi mdpi
160dpi ~ 240dpi hdpi
240dpi ~ 320dpi xhdpi
320dpi ~ 480dpi xxhdpi
480dpi ~ 640dpi xxxhdpi
對于每種密度下的icon應(yīng)該設(shè)計成什么尺寸其實Android也是給出了最佳建議
mipmap-mdpi 48 * 48(博主實測圖標(biāo)16就夠了)
mipmap-hdpi 72 * 72(博主實測圖標(biāo)32就夠了)
mipmap-xhdpi 96 * 96(博主實測圖標(biāo)48就夠了)
mipmap-xxhdpi 144 * 144(博主實測圖標(biāo)64就夠了)
mipmap-xxxhdpi 192 * 192(博主實測圖標(biāo)72就夠了)
06-shape自定義圖片
使用自定義shap步驟:
1.在res下創(chuàng)建drawable目錄
2.在drawable目錄下創(chuàng)建一個根標(biāo)簽為shape的xml文件
3.去指定shape的形狀及填充顏色等
4.在布局資源中使用backgroud屬性來引入使用該圖形xml
//橢圓(圓)
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" >
//漸變色
<gradient android:startColor="#F80101"
android:centerColor="#0B20BA"
android:endColor="#1AAE0E"/>
</shape>
//矩形
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
//圓角
<corners android:radius="30dp"/>
//填充顏色
<solid android:color="#FF0000"/>
</shape>
//環(huán)形
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="ring"
android:innerRadius="20dp"
android:thickness="19dp"
android:useLevel="false">
<!-- android:innerRadius="30dp" 內(nèi)圓半徑
android:thickness="10dp" 環(huán)形寬度 -->
<!-- 給環(huán)形加邊框
注意:邊框的寬度+環(huán)形的寬度+內(nèi)圓的半徑=組件寬度的一半 -->
<stroke android:width="1dp"
android:color="#FD0202"/>
<!-- 填充色會填充環(huán)形 -->
<solid android:color="#48C36C"/>
</shape>
//選擇器
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- android:state_pressed="false"組件沒有被按下時顯示的背景
android:drawable="@drawable/rectangle_bg"
-->
<item android:state_pressed="false"
android:drawable="@drawable/rectangle_bg"></item>
<!-- android:state_pressed="true"組件被按下時顯示的背景
android:drawable="@drawable/rectangle_bg2"
-->
<item android:state_pressed="true"
android:drawable="@drawable/rectangle_bg2"></item>
</selector>
07-style樣式資源和theme主題資源的使用
//在styles.xml中定義自定義主題
<!-- 自定義主題 -->
<style name="MyAppTheme" parent="AppBaseTheme">
<!-- 隱藏標(biāo)題欄 -->
<item name="android:windowNoTitle">true</item>
<!-- 隱藏狀態(tài)欄 -->
<item name="android:windowFullscreen">true</item>
<!-- 添加邊框 -->
<item name="android:windowFrame">@drawable/t</item>
</style>
//java代碼中為某個Activity設(shè)置該主題
// Java代碼實現(xiàn):使用自定義的主題,在onCreate方法的setContentView方法之前使用
setTheme(R.style.MyAppTheme);
setContentView(R.layout.activity_theme);
//xml中使用自定義主題
//在application標(biāo)簽下指定android:theme="@style/MyAppTheme" 主題,
//整個應(yīng)用都使用該主題
//在activity標(biāo)簽下指定android:theme="@style/MyAppTheme" 主題,
//只有該Activity有該主題
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
</activity>
08-style設(shè)置TextView 的寬高、字體大小及顏色、背景;theme的應(yīng)用樣式
<style name="myTextViewStyle">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:padding">10dp</item>
<item name="android:textSize">26sp</item>
<item name="android:layout_margin">10dp</item>
<item name="android:textColor">#D722CF</item>
<item name="android:background">#629BF5</item>
</style>
09-raw與assets中資源的區(qū)別
/*在建立項目中一般會默認(rèn)建立assets文件,
當(dāng)然我們還可以在res文件下面建立raw文件夾,
這里面都可以存放一些圖片,音頻或者文本信息,
可以供我們在程序當(dāng)中進行使用,不過他們兩個也有不同點;
assets下面的文件不會被編譯,通過路徑可以去訪問其中的內(nèi)容。
raw中文件會自動編譯,我們可以在R.java文件中找到對應(yīng)的ID,
* Raw目錄和Assets目錄的區(qū)別
* 1.Raw目錄下的文件可以映射到R文件中,Assets目錄不可以
* 2.Raw目錄下文件通過Resources類來獲取,
Assets目錄下的文件通過AssetsManager類來獲取
* 3.Raw目錄下不可以再創(chuàng)建文件夾,Assets目錄可以
* 4.Raw目錄和Assets目錄都是原生資源,在Apk打包時不會編譯成二進制文件。
*/
//1.獲取AssetsManager對象
// 1.獲取AssetsManager對象
AssetManager assetManager = getAssets();
try {
// 2.通過AssetsManager對象的open來獲取文件名對應(yīng)的輸入流
InputStream is = assetManager.open("aa/test2.txt");
// 3.將流轉(zhuǎn)為字符串
BufferedReader br = new BufferedReader(new InputStreamReader(is, "gbk"));
StringBuffer sb = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line);
}
// 將讀取到的內(nèi)容吐司出來
Toast.makeText(this, sb.toString(), Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
// 1.獲取raw目錄下的文件,需要用到資源管理類
Resources resources = getResources();
// 2.通過Resources對象的openRawResource(R.raw.test) 獲取到指定的文件對應(yīng)的流
InputStream is = resources.openRawResource(R.raw.test);
// 3.將流轉(zhuǎn)為字符串
try {
BufferedReader br = new BufferedReader(new InputStreamReader(is, "gbk"));
StringBuffer sb = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line);
}
// 將讀取到的內(nèi)容吐司出來
Toast.makeText(this, sb.toString(), Toast.LENGTH_SHORT).show();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}