Home

ミライニトドケ

[Android] Backボタンが押されたときの処理

Androidの戻るボタンが押されると、既定では表示中のアクティビティが閉じられます。
しかし、アプリによってはボタンが押されたタイミングで何かしらの処理を行ったり、無効にしたいこともあるかと思います。

Backボタン押下時に任意処理を実装するための大まかな流れは次のとおりです。

  1. Activity#onKeyDown() をオーバーライド
  2. Backボタン押下時の処理を実装

 

Continue reading

[Java] 小数の切り捨て、切り上げ、四捨五入

小数点以下の任意の桁での四捨五入には、BigDecimalクラスの setScale() を使うのが簡単です。
 

使用方法

まず、BigDecimalオブジェクトを生成します。
今回は変換対象値として「1.2938」を使います。

    double val = 1.2938;
    BigDecimal bigDecimal = new BigDecimal(String.valueOf(val));

 

生成されたオブジェクトの setScale() で任意の四捨五入処理を実行します。
第1引数に処理対象小数桁、第2引数に処理モードを指定します。

第1引数に指定する値は、0が小数第1位、1が小数第2位を表します。以降も同様で指定数値が「指定数値+1」の小数桁を表します。

第2引数の処理モードにはRoundingMode列挙型定数のいずれかの値を指定します。
定数値およびその意味は次のとおりです。

定数値 内容
CEILING 切り上げ(正の無限大に近づくように丸める)
DOWN 切り捨て(0に近づくように丸める)
FLOOR 切り捨て(負の無限大に近づくように丸める)
HALF_DOWN 五捨六入(もっとも近い数字に丸める)
HALF_EVEN 偶数の場合はHALF_DOWN、奇数の場合はHALF_UPのように動作する
(もっとも近い数字に丸める)
HALF_UP 四捨五入(もっとも近い数字に丸める)
UNNECESSARY 何もしない(丸めが必要でないことを表す)
UP 切り上げ(0から離れるように丸める)

 

BigDecimal#setScale() の返り値はBigDecimalオブジェクトなので、doubleValue() でデータを取り出します。
こんな感じで使用します。

    //==== 小数第2位で切り上げ ====//
    double v1 = bigDecimal.setScale(1, RoundingMode.CEILING).doubleValue();

 

Continue reading

[Android] ImageViewのcontentDescription

xmlでレイアウトを組んでいると、ImageView部分に次のようなワーニングが表示されることがあります。

[Accessibility] Missing contentDescription attribute on image

 

これは、ImageViewの「android:contentDescription」という属性が設定されていないことが原因です。
 

Android4.0で追加された Explore-by-touch mode という機能があるのですが、この機能が有効になっていると画面上をタッチした際などに対象Viewの説明が読み上げられます。
この説明文を設定するための属性が contentDescription です。
 

<ImageView
    ...
    android:contentDescription="画像の説明">

「画像の説明」部分に説明文を記述します。
説明文はstringリソースから引っ張ってくることもできます。
 

年配者や目が不自由な方などへのアクセシビティ向上のためにも、出来るだけ設定していくように心掛けましょう。
 
 

[Java] ディレクトリ内のファイル一覧取得

任意ディレクトリ内にあるファイル一覧を取得するにはjava.io.Fileクラスの listFiles() および list() を使用します。

前者はFile型配列、後者はString型配列としてファイル一覧を返してきます。

void printFiles(String dirPath)
{
    File dir = new File(dirPath);
    File[] files = dir.listFiles();
    for(File file : files) {
        System.out.println(file);
    }
}

 
 

[Android] TextViewでクリック処理

クリック有効化

TextViewでクリックイベントを拾いたい場合は setClickable() でクリックを有効にしなければなりません。
引数にtrueを指定すると有効、falseを指定すると無効になります。

//==== クリックを有効にする ====//
TextView tvHoge = (TextView)findViewById(R.id.tv_Hoge);
tvHoge.setClickable(true);
tvHoge.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        Log.i("てすと", "クリックされた!")
    }
});

 

レイアウトファイルで設定

レイアウトファイルの「android:clickable」で設定することもできます。

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:text="hoge" />

 
 

[ビジネス] スマートフォンビジネスについて

今回はいつもとは趣向を変えて、スマートフォンビジネスについてお話したいと思います。
 

スマフォ市場の成長

本ブログではAndroidプログラムネタもいろいろと書いていますので、見て頂いてる人の中にはスマフォに関心を持っている方も沢山いるのではないでしょうか?
 

ITの世界では以前からスマフォ市場に注目が寄せられていましたが、ここ数年でのスマフォビジネス市場の成長率には目を見張るものがあります。

実際、街や電車の中で辺りを見回すとスマフォを持っている人が増えてきていることを実感できるかと思います。
 

Continue reading

[Android] Spinnerの基本的な使い方

Androidではコンボボックスに相当するコントロールとして「Spinner(スピナー)」というものが存在します。
使い方を簡単にまとめてみました。
 

レイアウトファイルによる実装

Spinnerを配置し、entries属性に配列要素を指定します。
ここで設定した配列要素がSpinnerのコンテンツとして表示されます。配列要素については事項で説明します。

main.xml
<?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" >
    
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:entries="@array/items" />

</LinearLayout>

 

/res/valuesにarrays.xmlというファイルを作成し、スピナーに設定する配列要素(アイテム項目)を定義します。
なお、わざわざ新しいファイルを作成しなくてもstrings.xmlの中に記述することも可能ですが、今回は別ファイルを使うことにしました。

arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="items">
        <item>item1</item>
        <item>item2</item>
        <item>item3</item>
        <item>item4</item>
        <item>item5</item>
        <item>item6</item>
        <item>item7</item>
        <item>item8</item>
        <item>item9</item>
    </string-array>
</resources>

 

Continue reading

[Android] レイアウトでViewを両端に配置する方法

レイアウトでViewを両端に配置する方法はいくつか存在しますが、ここで紹介する方法が一番シンプルで分かりやすい気がします。

方法はコードを見てもらえば一目瞭然ですが、配置する2つのViewの真ん中に「android:layout_weight」を”1″にしたViewを埋め込むだけです。
 

<?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" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp">
        
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="左" />

        <View 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1" />
        
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="右" />

    </LinearLayout>

</LinearLayout>

 

Continue reading

[Android] エミュレータと外部とのソケット通信

ソケット通信のテストを行う際にエミュレータと外部との間で通信できると何かと便利ですが、エミュレータはエミュレータ内部で閉じたネットワークを形成しておりデフォルトでは外部との通信ができない状態になっています。

外部との通信を行うには以下の手順を踏む必要があります。

  1. エミュレータ起動
  2. telnetでエミュレータに接続
  3. redirコマンドでポートフォワード

 

Continue reading

[Android] テキストへのリンク設定

TextViewに表示したURLにリンクを張るには次の2通りの方法があります。

  • レイアウトファイルでautolink属性を使う
  • プログラムでHTMLタグを埋め込む

 

レイアウトファイルでautolink属性を使う

TextViewタグにautolink属性を指定することでリンクを張ることができます。

<textview
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:autolink="web"
    android:text="http://google.co.jp" />

 
autolink属性ではURL以外のリンクを張ることもできます。
設定値およびリンク種別の対応は次の通りです。

設定値 リンク種別
web URL
email メールアドレス
phone 電話番号
map 住所
all 上記全て

 

Continue reading

Home

Search
Feeds
Meta
人気の記事

Return to page top