トップ «前の日記(2011/06/24(Fri)) 最新 次の日記(2011/07/05(Tue))»
【ソース+水=麦茶色の何か】

半期 四半期 全カテゴリ

今日の一言


2011/06/25(Sat) Firefox5.0の違いが分からん! [長年日記] 10:00現在 30℃

_ [GALAXY S][Android][Windows][Linux][Ubuntu][FC][Debian]Androidでlayout_widthを全体の割合(%)で設定する

参考:

http://www.atmarkit.co.jp/fsmart/articles/android05/android05_2.html
http://y-anz-m.blogspot.com/2010/09/androidlayoutweight.html
http://wikiwiki.jp/android/?UI%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8%2FLinearLayout.LayoutParams

この場合、android:layout_widthではなく、android:layout_weightを使ってしていすればいい。

android:layout_weightは、配置する際のオブジェクトの占める割合を、重み付けにより指定するもの。

なので、android:layout_weightが1のオブジェクトAと、android:layout_weightが3のオブジェクトBを並べて配置した場合、画面に占める割合は、

A:B = 0.25:075

となる。なお、未設定のオブジェクトは0として扱われる。

具体例として、2つのボタンをそれぞれ50%の割合で配置したい場合は、xmlレイアウトに次のように書く。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/TestWeight"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:orientation="horizontal">
       <Button android:id="@+id/Button1"
               android:layout_width="0dip"
               android:layout_weight="1"
               android:layout_height="wrap_content"
               android:text="left"/>
       <Button android:id="@+id/Button2"
               android:layout_width="0dip"
               android:layout_weight="1"
               android:layout_height="wrap_content"
               android:text="right"/>
</LinearLayout>

_ [GALAXY S][Android][Windows][Linux][Ubuntu][FC][Debian]Androidでボタンをクリックした際に呼ばれる関数(ボタンハンドラー)をxmlファイルから設定する(SDK1.6以降)

参考:

http://www.taosoftware.co.jp/blog/2009/10/_androidonclick_layoutsdk16.html

匿名クラス等を使ってボタンごとに書いていくのもいいのだが、うまく書かないと、ソースがごちゃごちゃしてしまう。

そこで、xmlレイアウトでそれぞれのボタンごとに呼び出される関数の名前を指定しておき、ソースにその実体を書くという方法を説明する。

なお、この方法はAndroid SDK1.6以降で導入された模様。

具体例を以下に示す。まずxmlファイルに、

<Button android:text="@+id/button1"
       android:id="@+id/button1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:onClick="button1_click_handler"></Button>

と書く。ここで重要なのは、最後の行の、「android:onClick」に「"button1_click_handler"」というハンドラーを指定している部分。

続いて、ソースファイルを開き、アクティビティのクラス内に先ほど指定して関数(button1_click_handler)の実体を記述する。

public class hogehoge extends Activity{
    ・
    ・
    public void button1_click_handler(View view){
        Log.v(TAG,"Button1 clicked");
    }
}

これで、button1をクリックすると「button1_click_handler」が呼ばれるようになった。

なお、ログはデバッグ画面やlogcatで確認できる。

_ [GALAXY S][Android][Windows][Linux][Ubuntu][FC][Debian]AndroidでEditText(TextView)のカーソル位置を取得する

参考

http://developer.android.com/reference/android/widget/TextView.html
http://developer.android.com/reference/android/widget/EditText.html

カーソル位置は、EditTextの関数である

getSelectionStart()

もしくは

getSelectionEnd()

を使うことで取得できる。それぞれ、文字列の選択されている位置の先頭および末尾の位置をintで返す関数。カーソルが無い場合は-1が返ってくる。

なお正確には、これらはEditTextではなく継承元のTextViewで定義されている関数なので、詳細を調べたい場合には注意。

_ [GALAXY S][Android][Windows][Linux][Ubuntu][FC][Debian]Androidで自作アプリ起動時に自動的にソフトキーボードが立ち上がるのを防ぐ

参考:

http://y-anz-m.blogspot.com/2010/05/android_17.html

Activityの起動時に、フォーカスがEditText等の編集可能なオブジェクトに当たっていると、自動でソフトキーボード(softinput)が起動することがある。

※この辺りのデフォルトの動作についてはあまり規定が無いようで、同じアプリでも機器によってはソフトウェアキーボードが起動しないこともある。経験上、AVDでは立ち上がらないことが多い。

これを防ぐためには、以下のようにソフトキーボードのモードを設定する。

import android.view.WindowManager;
   ・
   ・
   @Override
   public void onCreate(Bundle savedInstanceState)
   {
       super.onCreate(savedInstanceState);
       this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
       setContentView(R.layout.main);
   }

setSoftInputModeのパラメータについては、こちら(http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html)を参照のこと。

なお、「SOFT_INPUT_STATE_ALWAYS_HIDDEN」を指定した場合でも、テキストボックスをタップすることでソフトキーボードを起動できる。

_ [GALAXY S][Android][Windows][Linux][Ubuntu][FC][Debian]Androidで静的なオプションメニューを作成する

参考:

http://android.roof-balcony.com/activity/optionmenu/
http://www.adakoda.com/android/000085.html

onCreateOptionsMenu()を実装すればいい。なお、この関数はActivity生成時に一度だけ呼び出されるものなので、動的なオプションメニューを設定したい場合には使えない。

具体的を以下に示す。

   public static final int MENU_1 = Menu.FIRST+1;
   public static final int MENU_2 = Menu.FIRST+2;
   public static final int MENU_3 = Menu.FIRST+3;
   public static final int MENU_4 = Menu.FIRST+4;

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       MenuItem menu_1 = menu.add(Menu.NONE, MENU_1, Menu.NONE, "menu1");
       MenuItem menu_2 = menu.add(Menu.NONE, MENU_2, Menu.NONE, "menu2");
       MenuItem menu_3 = menu.add(Menu.NONE, MENU_3, Menu.NONE, "menu3");
       MenuItem menu_4 = menu.add(Menu.NONE, MENU_4, Menu.NONE, "menu4");
       return super.onCreateOptionsMenu(menu);
   }

   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
       switch (item.getItemId()) {
       default:
           ret = super.onOptionsItemSelected(item);
           break;
       case MENU_1:
           break;
       case MENU_2:
           break;
       case MENU_3:
           break;
       case MENU_4:
           break;
       }
       return ret;
   }

_ [GALAXY S][Android][Windows][Linux][Ubuntu][FC][Debian]Androidでオプションメニューにアイコンを設定する

参考:

http://www.taosoftware.co.jp/blog/2008/11/android_5.html
http://ichitcltk.hustle.ne.jp/gudon/modules/pico_rd/index.php?content_id=55

MenuItemの関数である「setIcon()」を使えばいい。

具体的には以下のような記述を行う。

MenuItem menu_cancel = menu.add(Menu.NONE, Menu.FIRST+1, Menu.NONE, "Cancel");
menu_cancel.setIcon(android.R.drawable.ic_menu_close_clear_cancel);

menu.addについての説明は省略。

ここで、アイコンとして「android.R.drawable.ic_menu_close_clear_cancel」を設定しているが、これは元々Androidが持っているシステムアイコンである。

Android 1.5ではあるが、こちら(http://kapsencode.com/android_drawable/ )のサイトで全アイコンを図付きで紹介してくれているので参考にされたし。

また、自作アイコンを使いたい場合は「./res/」内の3つのdrawableディレクトリにそれぞれ使用したいアイコンの画像を置き、「R.drawable.ファイル名(拡張子無し)」の書式で記述すればいい。

なお、それぞれのディレクトリに置くアイコンのサイズは、ldpiが36x36ピクセル、mdpiが48x48ピクセル、hdpiが72x72ピクセルである。

_ [GALAXY S][Android][Windows][Linux][Ubuntu][FC][Debian]Androidでクリップボードを使用する

参考:

http://d.hatena.ne.jp/LuckOfWise/20090819/1250691018

まず、クリップボードマネージャを宣言する。

ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);

そしてクリップボードへ値()をコピーしたい場合は以下のように書く。

cm.setText("この文字列をコピーします");

また、クリップボードの値を取得したい場合は、

String str = cm.getText();

とすればいい。

_ [GALAXY S][Android][Windows][Linux][Ubuntu][FC][Debian]Androidでタイトルバーを非表示にする

参考:

http://www.adakoda.com/android/000155.html

「Activity.setContentView()」よりも前に「Activity.requestWindowFeature(Window.FEATURE_NO_TITLE)」を呼ぶことで、タイトルバーを非表示に設定できる。

import android.view.Window;
  ・
  ・
   @Override
   public void onCreate(Bundle savedInstanceState)
   {
       super.onCreate(savedInstanceState);
       requestWindowFeature(Window.FEATURE_NO_TITLE);
       setContentView(R.layout.main);
   }

_ [GALAXY S][Android][Windows][Linux][Ubuntu][FC][Debian]Androidで画面の向きを固定する(回転させない)

参考:

http://se-suganuma.blogspot.com/2010/02/android_10.html
http://wikiwiki.jp/android/?%B2%E8%CC%CC%A4%CE%B8%FE%A4%AD%28ScreenOrientation%29

静的に設定したい場合は、AndroidManifest.xml内のActivityにandroid:screenOrientationの設定を加えればいい。

<activity android:name="hogehoge"
 android:label="@string/app_name"
 android:screenOrientation="portrait"/>

上記の例では「portrait」(縦固定)を指定しているが、他にも「landscape」(横固定)や、unspecified(システムに従う)等がある。

詳細についてはこちら(http://wikiwiki.jp/android/?%B2%E8%CC%CC%A4%CE%B8%FE%A4%AD%28ScreenOrientation%29)を参照されたし。

また、プログラム内で動的に向きを指定したい場合は、以下のようにする。

   @Override
   public void onCreate(Bundle savedInstanceState)
   {
       super.onCreate(savedInstanceState);
       this.setRequestedOrientation((ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
       setContentView(R.layout.main);
   }

setRequestedOrientation()で指定できるパラメータについてはこちら(http://developer.android.com/reference/android/content/pm/ActivityInfo.html#screenOrientation)を参照のこと。

_ [GALAXY S][Android][Windows][Linux][Ubuntu][FC][Debian]AndroidでViewFlipperを使ってビューの切替えを行う

参考:

http://techbooster.jpn.org/andriod/application/1816/
http://d.hatena.ne.jp/Kazzz/20100420/p1

xmlレイアウトにViewFlipperを設定

layout/main.xml にViewFlipperを追加する。例えば、page1.xmlとpage2.xmlを切り替えたい場合は以下のように記述する

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/LinearLayout01"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   xmlns:android="http://schemas.android.com/apk/res/android">
   <ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/main"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent">
   <include android:id="@+id/secondlayout" layout="@layout/page1" />
   <include android:id="@+id/firstlayout" layout="@layout/page2" />
   </ViewFlipper>
</LinearLayout>

なお、page1.xmlとpage2.xmlは、通常のレイアウトxmlと同様に設定すればいい。

プログラムからViewFlipperを操作

基本的な操作方法は以下の通り。

まず、ビューフリッパーを宣言する。

ViewFlipper viewflipper = (ViewFlipper) findViewById(R.id.main);

そして、ビューをひとつ戻したい場合には以下のようにする。

viewflipper.showPrevious();

また、、ビューをひとつ進めたい場合には以下のようにする。

viewFlipper.showNext();

その他、自動でスライドショーを行うようにしたり、切り替え時のアニメーションを設定したりと、簡単な記述でいろいろな機能が実現できる。

そのあたりについてはこちら(http://techbooster.jpn.org/andriod/ui/1916/)が詳しい。