Androidプログラミングブログ

Androidプログラミングを勉強していく中でわかったことをメモする

【Androidプログラミング入門 #018】ホーム画面やランチャーで表示されるアプリ名を変更する

はじめに

ホーム画面やランチャーで表示されるアプリ名を変更します。

ここかなと思うところを変更してみましたが、
MainActivityの名前が表示されてしまい、調べてみました。

ホーム画面やランチャーで表示されるアプリ名を変更

AndroidManifest.xmlを開きます。

ここかなと思って変更したところ

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.swift_studying.samplechangeappname" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="アプリ名"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="メインアクティビティ"
            android:theme="@style/AppTheme.NoActionBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

このアプリ名と書いている部分を変更すればいいのかと思い変更しましたが、
ホーム画面やランチャーで表示されるアプリ名は変更されません。

f:id:fjswkun:20151102204417p:plain

変更

メインactivityタグの中にあるintent-filterタグ内にandroid:labelを書くと
ホーム画面やランチャーで表示されるアプリ名が変更されます。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.swift_studying.samplechangeappname" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="アプリ名"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="メインアクティビティ"
            android:theme="@style/AppTheme.NoActionBar" >
            <intent-filter
                android:label="ホーム画面やランチャーのアプリ名"
                >
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

f:id:fjswkun:20151102204437p:plain

参考情報

参考

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

開発用デバイス

Androidの勉強をはじめた人は知っているようにエミュレーターはちょー遅い。
開発用に安いAndroidを買えば、勉強がはかどります!
iPhoneと比較すると安いので買ったほうがいいと思います。

おすすめデバイス

勉強用に使うだけなので価格が高い最新デバイスは必要ないと思います。
最新のデバイスは一人前のAndroidプログラマーになったら購入を検討しましょう。

nexus5 16GBASUS Nexus7 ( 2013 ) TABLET

その他に探すなら↓から。
Android nexus5を勉強用に購入

【Androidプログラミング入門 #017】Intentで画面遷移するときにデータを遷移先に渡す

はじめに

Intentで画面遷移するときにデータを遷移先に渡す。 Intentオブジェクトに受け渡すデータを追加してあげればいい。

ここではトップ画面でボタンを押すと、
特定のURLを遷移先に渡し、WebViewで開くようにします。

1. プロジェクト作成

f:id:fjswkun:20151101204437p:plain

f:id:fjswkun:20151101204447p:plain

f:id:fjswkun:20151101204500p:plain

f:id:fjswkun:20151101204511p:plain

2. 画面レイアウト作成

content_main.xmlを開きます。
プロジェクト作成時に自動的に追加されるTextViewを削除し、
Buttonを追加します。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_main" tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/main_activity_button"
        android:text="画面遷移する"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        />
</RelativeLayout>

3. 画面遷移処理の作成

MainActivity.javaを開きます。
onCreateメソッドの一番下に下記の処理を追記します。

ボタンを押した時に画面遷移させる処理です。
その中で遷移先に受け渡すデータをセットしています。

// ボタンに処理を追加
Button button = (Button)findViewById(R.id.main_activity_button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // 遷移先に渡すURL
        String url = "http://android.swift-studying.com";

        // Intent作成
        Intent intent = new Intent(MainActivity.this, WebViewActivity.class);
        intent.putExtra("url", url);

        // 画面遷移
        startActivity(intent);
    }
});

3. 遷移先画面追加

f:id:fjswkun:20151101204703p:plain

f:id:fjswkun:20151101204714p:plain

4. 遷移先画面のレイアウトの作成

activity_web_view.xmlを開きます。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_web_view"
    tools:context="com.swift_studying.samplemoveactivitywithdata.WebViewActivity">

    <WebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/webview_activity_webview"
        ></WebView>
</RelativeLayout>

5. 受け渡されたデータの受け取り

WebViewActivity.javaを開きます。
onCreateメソッドの一番下に下記追記します。

WebViewの設定と遷移するときにわたされたデータの受け取りをしています。

// webViewの設定
WebView webView = (WebView)findViewById(R.id.webview_activity_webview);
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);

// 受け渡されたデータを使う
String url = getIntent().getStringExtra("url");

// Webを表示
webView.loadUrl(url);

6. インターネットアクセス許可

AndroidManifests.xmlを開きます。
applicationタグの上にインターネットアクセス許可のための1行を追記します。

<uses-permission android:name="android.permission.INTERNET" />

7. 実行

実行します。

f:id:fjswkun:20151101210923p:plain

f:id:fjswkun:20151101210931p:plain

うまくいかなかった方はこちらからダウンロードして確認してみてください。
SampleMoveActivityWithData.zip - Google ドライブ

参考情報

参考

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

開発用デバイス

Androidの勉強をはじめた人は知っているようにエミュレーターはちょー遅い。
開発用に安いAndroidを買えば、勉強がはかどります!
iPhoneと比較すると安いので買ったほうがいいと思います。

おすすめデバイス

勉強用に使うだけなので価格が高い最新デバイスは必要ないと思います。
最新のデバイスは一人前のAndroidプログラマーになったら購入を検討しましょう。

nexus5 16GBASUS Nexus7 ( 2013 ) TABLET

その他に探すなら↓から。
Android nexus5を勉強用に購入

【Androidプログラミング入門 #016】ListView(リストビュー)のアイテムをタップしたときの処理を実装する

はじめに

ListView(リストビュー)のアイテムをタップしたときの処理を実装する。

ListViewを使ったことがない場合はこちらを一読。 android.swift-studying.com

この後、実装していく前に、こちらからサンプルプロジェクトをダウンロードしてください。
SampleListView.zip - Google ドライブ

ListView(リストビュー)のアイテムをタップしたときの処理は
ListViewでsetOnItemClickListenerで実装します。
アイテムをタップするとトーストが表示されます。

1. setOnItemClickListenerを実装

MainActivity.javaを開き、onCreateメソッドの一番下にsetOnItemClickListenerを実装します。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    // ListViewの読み込み
    ListView listView = (ListView)findViewById(R.id.listView);

    // Adapterの作成
    ListAdapter adapter = new ArrayAdapter<String>(
            this,
            android.R.layout.simple_list_item_1,
            persons
    );

    // Adapterの設定
    listView.setAdapter(adapter);

    // ListViewのアイテムタップ時の処理
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
        public void onItemClick(AdapterView<?> parent, View view, int position, long id){
            ListView listView = (ListView)parent;
            String item = (String)listView.getItemAtPosition(position);

            Toast.makeText(MainActivity.this, item, Toast.LENGTH_LONG).show();
        }
    });
}

2. 実行

実行します。

f:id:fjswkun:20151101185912p:plain

うまくいかなかった方はこちらからダウンロードして確認してみてください。

SampleListView.zip - Google ドライブ

参考情報

参考

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

開発用デバイス

Androidの勉強をはじめた人は知っているようにエミュレーターはちょー遅い。
開発用に安いAndroidを買えば、勉強がはかどります!
iPhoneと比較すると安いので買ったほうがいいと思います。

おすすめデバイス

勉強用に使うだけなので価格が高い最新デバイスは必要ないと思います。
最新のデバイスは一人前のAndroidプログラマーになったら購入を検討しましょう。

nexus5 16GBASUS Nexus7 ( 2013 ) TABLET

その他に探すなら↓から。
Android nexus5を勉強用に購入

【Androidプログラミング入門 #015】明示的インテントを使って画面遷移する

はじめに

ボタンを押したら画面遷移するサンプルを作ります。

画面遷移する際に使われるのがインテントです。
インテントには「明示的」インテント「暗黙的」インテントがあります。

違いは遷移先を指定するか、指定しないかです。

1. プロジェクトの作成

f:id:fjswkun:20151030003333p:plain

f:id:fjswkun:20151030003343p:plain

f:id:fjswkun:20151030003352p:plain

f:id:fjswkun:20151030003404p:plain

2. 遷移先画面の作成

f:id:fjswkun:20151030003427p:plain

f:id:fjswkun:20151030003441p:plain

3. トップ画面のレイアウト作成

ボタンを押したら画面遷移するようにしたいので、
画面にボタンを追加します。

content_main.xmlを開き、編集します。
プロジェクト作成時に自動追加されるTextViewを削除し、
ボタンを追加します。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_main" tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="次の画面へ"
        />
</RelativeLayout>

4. ボタン押下時の処理

ボタンを押したら画面遷移する処理を書きます。

MainActivity.javaを開き、編集します。 onCreateメソッドを下記のようにします。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    // ボタンを取得&画面遷移する処理
    Button button = (Button)findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            startActivity(intent);
        }
    });
}

5. 遷移先の画面レイアウトの作成

遷移先の画面は真っ白で、遷移したことがわかりにくいので
レイアウトを変更します。

遷移先画面のレイアウトXMLファイル(content_second.xm)を開き、
編集します。

ここではTextViewを追加しました。

l

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_second"
    tools:context="com.swift_studying.samoleexplicitintent.SecondActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="遷移先画面"
        />
</RelativeLayout>

6. 実行

実行します。

f:id:fjswkun:20151030005020p:plain

f:id:fjswkun:20151030005028p:plain

うまく実行されなかった場合、こちらからサンプルプロジェクトを
ダウンロードし、確認してください。
SamoleExplicitIntent.zip - Google ドライブ

参考情報

参考

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

開発用デバイス

Androidの勉強をはじめた人は知っているようにエミュレーターはちょー遅い。
開発用に安いAndroidを買えば、勉強がはかどります!
iPhoneと比較すると安いので買ったほうがいいと思います。

おすすめデバイス

勉強用に使うだけなので価格が高い最新デバイスは必要ないと思います。
最新のデバイスは一人前のAndroidプログラマーになったら購入を検討しましょう。

nexus5 16GBASUS Nexus7 ( 2013 ) TABLET

その他に探すなら↓から。
Android nexus5を勉強用に購入

【Androidプログラミング入門 #014】9patch drawツールを使う

はじめに

Androidで画像を扱うときに9patchというものが使える。

9patchとは?

画像サイズより大きく表示する場合に、どの部分を拡大するかを指定できる画像

といったところでしょうか。

9patchについて、ここの説明がわかりやすかったです。

www.dotproof.jp

どんなときに9patchを使うのか?

例えば、この画像。

f:id:fjswkun:20151029224628p:plain

Activityの背景に設定してみました。

f:id:fjswkun:20151029224825p:plain

このとおり、中心にある六角形がオリジナル画像と比較して、
縦長になってしまいます。

大きく表示する場合に、六角形の部分の形を変えず、
それ以外の部分を拡大するようにしたい場合に9patchが使えます。

Android Studioには9patchファイルの作成や編集ができるツールが入っています。

9patchファイルの作成

プロジェクト内の画像を右クリックし、
メニューから「Create 9-Patch file...」を選択すると作成できます。 f:id:fjswkun:20151029225414p:plain f:id:fjswkun:20151029225620p:plain

9patch編集ツールの起動

9patchファイルをダブルクリックすると起動します。 f:id:fjswkun:20151029225830p:plain

9patch編集ツールの使い方

こちらが参考になります。

dev.classmethod.jp

Android Studioでなく、Eclipseを使っているが、使い方は似ている。

9patchを背景に適用

9patchでこの画像の六角形の大きさが変わらないようにしました。

f:id:fjswkun:20151029224628p:plain

背景への設定は画像を背景に設定する時と同様です。
わからない場合はこちらを参考にしてください。

android.swift-studying.com

アプリを起動し、実行してみました。 f:id:fjswkun:20151029231043p:plain

参考情報

参考

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

開発用デバイス

Androidの勉強をはじめた人は知っているようにエミュレーターはちょー遅い。
開発用に安いAndroidを買えば、勉強がはかどります!
iPhoneと比較すると安いので買ったほうがいいと思います。

おすすめデバイス

勉強用に使うだけなので価格が高い最新デバイスは必要ないと思います。
最新のデバイスは一人前のAndroidプログラマーになったら購入を検討しましょう。

nexus5 16GBASUS Nexus7 ( 2013 ) TABLET

その他に探すなら↓から。
Android nexus5を勉強用に購入

【Androidプログラミング入門 #013】画像を使って背景を設定する

はじめに

画面に背景を設定します。

背景の設定はいくつか方法があるのですが、
ここでは画像を使った例を書きます。

他にもShapeリソースを使う方法などあります。
android.swift-studying.com

1. プロジェクト作成

f:id:fjswkun:20151029004450p:plain

f:id:fjswkun:20151029004502p:plain

f:id:fjswkun:20151029004513p:plain

f:id:fjswkun:20151029004523p:plain

2. 画像をプロジェクトに追加

手持ちの画像をプロジェクトに追加します。

追加した画像
f:id:fjswkun:20151029004826p:plain

f:id:fjswkun:20151029004604p:plain

3. 画面レイアウトで画像をバックグラウンドに設定

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:background="@drawable/background"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_main" tools:context=".MainActivity">

    <TextView android:text="Hello World!" android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>

4. 実行

実行します。

f:id:fjswkun:20151029004738p:plain

参考情報

参考

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

開発用デバイス

Androidの勉強をはじめた人は知っているようにエミュレーターはちょー遅い。
開発用に安いAndroidを買えば、勉強がはかどります!
iPhoneと比較すると安いので買ったほうがいいと思います。

おすすめデバイス

勉強用に使うだけなので価格が高い最新デバイスは必要ないと思います。
最新のデバイスは一人前のAndroidプログラマーになったら購入を検討しましょう。

nexus5 16GBASUS Nexus7 ( 2013 ) TABLET

その他に探すなら↓から。
Android nexus5を勉強用に購入

【Androidプログラミング入門 #012】Shapeリソースで背景を設定する

はじめに

画面に背景を設定します。

背景の設定はいくつか方法があるのですが、
ここではShapeリソースを使った例を書きます。

他にも画像を使う方法などあります。

1. プロジェクト作成

f:id:fjswkun:20151028014055p:plain

f:id:fjswkun:20151028014103p:plain

f:id:fjswkun:20151028014114p:plain

f:id:fjswkun:20151028014124p:plain

2. Shapeリソースの作成

背景を定義したXMLをShapeリソースです。

ファイルの追加

f:id:fjswkun:20151028014136p:plain

f:id:fjswkun:20151028014144p:plain

XMLファイルの編集

追加したXMLファイルを下記のとおりに編集します。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:angle="270"
        android:endColor="#FF2A68"
        android:startColor="#FF5E3A" />
</shape>

3. 画面レイアウトにShapeリソースの適用

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:background="@drawable/background_shape"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_main" tools:context=".MainActivity">

    <TextView android:text="Hello World!" android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>

4. 実行

実行します。

f:id:fjswkun:20151028014204p:plain

参考情報

参考

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

開発用デバイス

Androidの勉強をはじめた人は知っているようにエミュレーターはちょー遅い。
開発用に安いAndroidを買えば、勉強がはかどります!
iPhoneと比較すると安いので買ったほうがいいと思います。

おすすめデバイス

勉強用に使うだけなので価格が高い最新デバイスは必要ないと思います。
最新のデバイスは一人前のAndroidプログラマーになったら購入を検討しましょう。

nexus5 16GBASUS Nexus7 ( 2013 ) TABLET

その他に探すなら↓から。
Android nexus5を勉強用に購入

【Androidプログラミング入門 #011】Viewを均等配置する

はじめに

画面横幅に対して、複数のViewを均等に配置したい。

3つのボタンを均等に配置してみます。

1. プロジェクト作成

f:id:fjswkun:20151027013640p:plain

f:id:fjswkun:20151027013649p:plain

f:id:fjswkun:20151027013658p:plain

f:id:fjswkun:20151027013709p:plain

2 画面レイアウトの作成

content_main.xmlを開き、下記編集します。

下記変更する
  • RelativeLayoutからLinearLayoutに変更
  • marginの削除
  • プロジェクト作成時に自動的に追加されるTextViewの削除

下記のとおりになります。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_main" tools:context=".MainActivity">

</LinearLayout>
ボタンを3つ作成

ボタンを作成します。

ポイントは下記2つ。 1. layout_widthを0dpにする 2. layout_weightを1にする

layout_weightで余白の配分を決められます。
ボタンが3つあり、それぞれlayout_weightに1が設定されているので、
それぞれのボタンに余白が1/3づつ配分されます。

ただ、それぞれのボタンのlayout_widthがばらばらだと、
余白を均等に配分してもサイズがばらばらになってしまうので、
layout_widthを0dpにしています。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_main" tools:context=".MainActivity">

    <Button
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:text="ボタン1"
        android:background="@color/colorPrimary"
        android:layout_weight="1"
        />
    <Button
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:text="ボタン2"
        android:background="@color/colorPrimaryDark"
        android:layout_weight="1"
        />
    <Button
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:text="ボタン3"
        android:background="@color/colorAccent"
        android:layout_weight="1"
        />
</LinearLayout>

3. 実行

実行します。

f:id:fjswkun:20151027014802p:plain

参考情報

参考

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

開発用デバイス

Androidの勉強をはじめた人は知っているようにエミュレーターはちょー遅い。
開発用に安いAndroidを買えば、勉強がはかどります!
iPhoneと比較すると安いので買ったほうがいいと思います。

おすすめデバイス

勉強用に使うだけなので価格が高い最新デバイスは必要ないと思います。
最新のデバイスは一人前のAndroidプログラマーになったら購入を検討しましょう。

nexus5 16GBASUS Nexus7 ( 2013 ) TABLET

その他に探すなら↓から。
Android nexus5を勉強用に購入

【Androidプログラミング入門 #010】画面の向きを固定する

はじめに

プロジェクト作成後設定しなければ、
端末を横にすれば、画面は横向きになり、
端末を縦にすれば、画面が縦向きになります。

画面の向きを固定するには?
AndroidManifest.xmlのActivityタグに設定を追記することで変更できます。
変更できる設定は複数あります。

  • unspicified システム自動設定(初期値)。ユーザーの画面の向けた方向に自動回転。
  • landscape 横向き固定
  • portrait 縦向き固定
  • behind 親のアクティビティーに依存

その他にもuser、sensor、no sensorなどがあります。
下記では縦向きに固定する例を書きます。

画面の向きを固定する

画面を縦向きで固定します。

1. AndroidManifest.xmlを開きます
2. 画面の向きを固定するActivityタグ内に設定を追加します

activityタグ内に
android:screenOrientation="portrait"
追記します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.swift_studying.sampleshowimage" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar"
            android:screenOrientation="portrait" >
            
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

参考情報

参考

横画面に固定する、縦画面に固定する(表示モードの固定) - [レイアウト/Androidアプリ] ぺんたん info

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

開発用デバイス

Androidの勉強をはじめた人は知っているようにエミュレーターはちょー遅い。
開発用に安いAndroidを買えば、勉強がはかどります!
iPhoneと比較すると安いので買ったほうがいいと思います。

おすすめデバイス

勉強用に使うだけなので価格が高い最新デバイスは必要ないと思います。
最新のデバイスは一人前のAndroidプログラマーになったら購入を検討しましょう。

nexus5 16GBASUS Nexus7 ( 2013 ) TABLET

その他に探すなら↓から。
Android nexus5を勉強用に購入

【Androidプログラミング入門 #009】インターネット上からJSONデータを取得する

はじめに

インターネット上からJSONデータを取得します。
これができるようになれば、JSONを取得して、
ListViewに表示する簡単なアプリをつくれそう。

今回はインターネット上からJSONデータを取得し、
JSONデータの一部をテキストビューに表示します。

1. プロジェクト作成

f:id:fjswkun:20151024225545p:plain

f:id:fjswkun:20151024225607p:plain

f:id:fjswkun:20151024225618p:plain

f:id:fjswkun:20151024225630p:plain

2. インターネット上からJSONデータを取得するクラスの作成

インターネット上からJSONデータを取得するときには、
AsyncTaskLoaderクラスを継承したクラスを作成しているようだ。
これをMainActivityから呼び出しています。

JsonLoaderという名前でクラスを作成します。

package com.swift_studying.samplegetjson;

import android.content.AsyncTaskLoader;

import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * Created by com.swift_studying. on 15/10/24.
 */
public class JsonLoader extends AsyncTaskLoader<JSONObject> {
    private String urlText;

    public JsonLoader(Context context, String urlText){
        super(context);
        this.urlText = urlText;
    }

    @Override
    public JSONObject loadInBackground(){
        HttpURLConnection connection = null;

        try{
            URL url = new URL(urlText);
            connection = (HttpURLConnection)url.openConnection();
            connection.setRequestMethod("GET");
            connection.connect();
        }
        catch (MalformedURLException exception){
            // 処理なし
        }
        catch (IOException exception){
            // 処理なし
        }

        try{
            BufferedInputStream inputStream = new BufferedInputStream(connection.getInputStream());
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int length;
            while ((length = inputStream.read(buffer)) != -1){
                if (length > 0){
                    outputStream.write(buffer, 0, length);
                }
            }

            JSONObject json = new JSONObject(new String(outputStream.toByteArray()));
            return json;
        }
        catch (IOException exception){
            // 処理なし
        }
        catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }
}

3. JSONの取得を実行する処理の作成

「2. インターネット上からJSONデータを取得するクラスの作成」で
作成したクラスを実行する処理を書きます。

取得するJSONは↓を使わせていただいた。
アニメ番組表 API | アニメマップ

では、MainActivity.javaを開き、下記のように編集します。

package com.swift_studying.samplegetjson;

import android.app.LoaderManager;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

import org.json.JSONObject;
import org.json.JSONException;
import android.content.Loader;
import android.util.Log;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<JSONObject> {
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        // TextViewを取得
        textView = (TextView)findViewById(R.id.textView);

        // JSONの取得
        getLoaderManager().restartLoader(1, null, this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public Loader<JSONObject> onCreateLoader(int id, Bundle args) {
        String urlText = "http://animemap.net/api/table/tokyo.json";
        JsonLoader jsonLoader = new JsonLoader(this, urlText);
        jsonLoader.forceLoad();
        return  jsonLoader;
    }

    @Override
    public void onLoadFinished(Loader<JSONObject> loader, JSONObject data) {
        if (data != null) {

            try {
                JSONObject jsonObject = data.getJSONObject("request");
                textView.setText(jsonObject.getString("url"));
            } catch (JSONException e) {
                Log.d("onLoadFinished","JSONのパースに失敗しました。 JSONException=" + e);
            }
        }else{
            Log.d("onLoadFinished", "onLoadFinished error!");
        }
    }

    @Override
    public void onLoaderReset(Loader<JSONObject> loader) {
        // 処理なし
    }
}

4. 実行

実行します。

f:id:fjswkun:20151024231143p:plain

JSONを取得すると表示されている文字列が変わります。

f:id:fjswkun:20151024231155p:plain

参考情報

参考

http://qiita.com/ken-chang/items/815ff267c18ce
AsyncTaskLoaderでJsonをパースする - 事務屋さんの備忘録
ちくわのあなから花が咲く。: android:JSONを使う(Twitter-APIの検索結果をパースする)

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

開発用デバイス

Androidの勉強をはじめた人は知っているようにエミュレーターはちょー遅い。
開発用に安いAndroidを買えば、勉強がはかどります!
iPhoneと比較すると安いので買ったほうがいいと思います。

おすすめデバイス

勉強用に使うだけなので価格が高い最新デバイスは必要ないと思います。
最新のデバイスは一人前のAndroidプログラマーになったら購入を検討しましょう。

nexus5 16GBASUS Nexus7 ( 2013 ) TABLET

その他に探すなら↓から。
Android nexus5を勉強用に購入