|ハイブリッドOS|File System|ARM|Android|Java|制御システム|オープンシステム

 

Android

 
フォーム
 
スワイプで画面送りを行う。
2014-03-23
スワイプで画面送りを行うにはViewPagerを使用します。
■res/layout/main_actvity.xml
レイアウトXMLにViewPagerを配置します。
<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
</RelativeLayout>
 
■src/info/paveway/sample/viewpager1/MainActivity.java
ViewPagerに表示するPageAdapterを継承したクラスを定義します。
定義したクラスでは4つの抽象メソッドgetCount, instantiationItem, destroyItem, isViewFromObjectを実装します。
getCountメソッドではページ数を返却します。例では5ページとしています。
instantiateItemメソッドでは表示するページを生成し、内容を設定します。
destroyItemメソッドはページの破棄を行います。
isViewFromObjectメソッドはページのViewの判定を行います。
定義したPagerAdapterクラスはsetAdapterメソッドでViewPagerに設定します。
 
package com.example.sample.viewpager1;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
        ViewPager viewPager = (ViewPager)findViewById(R.id.viewPager);
        viewPager.setAdapter(new PagerAdapterEx());
    }
    private class PagerAdapterEx extends PagerAdapter {
        @Override
        public int getCount() {
            return 5;
        }
        @Override
        public Object instantiateItem(View container, int position) {
            TextView textView = new TextView(MainActivity.this);
            textView.setText("画面" + String.valueOf(position));
            ((ViewPager)container).addView(textView);
            return textView;
        }
        @Override
        public void destroyItem(View container, int position, Object view) {
            ((ViewPager)container).removeView((View)view);
        }
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return (view == ((View)object));
        }
    }
}
 
バージョンコード・バージョン名を取得する。
2014-02-26
バージョンコード・バージョン名を取得する。
 
String versionCode;
String versionName;
PackageManager packageManager = getPackageManager(), PackageManager.GET_ACTIVITIES);
try {
    PackageInfo packageInfo =
            packageManager.getPackageInfo(this.getPackageName(), PackageManager.GET_ACTIVITIES);
    versionCode = packageInfo.versionCode;
    versionName = packageInfo.versionName;
} catch (NameNotFoundException e) {
    mLogger.e(e);
    versionName = VERSION_NAME_DEFAULT;
}
 
タブレイアウトを使用する。
2013-12-29
タブレイアウトを使用するにはTabActivity, TabHost/TabWidgetを利用します。
ただしTabActivityはAPI Level13で非推奨になったため、今後はActionBarを利用した方法が望ましいと思われます。
 
今回はタブを3つ作成します。
まずタブに表示するレイアウトXMLファイルとActivityクラスを用意します。
レイアウトXMLはtab1_activity.xml, tab2_activity.xml, tab3_activity.xml、ActivityクラスはTab1Activity.java, Tab2Activity.java, Tab3Activity.javaとします。
下記サンプルはそれぞれtab1_activity.xml, Tab1Activity.javaのみ記載します。
 
■res/layout/tab1_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TAB1" />
</LinearLayout>
 
■src/info.paveway.sample.tab/Tab1Activity.java
package info.paveway.sample.tab;
import android.app.Activity;
import android.os.Bundle;
public class Tab1Activity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tab1_activity);
    }
}
 
次にタブに表示されるアイコンを用意します。
アイコンは下記サイト等を利用して作成してください。
Android Asset Studio
 
作成されたファイルは以下のように格納します。
(以下はTab1用のファイルのみ記載します)
 
■res/drawable/ic_tab_tab1.xml
<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/ic_tab_tab1_selected"
        android:state_selected="true"
        android:state_pressed="false" />
    <item
        android:drawable="@drawable/ic_tab_tab1_unselected" />
</selector>
  res/drawable-hdpi/ic_tab_tab1_selected.png
  res/drawable-hdpi/ic_tab_tab1_unselected.png
  res/drawable-ldpi/ic_tab_tab1_selected.png
  res/drawable-ldpi/ic_tab_tab1_unselected.png
  res/drawable-mdpi/ic_tab_tab1_selected.png
  res/drawable-mdpi/ic_tab_tab1_unselected.png
  res/drawable-xhdpi/ic_tab_tab1_selected.png
  res/drawable-xhdpi/ic_tab_tab1_unselected.png
 
次にメインとなるレイアウトXMLファイルmain_activity.xml、ActivityクラスMainActivity.javaを用意します。
 
main_activity.xmlは以下のようにします。
・ルート要素はTabHostとします。
・タブを含むWidgetのTabWidgetのIDをtabsにします。
・タブのコンテンツを含むウィジットのIDをtabcontentにします。
 
■res/layout/main_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<TabHost
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="5dp">
        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"/>
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:padding="5dp"/>
    </LinearLayout>
</TabHost>
 
MainActivityクラスはTabActivityクラスを継承して作成します。
 
■src/info.paveway.sample.tab/MainActivity.java
package info.paveway.sample.tab;
import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.TabHost;
public class MainActivity extends TabActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
        Resources res = getResources();
        TabHost tabHost = getTabHost();
        TabHost.TabSpec spec;
        Intent intent;
        intent = new Intent().setClass(this, Tab1Activity.class);
        spec =
                tabHost.newTabSpec("Tab1")
                .setIndicator("Tab1", res.getDrawable(R.drawable.ic_tab_tab1))
                .setContent(intent);
        tabHost.addTab(spec);
        intent = new Intent().setClass(this, Tab2Activity.class);
        spec =
                tabHost.newTabSpec("Tab2")
                .setIndicator("Tab2" , res.getDrawable(R.drawable.ic_tab_tab2))
                .setContent(intent);
        tabHost.addTab(spec);
        intent = new Intent().setClass(this, Tab3Activity.class);
        spec =
                tabHost.newTabSpec("Tab3")
                .setIndicator("Tab3", res.getDrawable(R.drawable.ic_tab_tab3))
                .setContent(intent);
        tabHost.addTab(spec);
        tabHost.setCurrentTab(0);
    }
}
 
Intentでオブジェクトを渡す。
2013-12-20
Intentでオブジェクトを渡す方法です。
 
1.受け渡しに使用するオブジェクトはSerializableインターフェースをimplementsします。
2.渡す側のActivityではオブジェクトをIntent#putExtra()で設定します。
3.受取る側のActivityではオブジェクトをIntent#getSerializableExtra()で取得します。
 
■オブジェクト
public class Item implements Serializable {
    private static final long serialVersionUID = 1L;
    private int mId;
    private String mName;
    public void setId(int id) {
        mId = id;
    }
    public int getId() {
        return mId;
    }
    public void setName(String name) {
        mName = name;
    }
    public String getName() {
        return mName;
    }
}
 
■渡す側のActivity
Item item = new Item();
item.setId(1);
item.setName("name");
Intent intent = new Intent(MainAcivity.this, SubActivity.class);
intent.putExtra("item", item);
startActivity(intent);
 
■受取る側のActivity
Item item = (Item)getIntent().getSerializableExtra("item");
int id = item.getId();
String name = item.getName();
 
リストビューをカスタマイズする。
2013-12-13
リストビューをカスタマイズするには以下のようにしまs。
1.リストビューの行に設定するレイアウトcustom_row.xmlを用意します。
サンプルではCheckBox, TextView, Buttonを表示します。
 
2.行のCheckBox, TextViewのデータを保持するクラスCustomDataを用意します。
 
3.ArrayAdapterクラスを継承したCustomArrayAdapterクラスを用意し、getViewメソッドを実装します。
 
■サンプルソース
○res/layout/activity_main.xml
<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    <ListView
        android:id="@+id/customListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>
</RelativeLayout>
○res/layout/custom_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/textView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1" />
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="位置" />
</LinearLayout>

○src/info.paveway.sample.customlistview/MainActivity.java
package info.paveway.sample.customlistview;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
/**
 * カスタムリストビューサンプル
 *
 */
public class MainActivity extends Activity {
    /**
     * 生成した時に呼び出される。
     *
     * @param savedInstanceState 保存されたインスタンスの状態
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // スーパークラスのメソッドを呼び出す。
        super.onCreate(savedInstanceState);
        // レイアウトを設定する。
        setContentView(R.layout.activity_main);
        // 各カスタムデータを生成する。
        CustomData customData1 = new CustomData();
        customData1.setCheck(true);
        customData1.setText("テキスト1");
        CustomData customData2 = new CustomData();
        customData2.setCheck(false);
        customData2.setText("テキスト2");
        CustomData customData3 = new CustomData();
        customData3.setCheck(true);
        customData3.setText("テキスト3");
        // カスタムデータリストを生成し、カスタムデータを設定する。
        List<CustomData> customDataList = new ArrayList<CustomData>();
        customDataList.add(customData1);
        customDataList.add(customData2);
        customDataList.add(customData3);
        // アダプターを生成する。
        CustomArrayAdapter adapter = new CustomArrayAdapter(this, 0, customDataList);
        // リストビューにアダプターを設定する。
        ((ListView)findViewById(R.id.customListView)).setAdapter(adapter);
    }
    /**
     * カスタムデータクラス
     * リストビューの各リストのデータを保持する。
     *
     */
    private class CustomData {
        /** チェック */
        private boolean mCheck;
        /** テキスト */
        private String mText;
        /**
         * チェックを設定する。
         *
         * @param check チェック
         */
        public void setCheck(boolean check) {
            mCheck = check;
        }
        /**
         * チェックを返却する。
         *
         * @return チェック
         */
        public boolean getCheck() {
            return mCheck;
        }
        /**
         * テキストを設定する。
         *
         * @param text テキスト
         */
        public void setText(String text) {
            mText = text;
        }
        /**
         * テキストを返却する。
         *
         * @return テキスト
         */
        public String getText() {
            return mText;
        }
    }
    /**
     * カスタムアレーアダプタークラス
     *
     */
    private class CustomArrayAdapter extends ArrayAdapter<CustomData> {
        /** レイアウトインフレーター */
        private LayoutInflater mLayoutInflater;
        /**
         * コンストラクタ
         *
         * @param context コンテキスト
         * @param resource リソース
         * @param objects カスタムデータリスト
         */
        public CustomArrayAdapter(Context context, int resource, List<CustomData> objects) {
            // スーパークラスのコンストラクタを呼び出す。
            super(context, resource, objects);
            // レイアウトインフレーターを設定する。
            mLayoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
        /**
         * ビューを設定する。
         *
         * @param position 位置
         * @param convertView 対象のビュー
         * @param parent 親のビュー
         * @return 設定した対象のビュー
         */
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // 対象のビューが未設定の場合
            if (null == convertView) {
                // 対象のビューを取得する。
                convertView = mLayoutInflater.inflate(R.layout.custom_row, null);
            }
            // カスタムデータを取得する。
            CustomData customData = (CustomData)getItem(position);
            // チェックボックスを設定する。
            CheckBox checkBox = (CheckBox)convertView.findViewById(R.id.checkBox);
            checkBox.setChecked(customData.getCheck());
            // テキストビューを設定する。
            TextView textView = (TextView)convertView.findViewById(R.id.textView);
            textView.setText(customData.getText());
            // ボタンを設定する。
            Button button = (Button)convertView.findViewById(R.id.button);
            button.setOnClickListener(new ButtonOnClickListener(position));
            return convertView;
        }
        /**
         * ボタンクリックリスナークラス
         *
         */
        private class ButtonOnClickListener implements OnClickListener {
            /** 位置 */
            private int mPosition;
            /**
             * コンストラクタ
             *
             * @param position 位置
             */
            public ButtonOnClickListener(int position) {
                mPosition = position;
            }
            /**
             * ボタンがクリックされた時に呼び出される。
             *
             * @param v クリックされたボタン
             */
            @Override
            public void onClick(View v) {
                // 位置を表示する。
                Toast.makeText(MainActivity.this, "位置=[" + String.valueOf(mPosition) + "]", Toast.LENGTH_SHORT).show();
            }
        }
    }
}