Android Studio 開発【 ファイル構成 】

3分で学ぶAndroid Studio【 ファイル構成 】

Projectウインドウの解説動画です。
主要なファイルを解説しています。

この動画は「アプリ新規作成」を済ませた状態でご覧ください。

3分で学ぶAndroid Studio【 ファイル構成 】 ファイル解説2

Project

表示をProjectにしておく
※ 他でも編集可能です。

MainActivity

プログラム(動的な命令)を記載するファイル
※「ボタンを押したら背景色を変えなさい」などを記載

activity_main.xml

レイアウト(画面の見た目)を記載するファイル
※「ボタンを右上に表示」などを記載

AndroidManifest.xml

アプリの設定などを記載するファイル
※「アプリアイコン」や「対応バージョン」などを記載

Android Studio入門

Android Studio 開発【 画面構成 】

3分で学ぶAndroid Studio【 画面構成 】768

Android Studioの画面構成の解説動画です。
アプリ作成の前の基礎知識としてとらえてください。

この動画は「アプリ新規作成」を済ませた状態でご覧ください。

Android Studio 画面構成
Android Studio 画面構成

メニューとツール

  1. 実行ボタン :作成したアプリを実行するボタン
  2. AVD Manager :エミュレーターの管理
  3. SDK Manager :開発に必要な追加ファイルを管理

ファイル構成

アプリ内のファイルやフォルダが一覧で表示されていてダブルクリックで開くことができます。

ファイル編集領域

編集したいファイルはこの領域で編集します。

ログやメッセージ

起動時のエラーや実機の状態が表示されます。

Android Studio入門

Android Studio 開発【 新規作成 】

3分で学ぶ Android Studio【新規作成】768

今更ですが「アプリケーションの新規作成」の解説動画です。

新規作成には専門用語が数多く出てきます。
未経験者には非常に理解しにくいので、重要な用語を僕なりに解説したいと思います。

すでにプロジェクト(アプリケーション)を編集中の場合はFileからClose Projectを選択してください。

3分で学ぶ AndoirStudio【 CloseProject 】
編集中の場合は先に「プロジェクトを閉じる」

新規アプリケーションを作成します。
メニューから Start a new AndroidStudio Projectをクリック

3分で学ぶ AndoirStudio【 新規プロジェクトの作成 】
新規プロジェクトの作成

① アプリの名前

アプリの名前を入力します。
自由につけれますが、慣れるまでは半角英数を入力
(最初は大文字、最初の1文字目に数字は使用しない)
※ 動画ではText0530(数字は作成日)を使用

② ドメイン

作成者を識別するためにドメインを入力。
パッケージネーム(フォルダと思ってOK)に使用されます。
※ ドメインをお持ちで内方は学習用に「test.com」でOK

③ 保存先フォルダー

作成するアプリ(プロジェクト)を保存するフォルダ
※ 日本語だと不都合が怖いので変えた方が良いかも

3分で学ぶ AndoirStudio【 アプリ名 】
アプリ名

作成するアプリがどのバージョン以上で動作するのか指定します。
サンプルではAndroid 4.0.3以上のスマフォを対象にしていることになります。
※ サンプルでは古いスマフォは対象外になりますが、現在(2015/05/30)
4.0.3未満は非対応でも問題ないと思われます。

3分で学ぶ AndoirStudio【 対象スマフォのバージョン 】
対象スマフォのバージョン

各バージョン以上の使用率が表示されます。
2015/05/31では「4.1以降が82.6%使用されてる」になります。

3分で学ぶ AndoirStudio【 各バージョンの使用率 】
各バージョンの使用率(シェア)

Activity(アクティビティ:アプリの画面でOK)を
選択します。当面Empty(エンプティ:空の )ActivityでOKです。
※ Emptyが無ければBlankを選択してください。

新規作成-Ver1.5

複数のファイル名等を入力
・Activity: プログラム(動的な動き)を記載するファイル名
・Lyout Name: 画面レイアウト(ボタンや画像の並べ方)を記載するファイル名
・Title: 画面のタイトル文字( 例「設定画面」など)
・Menu Resouce Name: メニュー内容を記載するファイル名
* ここでは分かりやすさを優先して「ファイル名」と表現していますが、正式には違います。
* 詳しくなるまでは「ファイル名だ」と聞き流してもらってOKで初期設定も変更する必要ありません。

3分で学ぶ AndoirStudio【 名前の入力 】
名前の入力

エラー等で表示されない場合はプレビューバージョンを
変更してみてください。

3分で学ぶ AndoirStudio【 プレビュー 】
プレビュー

ファイル構成の表示を「Project」に設定
一部の操作に必要

3分で学ぶ AndoirStudio【 成功 】
ファイル構成の表示
Android Studio入門

Android プログラミング【 Viewの非表示 】

5分で学ぶAndroidプログラミング【Viewの非表示】

前回学習した「文字枠の追加」の「文字枠」を非表示にする方法です。
この動画の前に「文字枠の追加」を済ませておいてください。

Viewの非表示【TextViewを非表示にする】
TextViewを非表示にする

応用で「タイトルボタンを非表示にする」などかなり幅広く使える命令です。

Viewの非表示【幅広く利用可能】
幅広く利用可能
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:src="@drawable/character" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:id="@+id/charText"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:textSize="40dp"
        android:layout_marginBottom="20dp" />


</RelativeLayout>

アプリケーション起動時に文字枠(TextView)の非表示

package com.test.test; // この行はコピペするとエラーが出ます。(アプリ毎に違う内容になる)

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;


public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 文字枠の非表示
        findViewById(R.id.charText).setVisibility(View.INVISIBLE);
    }

    // 以下略 (変更不要)
    
}

findViewById(R.id.●●).setVisibility(View.INVISIBLE);
Viewの非表示【適切な場所にコピペするだけ】
Viewの非表示【適切な場所にコピペするだけ】
Viewの非表示【 解説 】
Viewの非表示【 解説 】

アプリケーション起動時に非表示 → オプションメニュー選択で表示

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:src="@drawable/character" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:id="@+id/charText"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:textSize="40dp"
        android:layout_marginBottom="20dp" />


</RelativeLayout>
Android Studio入門

Android Studio 開発【 キャラクターと背景 】

15分で学ぶAndroidプログラミング【キャラと背景】800
ゲーム等でのキャラクターと背景を表示させるサンプルです。

サンプルですが、実際のアプリに使用している方法で「比較的簡単で不都合少なく幅広く」利用できると思います。

※ この動画は以前公開した「背景画像の設定」「キャラクターの表示」を組み合わせた内容です。

画面サイズと方向にとらわれない
画面サイズと方向にとらわれない
プログラミングに対応
プログラミングに対応

ご自身で画像を用意する場合は以下にご注意ください。

  • ファイル名は半角英数小文字とアンダーバーのみ使用可能、なおかつ最初の1文字は半角英数小文字のみ
  • 画像サイズが大きすぎるとエラーが出る場合があります。
  • キャラクター(背景の上に表示させる画像)はPNGの24ビットで背景可視を使用しています。
キャラクターを中央に表示させる
サメ
背景画像の設定 【 背景画像 】
サンプル 背景画像
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/imageView"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:src="@drawable/back"
        android:scaleType="centerCrop" />

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/imageView2"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:src="@drawable/character" />

</RelativeLayout>

Android Studio入門

Android Studio 開発【キャラクターの表示 】

3分で学ぶAndroidStudio【キャラクターの表示】800
ゲーム等でのキャラクターを表示させる方法です。

「比較的簡単で不都合が少なく幅広く」使用することが出来ます。
前回の「背景画像の設定」と組み合わせて使用可能です。

  • 画面サイズが違っても対応可能
  • 縦画面でも横画面でも対応可能
  • キャラクターは画面中央に表示される
  • できる限り画面いっぱいに表示される
  • 背景の上に重ねて表示させる使用
キャラクターの表示_画面サイズの違い
画面サイズの違い
キャラクターの表示_幅広い利用
幅広い利用
キャラクターの表示_プログラミングに対応
プログラミングに対応

ご自身で画像を用意する場合は以下にご注意ください。

  • ファイル名は半角英数小文字とアンダーバーのみ使用可能、なおかつ最初の1文字は半角英数小文字のみ
  • 画像サイズが大きすぎるとエラーが出る場合があります。
  • キャラクター(背景の上に表示させる画像)はPNGの24ビットで背景可視を使用しています。

キャラクターを中央に表示させる
サメ
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:src="@drawable/character" />

</RelativeLayout>

キャラクターの表示_キャラクターのみ
キャラクターのみ
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/imageView2"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:src="@drawable/back"
        android:scaleType="centerCrop" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:src="@drawable/character" />

</RelativeLayout>

キャラクターの表示_キャラクターと背景
キャラクターと背景
Android Studio入門

Android Studio 開発【背景画像の設定 】

3分で学ぶ Android Studio【縦横対応-背景画像の設定】800

ゲーム等での背景画像の設定方法です。

「比較的簡単で不都合が少なく幅広く」使用することが出来ます。
また、このサイトで紹介するアプリにはほぼ全て利用可能です。

  • 画面サイズが違っても対応可能
  • 縦画面でも横画面でも対応可能
  • 背景は画面中央に表示される
  • 縮尺は守られ、余白はカットされる
  • 背景のみを表示(タイトルやキャラクターは別)
  • 背景の種類によっては不都合有り
  • 画面の固定を利用するとさらに安定
画面サイズが違っても対応可能
画面サイズが違っても対応可能
Android Studio 【縦横画面に対応】
縦画面、横画面に対応
幅広く利用可能
幅広く利用可能

3分で済ますために細かい説明は省いています。
詳しくは以下の知識が必要で、現在準備中です。

  • アプリケーションの新規作成(準備中)
  • 画像の保存と利用(準備中)

ご自身で画像を用意する場合は以下にご注意ください。

  • ファイル名は半角英数小文字とアンダーバーのみ使用可能、なおかつ最初の1文字は半角英数小文字のみ
  • 画像サイズが大きすぎるとエラーが出る場合があります。

背景画像の設定 【 背景画像 】
サンプル 背景画像
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/imageView"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:src="@drawable/back"
        android:scaleType="centerCrop" />
</RelativeLayout>

動画で学ぶ、Androidアプリの作り方

簡易ミュージックアプリ

アンドロイドアプリ作成の「複数のバックミュージック再生」を解説しているページです。
アンドロイドアプリの作り方「簡易ミュージックアプリ」
  • 内  容 :複数曲の再生と停止 「バックミュージックの再生」の続編
  • 難 易 度 :★★★★☆ ( 未経験者の理解、応用は難しいので、再現できるを目指す )
  • 予備知識 :変数、メソッド、IF関数、IDの理解、XML
  • 注  意 :開発ソフトのバージョンやPCの環境によって正常に機能しないときがあります。
  • 補  足 :2015/02/11現在、Android StudioとEclipseの両方で対応。
  1. はじめに → YouTube
  2. 素材の用意 → YouTube
  3. レイアウト作成 → YouTube
  4. 画像の変更 → YouTube
  5. 1曲の再生と停止 → YouTube
  6. 複数曲の再生と停止 → YouTube
  7. Android Studioで復習 → YouTube
動画で学ぶアンドロイドアプリ 【簡易ミュージック】 jazz
jazz(停止中)
動画で学ぶアンドロイドアプリ 【簡易ミュージック】 lock
lock(停止中)
動画で学ぶアンドロイドアプリ 【簡易ミュージック】 pops
pops (停止中)
動画で学ぶアンドロイドアプリ 【簡易ミュージック】 jazz2
jazz2 (再生中)
動画で学ぶアンドロイドアプリ 【簡易ミュージック】 lock2
lock2 (再生中)
動画で学ぶアンドロイドアプリ 【簡易ミュージック】 pops2
pops2 (再生中)

利用サイト様 :Music is VFR

mp3ファイルを3曲用意してください。
極端に長い曲、短い曲、容量の大きい曲以外でしたら問題ありません。
フォルダ名、ファイル名は全て小文字で以下と全く同じにしてください。

  • raw (フォルダ)
    • jazz.mp3
    • lock.mp3
    • pops.mp3
アンドロイドアプリの作り方-【-簡易ミュージックアプリ-】-保存場所
保存場所

※ ファイル名、フォルダ名は完全に一致してください。1文字でも違うとエラーです。

アプリ名[Eclipseの場合]
エクリプスの場合

アプリ名[アンドロイドスタジオの場合]
アンドロイド スタジオの場合
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/pops"
        android:src="@drawable/pops"
        android:layout_weight="1"
        android:scaleType="centerCrop"
        android:onClick="pops"/>

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/lock"
        android:src="@drawable/lock"
        android:layout_weight="1"
        android:onClick="lock"
        android:scaleType="centerCrop" />

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/jazz"
        android:layout_gravity="center_vertical"
        android:src="@drawable/jazz"
        android:layout_weight="1"
        android:onClick="jazz"
        android:scaleType="centerCrop" />

</LinearLayout>

XMLの解説図です。詳しくは動画をご覧ください。

アンドロイドアプリの作り方【ミュージックアプリ】XML解説
XML解説
package com.test.soundtest;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View; // インポート
import android.widget.ImageView; // インポート


public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /* ******************************************
    * クリック処理 (pops画像)
    ****************************************** */
    public void pops(View v) {
        // 画像の変更
        ((ImageView) findViewById(R.id.pops)).setImageResource(R.drawable.pops2);
        ((ImageView) findViewById(R.id.lock)).setImageResource(R.drawable.lock);
        ((ImageView) findViewById(R.id.jazz)).setImageResource(R.drawable.jazz);
    }

    /* ******************************************
    * クリック処理 (lock画像)
    ****************************************** */
    public void lock(View v) {
        ((ImageView) findViewById(R.id.pops)).setImageResource(R.drawable.pops);
        ((ImageView) findViewById(R.id.lock)).setImageResource(R.drawable.lock2);
        ((ImageView) findViewById(R.id.jazz)).setImageResource(R.drawable.jazz);
    }

    /* ******************************************
    * クリック処理 (jazz画像)
    ****************************************** */
    public void jazz(View v) {
        ((ImageView) findViewById(R.id.pops)).setImageResource(R.drawable.pops);
        ((ImageView) findViewById(R.id.lock)).setImageResource(R.drawable.lock);
        ((ImageView) findViewById(R.id.jazz)).setImageResource(R.drawable.jazz2);
    }
}

注意点!!

サンプルを適切にコピペすることで動作しますが・・・・意外と難しいです。

1文字違い、1行違うだけでアウトです。
以下を意識しながら確してください。

  • 記載場所 : {}や;より前か後ろか?
  • 文字の違い : 大文字と小文字 、全角と半角
  • コピー範囲  : 最後の;が入っているか?
  • ファイル名  : ファイル名、フォルダ名が1文字でもちがうと正常に動作しません
package com.test.soundtest;

import android.media.MediaPlayer;    // 再生の準備
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View; // インポート
import android.widget.ImageView; // インポート


public class MainActivity extends ActionBarActivity {

    // 再生の準備   //////////////////////
    MediaPlayer p;  // 再生に必要なファイルの読み込み

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /* ******************************************
    * クリック処理 (pops画像)
    ****************************************** */
    public void pops(View v) {
        // 画像の変更
        ((ImageView) findViewById(R.id.pops)).setImageResource(R.drawable.pops2);
        ((ImageView) findViewById(R.id.lock)).setImageResource(R.drawable.lock);
        ((ImageView) findViewById(R.id.jazz)).setImageResource(R.drawable.jazz);

        // 再生中なら停止
        if (p != null && p.isPlaying()) {
            p.stop(); // 停止
            p.release();// メモリの解放
        }

        // mp3の読み込み
        p = MediaPlayer.create(getApplicationContext(), R.raw.pops);
        p.setLooping(true);  // 連続再生設定
        p.start(); // 再生
    }

    /* ******************************************
    * クリック処理 (lock画像)
    ****************************************** */
    public void lock(View v) {
        ((ImageView) findViewById(R.id.pops)).setImageResource(R.drawable.pops);
        ((ImageView) findViewById(R.id.lock)).setImageResource(R.drawable.lock2);
        ((ImageView) findViewById(R.id.jazz)).setImageResource(R.drawable.jazz);
    }

    /* ******************************************
    * クリック処理 (jazz画像)
    ****************************************** */
    public void jazz(View v) {
        ((ImageView) findViewById(R.id.pops)).setImageResource(R.drawable.pops);
        ((ImageView) findViewById(R.id.lock)).setImageResource(R.drawable.lock);
        ((ImageView) findViewById(R.id.jazz)).setImageResource(R.drawable.jazz2);
    }

    /* ******************************************
    * アプリの終了
    ****************************************** */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        // クリア可能か確認
        if (p != null) {
            p.release();// メモリの解放
            p = null; // 最初に読み込んだファイルのクリア
        }
    }
}

package com.test.soundtest;

import android.media.MediaPlayer;    // 再生の準備
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View; // インポート
import android.widget.ImageView; // インポート


public class MainActivity extends ActionBarActivity {

    // 再生の準備   //////////////////////
    MediaPlayer p;  // 再生に必要なファイルの読み込み

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /* ******************************************
    * クリック処理 (pops画像)
    ****************************************** */
    public void pops(View v) {
        // 画像の変更
        ((ImageView) findViewById(R.id.pops)).setImageResource(R.drawable.pops2);
        ((ImageView) findViewById(R.id.lock)).setImageResource(R.drawable.lock);
        ((ImageView) findViewById(R.id.jazz)).setImageResource(R.drawable.jazz);

        // 再生中なら停止
        if (p != null && p.isPlaying()) {
            p.stop(); // 停止
            p.release();// メモリの解放
        }

        // mp3の読み込み
        p = MediaPlayer.create(getApplicationContext(), R.raw.pops);
        p.setLooping(true);  // 連続再生設定
        p.start(); // 再生
    }

    /* ******************************************
    * クリック処理 (lock画像)
    ****************************************** */
    public void lock(View v) {
        ((ImageView) findViewById(R.id.pops)).setImageResource(R.drawable.pops);
        ((ImageView) findViewById(R.id.lock)).setImageResource(R.drawable.lock2);
        ((ImageView) findViewById(R.id.jazz)).setImageResource(R.drawable.jazz);

        if (p != null && p.isPlaying()) {
            p.stop();
            p.release();
        }
        p = MediaPlayer.create(getApplicationContext(), R.raw.lock);
        p.setLooping(true);
        p.start();
    }

    /* ******************************************
    * クリック処理 (jazz画像)
    ****************************************** */
    public void jazz(View v) {
        ((ImageView) findViewById(R.id.pops)).setImageResource(R.drawable.pops);
        ((ImageView) findViewById(R.id.lock)).setImageResource(R.drawable.lock);
        ((ImageView) findViewById(R.id.jazz)).setImageResource(R.drawable.jazz2);

        if (p != null && p.isPlaying()) {
            p.stop();
            p.release();
        }

        p = MediaPlayer.create(getApplicationContext(), R.raw.jazz);
        p.setLooping(true);
        p.start();
    }

    /* ******************************************
    * アプリの終了
    ****************************************** */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        // クリア可能か確認
        if (p != null) {
            p.release();// メモリの解放
            p = null; // 最初に読み込んだファイルのクリア
        }
    }
}