Android開発してて思った

Android開発をしていて思ったことを書いていきます

ActionBarについて

ActionBarはAndroid SDK3.0より追加された機能

itemタグに指定する属性
inアイテムのidを指定する
iconアイテムのアイコンに使用するリソースを指定する
titleアイテムに表示するタイトルを指定する
showAsActionアイテムの表示形式を指定する
showAsAction属性に設定する規定
ifRoomActionBarの領域に空きがある場合のみアイコンを表示する
alwaysアイコンが常に表示される
neverアイコンを表示しない
withTextタイトルテキストを付加する
withTextについては、単体で記述するのではなく、"|"区切りで他の規定値と合わせて記述する。 なお、「ifRoom|withText」と"|"の間にはスペースを入れないこと。 ApiDemos/res/menu/actions.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
	<item android:id="@+id/action_share"
		  android:icon="@android:drawable/ic_menu_share"
		  android:title="Share"
		  android:showAsAction="ifRoom|withText" />
	<item android:id="@+id/action_sort"
		  android:icon="@android:drawable/ic_menu_sort_by_size"
		  android:title="Sort"
		  android:showAsAction="ifRoom|withText">
		<menu>
			<item android:id="@+id/action_sort_size"
				  android:icon="@android:drawable/ic_menu_sort_by_size"
				  android:title="By size"
				  android:onClick="onSort" />
			<item android:id="@+id/action_sort_alpha"
				  android:icon="@android:drawable/ic_menu_sort_alphabetically"
				  android:title="Alphabetically"
				  android:onClick="onSort" />
		</menu>
	</item>
</menu>

前画面に戻るをつける

f:id:rikisha-blog:20140404201707p:plain

一旦、画面を移動してから戻りたいという場合、ActionBarに戻るボタンを設置するとよい。

ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);


そして戻るボタンを押したときのイベントはActivity#onOptionsItemSelected()で行う

@Override  
public boolean onOptionsItemSelected(MenuItem item) {  
      
    switch(item.getItemId()) {  
        case android.R.id.home:  
            finish();  
            return true;  
    }  
    return super.onOptionsItemSelected(item);
}

SubActivity.java

public class SubActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
		
    // アクションバーに前画面に戻る機能をつける
    ActionBar actionBar = getActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
  }

  @Override  
  public boolean onOptionsItemSelected(MenuItem item) {     
    switch(item.getItemId()) {  
      case android.R.id.home:  
        finish();  
        return true;  
      }  
      return super.onOptionsItemSelected(item);
  }

参考サイト
Y.A.M の 雑記帳: Android Up の振る舞いパターンを実装する

ActionBarに画像タブを表示させる

f:id:rikisha-blog:20140404155119p:plain
こんな感じに画像付タグボタンを作成するにはメニューレイアウトを変更します。
iPhoneのタブ切替みたいな機能がAndroidにもないのかなと探していたところ
発見しました。

まずはメニューレイアウトxmlタブにandroid:iconで画像を指定します。

/res/menu/main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/action_map"
        android:orderInCategory="100"
        android:icon="@android:drawable/ic_menu_mapmode"
        android:showAsAction="ifRoom"
        android:numericShortcut="1"
        android:title="@string/action_settings"/>

	<item
        android:id="@+id/action_list"
        android:orderInCategory="100"
        android:icon="@android:drawable/ic_menu_today"
        android:showAsAction="ifRoom"
        android:numericShortcut="2"
        android:title="@string/action_settings"/>
    
	<item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:icon="@android:drawable/ic_dialog_info"
        android:showAsAction="ifRoom"
        android:numericShortcut="3"
        android:title="test"/>
</menu>

タグボタンを押したときの処理は
Activity.onMenuItemSelected()が行います。
受け取ったidによって処理を切り替えます。

MainActivity.java

public class MainActivity extends Activity {
	
	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		int id = item.getItemId();
		
		// 押したアイテムのidで切り替える
		switch(id) {
			case R.id.action_map:
				Toast.makeText(this, "Map", Toast.LENGTH_SHORT).show();
				break;
			case R.id.action_list:
				Toast.makeText(this, "List", Toast.LENGTH_SHORT).show();
				break;
			case R.id.action_settings:
				Toast.makeText(this, "Setting", Toast.LENGTH_SHORT).show();
				break;
			default:
				break;
		}
		return true;
	}
}

ちなみにActionBarを下部に表示する場合は、
AndroidManifest.xmlタグに

android:uiOptions="splitActionBarWhenNarrow"

を追加する。

参考にしたサイト

Menu Resource | Android Developers

SplitActionBarの作成方法

Androidで画面の下部にiOSのタブボタンをつくるにはActionBarの一種であるSplitActionBarを使用します。
AndroidManifest.xmlに以下のオプションを追加してください。

android:uiOptions="splitActionBarWhenNarrow"

AndroidManifest.xml

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

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <activity
            android:name="com.example.MainActivity"
            android:label="@string/app_name"
            android:uiOptions="splitActionBarWhenNarrow" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

Android 4.0からのActionBar再入門 スマートフォン向けのアクションバーの使い方 | Tech Booster

VideoViewの使い方(インターネット上の動画を再生)

VideoViewを使えば簡単にAndroidで動画を再生することができます。

設置手順

レイアウトにVideoViewを設置します。
ここではidをvideoView1にします。

レイアウトを作成する

activity_main.xml

    <VideoView
        android:id="@+id/videoView1"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" />

ソースコードを記述する

レイアウトからfindViewById()を使ってVideoViewのインスタンスを取得します。
次にVideoView.setVideoURI()でインターネット上にある動画のURLを指定します。
VideoView.start()で動画を再生します。

MainActivity.java

package com.example.videoviewsample;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.VideoView;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// VideoViewをレイアウトから取得する
		VideoView videoView = (VideoView)findViewById(R.id.videoView1);
                // インターネット上の動画を指定する
                videoView.setVideoURI(Uri.parse("http://example.com/video.mp4"));
                // 再生を開始する
		videoView.start();
	}
}

アプリにインターネット接続権限を設定する

これを書いてなくてハマりました。インターネット上にある場合はアプリにインターネットアクセスの許可をする必要があります。
AndroidManifest.xml

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

注意点

動画を再生する上での注意点として動画のフォーマットがAndroidに対応しているのかチェックする必要があります。Androidの対応フォーマットは以下のサイトに書いてあります。
Supported Media Formats | Android Developers

参考にしたサイト

VideoView | Android Developers

Androidで画像を使わずにボタンデザインを変更する方法

http://www.abe3.net/2013/05/android-drawable-shape/Androidで画像を使わずにデザインをボタンをデザインする方法

を見て、載っていたソースコードを自分で入力して実行してみた。

うお!ボタンの外観がかわってる。 このすごいところは画像ファイルを使わずに外見を変更できているという点だ。 xmlファイルなので、ファイルが軽くなるのがよい。

そのソースコードをもとにいろいろといじってみた。 とりあえず色を変更してみた。

android:startColor="#ff0000" // 赤色 android:endColor="#0000ff" // 青色 これで実行した結果のボタンがこれ。

f:id:rikisha-blog:20140401191212p:plain

色が上から下へ変化しているのがわかる。

これをもう少しいじくればかなり見た目を変更することができそうだ。

Android shapeタグを使ってボタンの背景色をグラデーションにする方法 | Tech Booster

7.5.3 Drawable リソース - ソフトウェア技術ドキュメントを勝手に翻訳

Eclipse(ADT)でのエディタの文字コードを変更する

昨日Githubに登録したコードを確認していたら、画面で文字化けが発生していたので

なんでなのか調べてみたら、Eclipse文字コードがShift-JIS(MS932)になっていた。

 

当方、Macを使っているので自動的にUTF-8になっているのかなと思っていたけど、

Shift-JISのままだった。

 

Windows機では問題は発生しないだろうが、

そろそろ業界全体でUTF-8に統一して文字コード問題が発生しないように

していってほしいと願っているのは私だけではないはず!

 

まずはじめに [ADT] -> [環境設定] を選択する

f:id:rikisha-blog:20140330100436p:plain

 

次に ツリーから General(一般)-> Workspace (ワークスペース) を選択する 

Text file encodingという選択欄があるので Default(SJIS)からOtherを選択して

UTF-8を選び Applyボタンを押せば見事変更されます。

 

f:id:rikisha-blog:20140330100613p:plain