Browsing articles in "Android"

PopupMenuが消えるときに処理を行う

11月 5, 2011   //   by kkato   //   ユーザインターフェース  //  No Comments

Android 3.0(Honeycomb)からメニュー項目がポップアップ状に表示されるPopupMenuが追加されました。

そのPopupMenuがAndroid4.0(ICS)で拡張されています。

3.0からの違い

  • inflateメソッドが追加され、Menu Resourceからコンテンツを生成することが可能になった
  • メニューが破棄された(消えた)ことを受け取るリスナーが追加された

PopupMenuの基本的な使い方は「PopupMenuを使う」を参照してください。

それでは続きでICSで拡張された内容を説明します。

Read more >>

ActionProviderを使用してMenuItemの処理を共通化する

11月 4, 2011   //   by kei_i_t   //   Android, アプリケーション  //  No Comments

ActionBarに共有履歴を追加するではShareActionProviderについて解説しました。今回はShareActionProviderの基底クラスであるActionProviderクラスについて解説します。

ActionProviderクラスはAndroid4.0(以降ICS)から追加されたクラスで、複数画面でMenuItemに同じ処理をさせたい場合に便利です。

詳細は以下から。

Read more >>

カレンダーアプリを呼び起こす(Intent)

11月 3, 2011   //   by furusin   //   アプリケーション, マッシュアップ  //  No Comments

Android4.0(以降ICS)では、Intentで新たにカレンダーアプリを呼び出してスケジュールを追加することができるようになりました。

詳細はイカから。

Read more >>

ActionBarに共有履歴を追加する

10月 31, 2011   //   by kei_i_t   //   Android, アプリケーション  //  1 Comment

Android4.0(以降ICS)のActionBarには、共有ボタンで共有機能を使用したことのあるアプリのアイコンを、ActionBarのMenuItemに追加することができるようになりました。

詳細は以下から。

Read more >>

WiFi DirectでP2P通信を行う(2)

10月 31, 2011   //   by @mhidaka   //   デバイス  //  No Comments

WiFi DirectとはWiFi対応機器同士を直接接続するP2P通信方式です。
P2P通信の名前の通り、アクセスポイントを必要としないことから、手軽に無線LANを使って通信できるAndorid 4.0の注目の新機能です。
(無線LANでは以前から1対1通信を行うアドホックモードが存在していましたが、WiFi Directではさらに発展させた1対複数通信が可能です)

前回の「WiFi DirectでP2P通信を行う(1)」の続編です。ブロードキャストレシーバに関してはこちらを参照してください。
今回も前回同様、WiFiDirectDemoをサンプルにWiFi Directの接続・切断処理、接続処理中のキャンセルについて解説します。
WiFiDirectDemo http://developer.android.com/resources/samples/WiFiDirectDemo/index.html

注意:Android SDKのAPI ReferenceではWiFi Directを”Wi-Fi p2p”、WiFi Direct対応デバイスを”Peers”と別名で表記しています。記事中でも気をつけて触れていますが随時読み替えてください。
(まだ実機での動作確認ができていませんので記事の記載に誤りがあった場合、随時アップデートします!)

WiFi Directの接続/切断処理のポイントは以下の通りです。

WifiP2pManagerの大事なメソッド

メソッド名説明
ActivityクラスgetSystemService(Context.WIFI_P2P_SERVICE);WifiP2pManagerのインスタンス取得
WifiP2pManager.Channel initialize (Context srcContext, Looper srcLooper, WifiP2pManager.ChannelListener listener) 初期化を行う。第3引数は接続切断時のリスナー、nullでもよい。返り値のChannelは接続チャンネルを識別するために利用する
connect (WifiP2pManager.Channel c, WifiP2pConfig config, WifiP2pManager.ActionListener listener)
P2P接続の開始。接続情報は第2引数WifiP2pConfigに格納する
removeGroup (WifiP2pManager.Channel c, WifiP2pManager.ActionListener listener)
P2P接続の切断。切断したいChannelを指定する
cancelConnect (WifiP2pManager.Channel c, WifiP2pManager.ActionListener listener)
P2P接続処理中(ネゴシエーション中)のキャンセル。接続処理が完了した後はremoveGroupを使用すること。

また前回記事で紹介したWiFi Directの接続状態通知の仕組み(ブロードキャストレシーバの挙動、前回記事参照)について復習しておいたほうがよい内容をまとめています。あわせて確認すると理解が深まるでしょう。
意識的に接続しにいく場合以外では、WiFi Directでの接続状態や本体デバイスや相手のデバイス(Peers)情報は、intentで通知されます。独自のブロードキャストレシーバを用意することで、それらイベント(intent)について簡単に扱うことができます。

WifiP2pManagerで定義されているアクションと対応する処理

アクション名処理
WIFI_P2P_STATE_CHANGED_ACTIONWiFi Directの有効/無効状態が通知される。機能制限やユーザへの通知に利用
WIFI_P2P_PEERS_CHANGED_ACTIONWifiP2pManagerクラスのrequestPeersメソッドをつかってデバイス一覧WifiP2pDeviceListを取得。個々のデバイス情報はWifiP2pDevice
WIFI_P2P_CONNECTION_CHANGED_ACTIONWifiP2pManagerクラスのrequestConnectionInfoメソッドを使って接続状態WiFiP2pInfoを取得する
WIFI_P2P_THIS_DEVICE_CHANGED_ACTIONintentから自分自身のデバイス状態の変更通知WifiP2pDeviceを取り出して、接続状態にあわせた処理を行う

Reference:
http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html
http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pInfo.html
http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pDevice.html

WiFi Directの接続/切断処理のサンプルコードは続きから
Read more >>

WiFi DirectでP2P通信を行う(1)

10月 30, 2011   //   by @mhidaka   //   デバイス  //  No Comments

WiFi DirectとはWiFi対応機器同士を直接接続するP2P通信方式です。
P2P通信の名前の通り、アクセスポイントを必要としないことから、手軽に無線LANを使って通信できるAndorid 4.0の注目の新機能です。
(無線LANでは以前から1対1通信を行うアドホックモードが存在していましたが、WiFi Directではさらに発展させた1対複数通信が可能です)

Android SDK 4.0にはWiFi DirectのSampleが付属しています。

android-sdk-windows\samples\android-14\WiFiDirectDemo

WiFiDirectDemoは複雑ですが、WiFi Directを理解するにはとてもよい題材です。今回はこのSampleを例にWiFi Directについて解説します。
WiFiDirectDemo http://developer.android.com/resources/samples/WiFiDirectDemo/index.html

注意:Android SDKのAPI ReferenceではWiFi Directを”Wi-Fi p2p”、WiFi Direct対応デバイスを”Peers”(ピア)とP2Pで用いる名称で表記しています。記事中でも気をつけて触れていますが随時読み替えてください。
(まだ実機での動作確認ができていませんので記事の記載に誤りがあった場合、随時アップデートします!)

WiFi Direct機能はandroid.net.wifi.p2pパッケージとして新たに追加されました。
主なポイントは以下の通りです

WiFi Directを使うためには

クラス等説明
WiFi Direct用のBroadcastReceiverWiFi Directの状態変化はブロードキャストされるため、BroadcastReceiverで受け取ること
WifiP2pManagerWiFi Direct対応デバイス(P2Pデバイス)の情報、接続状態を管理するクラス
WifiP2pInfo接続状態が格納されている
WifiP2pDeviceデバイス情報が格納されている、接続先情報など。

今回は、ブロードキャストレシーバとWiFi Directに関わるintentのハンドリング方法について紹介します。
WiFi Directの接続方法や解除、キャンセルの仕方を(2)にて取り扱います。

では、さっそくブロードキャストレシーバの登録方法から確認してみましょう。
非常に長い記事になってしまっていますので、各センテンスの最後に大事なポイントをまとめています。
Reference:
http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html
http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pInfo.html
http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pDevice.html

Read more >>

Gelleryを使って画像を一覧表示する / Getting Started

10月 28, 2011   //   by kseto   //   Android, ユーザインターフェース  //  No Comments

Galleryを使うと画像データを簡単に一覧表示することができます。
多くの画像データを効率よく扱いたい場合、GalleryViewやGridViewは重宝します。

※Android 3.0以降ではGelleyは推奨されていませんので、プラットフォームに応じてご使用ください。

Galleryを使うには以下のような手順で設定を行います。

  • Adapterの作成
  • GalleryにAdapterを設定

それでは続きからGalleryの使い方を詳しく説明します。

Read more >>

テキストデータをリスト表示する(WP7)

10月 26, 2011   //   by UpDown-G   //   Android, WindowsPhone7  //  No Comments

モバイル端末開発では、テキストデータの一覧を表示したい時などに、よくリスト表示を使います。
本エントリでは、WP7でのリスト表示の行い方を紹介していきます。

リスト表示にはListBoxコントロールを使用します。
上図スクリーンショットのサンプルを使用して、ListBoxコントロールの使い方を紹介してきます。

それでは続きをどうぞ。
Read more >>

widget間に空間を作る(Spaceを使う)

10月 26, 2011   //   by furusin   //   ユーザインターフェース  //  No Comments

Android 4.0 IceCreamSandwich(以後ICS) では、新しくスペース(Space)が追加されました。

Android3.xまでは画面設計において、部品と部品(widget)の間にスペースを開けるには、パディング(padding)を用いたり、空の文字列を持ったテキストビューを用いたりしてきました。

ICS以降、スペースを利用することで、部品と部品の間にスペースを開ける事が非常に容易となりました。

「ここにちょっとだけスペースを入れたいんだけど・・・!」という、かゆいところに手が届くのがスペースです。

スペースを利用する上で重要になるクラスはSpaceクラスです。

リファレンスはこちら

それでは、実際に画面設計のXMLにSpaceを入れてみましょう。
Android3.xまで通り、次のように普通に画像を並べた場合、画像と画像の間にスペースは無く、連結されて表示されてします。

■res/main.xml

<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:orientation="vertical">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/tb" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/tb" />
</LinearLayout>

ここで表示させた2つの画像の間に、少しだけスペースを開けたい場合に、前述の通り、Android3.xまではパディング等を用いてきました。
ICS以降では、スペースを文字通り「置いて」、空間を作ることができます。

スペースを使うには、具体的には次のようにします。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:orientation="vertical">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/tb" />

    <Space android:layout_width="match_parent" 
        android:layout_height="25dip"/>
    
    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/tb" />
</LinearLayout>

上記ソースコードの13,14行目のように、Speceを入れると、次の図のように、画像と画像の間にスペースが空きます。

また、2つ目の画像を、少しだけ右にズラしたい時は、次のようにLinearLayout等を応用します。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/tb" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Space
            android:layout_width="25dip"
            android:layout_height="match_parent" />
        <ImageView
            android:id="@+id/imageView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/tb" />
    </LinearLayout>

</LinearLayout>

上記ソースコードの場合、次の図のように、2つ目の画像の左側に空白ができ、画像が少し右へズレます。

以上のように、XMLで簡単に画面レイアウトの微妙な調整ができます。

また、JavaコードでSpaceを利用するには、イカのようにします。
まずはXMLから。
res/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
</LinearLayout>

次に、Javaコードです。
■src/SpaceSampleActivity.java

package org.jpn.techbooster.sample.space;

import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Space;

public class SpaceSampleActivity extends Activity {
	private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT; 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        LinearLayout layout = (LinearLayout)findViewById(R.id.linearLayout1);
        
        ImageView imageView1 = new ImageView(this);
        imageView1.setImageResource(R.drawable.tb);
        layout.addView(imageView1, new LinearLayout.LayoutParams(WC, WC));
        
        Space sp = new Space(this);
        layout.addView(sp, new LinearLayout.LayoutParams(20, 20));

        ImageView imageView2 = new ImageView(this);
        imageView2.setImageResource(R.drawable.tb);
        layout.addView(imageView2, new LinearLayout.LayoutParams(WC, WC));
    }
}

上記コードでは、次の図のようになります。

上記コード24行目でSpaceのインスタンスを生成し、25行目でLinearLayoutへ追加しています。

非常に簡単に、UIへ空白を作ることができました。

トグルスイッチを利用して設定を変更する

10月 23, 2011   //   by UpDown-G   //   Android, ユーザインターフェース  //  No Comments

これまでAndroidでは、機能のON/OFFの切り替えを行う際には、ボタンやチェックボックス、ラジオボタンを利用していました。
Android 4.0 IceCreamSandwich(以後ICS) では、ここにさらに新しく、トグルスイッチ(Switch)が追加されました。

図1:トグルスイッチONとOFF

トグルスイッチを利用することで、これまで以上に簡単に、またユーザーにもわかりやすく、機能のON/OFFを切り替ることが可能です。

トルグスイッチを利用する上で重要になるクラスはSwitchクラスです。
Switchクラスの中で、今回紹介する主なメソッドは以下の通りです。

表:使用するメソッド

API概要
setSwitchTypeface()トグルスイッチ内に表示するテキストの書体を変更する
onCheckedChanged()トグルスイッチのOn/Offが切り替わる際に呼び出されるCallBack関数
setChecked()On/Offを切り替える

それでは以下で詳しく見ていきましょう。

Read more >>

ページ:«1234567...36»

技術書新刊 発売中

アンドロイドアカデミアには、CIやテスト、互換検証など実務に生きるノウハウをあつめています

技術書新刊 発売中

Android Next!はAndroid 7.0に対応したはじめての技術書です!


The Web Explorer 2はCSSの中央寄せやWebAudioなど未来を読み解く一冊です


Revised TypeScript in DefinitelylandはTypeScript 2.0(β)に対応した解説書です。インストールから型定義まで幅広くサポートしています


技術書をかこう!はエンジニアらしい執筆環境を構築、HowTo本です