Android初級-常用控件(下),資源

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();
}

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

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

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