1. 程式人生 > >Android的資源引用(3)(Layout、Menu、Style、Them、Attribute、assets)

Android的資源引用(3)(Layout、Menu、Style、Them、Attribute、assets)

一、Layout資源時放在/res/layout/目錄下面,layout資源下面的根元素通常為佈局管理器,在每個佈局管理器中定義各種的view.

二、使用選單menu資源,資源時放在/res/menu/目錄下面,資源的根元素通常為<menu ...../>元素,其中menu的用法在,另一片有介紹menu的一些用法

三、樣式Style,該資源存放在/res/values/目錄下面,樣式資源的根元素通常為<resources......./>,該元素中可以包含多個<style....../>子元素,每一個<style.../>定義一個樣式。

 

<style...../>元素指定如下的兩個屬性。

name:樣式的名稱

parent:樣式繼承父樣式,該樣式繼承父樣式的全部定義,也可以覆蓋父樣式的指定格式

 

<style...../>包含多個<item..../>子元素。

如下:

<resources>
  <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="DefaultFontStyle">
        <item name="android:textSize">29sp</item>
        <item name="android:textColor">#101010</item>
    </style>

    <style name="DefaultBackgroud" parent="DefaultFontStyle">
        <item name="android:background">#3cf968</item>
    </style>
    <style name="DefaultStyle" parent="@style/DefaultBackgroud">
    </style>
    <style name="TextViewFontStyle">
        <item name="android:textSize">30sp</item>
    </style>

    <style name="ButtonDefault">
        <item name="android:background">@drawable/pzb</item>
        <item name="android:focusable">true</item>
        <item name="android:clickable">true</item>
        <item name="android:layout_margin">20dp</item>
    </style>

    <style name="EditTextDefault">
        <item name="android:background">@drawable/ps</item>
        <item name="android:textColor">#ec7272</item>
        <item name="android:layout_marginLeft">10dp</item>
        <item name="android:layout_marginRight">10dp</item>
    </style>

    <style name="ButtonChange">
        <item name="android:background">@drawable/button_selector</item>
        <item name="android:layout_margin">20dp</item>
    </style>

    <style name="Button_gradient">
        <item name="android:textSize">20sp</item>
        <item name="android:background">@drawable/button_selector_gradient</item>
    </style>
</resources>

在佈局檔案中可已使用

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.asus.styletheme.MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="測試andoid的style和theme"
        android:id="@+id/test_style"
        style="@style/TextViewFontStyle"/>
    <Button
        android:layout_width="30dp"
        android:layout_height="20dp"
        android:id="@+id/pz"
        style="@style/ButtonDefault"/>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="37dp"
        android:id="@+id/edit_test"
        style="@style/EditTextDefault"/>
    <Button
        android:layout_width="50dp"
        android:layout_height="50dp"
        style="@style/ButtonChange"
        android:id="@+id/button_test"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button_gradient"
        android:text="test"
        style="@style/Button_gradient"/>
</LinearLayout>

效果圖

 

 

四、主題資源使用,主題資源通常也放在/res/values/目錄下面,主題資源的xml檔案同樣也是以<resource..../>作為根元素,同樣也是使用<style..../>元素來定義主題樣式。

主題和樣式的區別:

1、主題不能作用於單個的view元件上面,主題應該是對整個應用中的所有activity起作用,或者對指定的activity起作用。

2、主題定義的格式應該是改變外觀的格式,比如:視窗標題,視窗邊框

 

如:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

使用:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <service android:name=".service.MyService"></service>
    <service android:name=".service.MyService1"></service>
    <service android:name=".service.ChangeService"></service>

    <receiver android:name=".SmsReceiver.SmsReceiver">
        <intent-filter><action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>
    </receiver>


    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

五、屬性attribute資源的使用:資源也是存放在/res/values目錄下面,根元素也是<resource..../>

包含兩個屬性:

1、attr子元素:定義一個屬性

2、declare-styleable子元素,內一個styleable物件就是一組attr屬性組合:

 

 

七、assets資源

       除了上面介紹的各種XML檔案、圖片檔案之外,Android應用可能還需要用到大量其他型別的資源,比如聲音資源等。實際上,聲音對於Android應用非常重要,選擇合適的音效可以讓Android應用增色不少。類似於聲音檔案及其他各種型別的檔案,只要Android沒有為之提供專門的支援,這種資源都被稱為原始資源。Android 的原始資源可以放在如下兩個地方。
  1、位於/res/raw/目錄下,Android SDK會處理該目錄下的原始資源,Android SDK會在R清單類中為該目錄下的資源生成一個索引項。
  2、位於/assets/目錄下,該目錄下的資源是更徹底的原始資源。Android 應用需要通過AssetManager來管理該目錄下的原始資源。


  Android SDK會為位於/res/raw/目錄下的資源在R清單類中生成一個索引項,接下來在XML檔案中可通過如下語法格式來訪問它:
  @[<package_ name>: ]raw/file_ name
  在Java程式碼中則按如下語法格式來訪問:
  [<package_ name>.]R.raw. <file_ name>

 

通過上面的索引項,Androiad 應用就可以非常方便地訪問/raw目錄下的原始資源了。至於獲取原始資源之後如何處理,則完全取決於實際專案的需要。AssetManager是一個 專門管理assets目錄下原始資源的管理器類,AssetManager提供瞭如
下兩個常用方法來訪問Assets資源。
1、InputStream open(String fileName): 根據檔名來獲取原始資源對應的輸入流。
2、AssetFileDescriptor openFd(String fileName): 根據檔名來獲取原始資源對應的AssetFileDescriptor。AssetFileDescriptor 代表了一項原始資源的描述,應用程式可通過AssetFileDescriptor來獲取原始資源。

 

例項:

建立raw和assets檔案,分別在其中新增兩個.mp3的檔案,實現音樂播放.

package com.example.asus.summary2;

import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

import java.io.IOException;

/**
 * Created by asus on 2018/7/28.
 */

public class AssetsActivity extends AppCompatActivity implements View.OnClickListener{

    private MediaPlayer mediaPlayer1;
    private MediaPlayer mediaPlayer2;
    protected void onCreate(Bundle saveInstanceState) {
        super.onCreate(saveInstanceState);
        setContentView(R.layout.ass_activity);
        Button raw_m=findViewById(R.id.raw_m);
        Button assets_m=findViewById(R.id.assets_m);
        raw_m.setOnClickListener(this);
        assets_m.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.assets_m:{
                AssetManager manager=getAssets();
                try {
                    AssetFileDescriptor descriptor=manager.openFd("ass.mp3");
                    mediaPlayer2=new MediaPlayer();
                    mediaPlayer2.setDataSource(descriptor.getFileDescriptor());
                    mediaPlayer2.prepare();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                mediaPlayer2.start();
                break;
            }
            case R.id.raw_m:{
                mediaPlayer1=MediaPlayer.create(this,R.raw.ra);
                try {
                    mediaPlayer1.prepare();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                mediaPlayer1.start();
                break;
            }
            default:
                break;
        }
    }
}