[Java] SimpleDateFormat で警告

new SimpleDateFormat("yyyyMMddHHmmss");

new Date()で取得した日時をフォーマット指定で
文字列にした際、以下の警告が出た。

To get local formatting use getDateInstance(), getDateTimeInstance(), or getTimeInstance(), or use new SimpleDateFormat(String template, Locale locale) with for
example Locale.US for ASCII dates.



警告の解決方法は、ロケールを設定するとのこと。

new SimpleDateFormat("yyyyMMddHHmmss", Locale.JAPANESE);

これで、警告が消えました。
ちなみに、Locale.ENGLISH を指定しても大丈夫でした。

[Android] ウィジェットでボタンを押下(Click)処理

ウィジェットを作っててボタン押下時の処理をお試ししてみたのでメモ。
期待通りの動作をしたが、非推奨メソッドを使ってるので、あまりよくないかも・・・


■AppWidgetProvider を継承したクラス
onUpdate() に以下の実装をして、ボタン押下を処理させるサービスを起動する。

--------------------------------------------
Intent serviceIntent = new Intent();
serviceIntent.setClassName(context.getPackageName(), context.getPackageName() + ".サービスのクラス名");
serviceIntent.setAction("サービス起動の初期処理アクションを示す文字列(任意)");
context.startService(serviceIntent);
--------------------------------------------


■Service を継承したクラス
onStart() に以下の実装をする。
※ただし、onStart() は非推奨

--------------------------------------------
AppWidgetManager manager = AppWidgetManager.getInstance(this);
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.xxxxlayout);

if ("サービス起動の初期処理アクションを示す文字列(任意)".equals(intent.getAction())) {
// サービス起動時の初期処理

} else if ("ボタン押下時のアクション名称(任意の文字列)".equals(intent.getAction())) {
//ボタンが押下された場合の処理を記載する。
}

// 各ボタンにアクションを設定して、クリックイベントを拾えるようにする
Intent newintent;
PendingIntent pending;

newintent = new Intent();
newintent.setAction("ボタン押下時のアクション名称(任意の文字列)");
pending = PendingIntent.getService(this, 0, newintent, 0);
remoteViews.setOnClickPendingIntent(R.id.button1, pending);

// ウィジェットの更新
ComponentName widget = new ComponentName(this, AppWidgetProvider.class);
manager.updateAppWidget(widget, remoteViews);
--------------------------------------------


■AndroidManifest.xml
タグの中に以下のように、service を定義して、
でアクションを定義する。

--------------------------------------------
<service android:name=".サービスクラス名"
     android:exported="false">
  <intent-filter>
    <action android:name="XXX" />
  </intent-filter>
</service>
--------------------------------------------

※「XXX」にはアクションの名称(任意の文字列)を定義する



意外と簡単にできた。。。


[Android] ウィジェットのレイアウトでEditTextが使えない・・・

Androidのウィジェットを作って、
そこで文字列の入力がしたいなぁと思ったのですが、
ウィジェットのレイアウトでEditTextを使うことができなそう。


Developers の App Widgets 」より
=・=・=・=・=・=・=・=・=・=・=・=・=・=・=・
A RemoteViews object (and, consequently, an App Widget) can support the following layout classes:

FrameLayout
LinearLayout
RelativeLayout
GridLayout

And the following widget classes:

AnalogClock
Button
Chronometer
ImageButton
ImageView
ProgressBar
TextView
ViewFlipper
ListView
GridView
StackView
AdapterViewFlipper

Descendants of these classes are not supported.

RemoteViews also supports ViewStub, which is an invisible, zero-sized View you can use to lazily inflate layout resources at runtime.
=・=・=・=・=・=・=・=・=・=・=・=・=・=・=・

widgetで使えるビューは、意外と少ないのか。
サブクラスをサポートしてないということは、TextViewは使えるが、
継承したサブクラスのEditTextは使えないよということか・・・


[Android] ノーティフィケーションバー(ステータスバー)の高さを取得する

ノーティフィケーションバー(ステータスバー)は画面上部でメッセージやアイコンを表示する部分である。

今回は、このノーティフィケーションバーの高さを取得したく調べてみた。
以下で、いろいろな方法が出てました。
http://stackoverflow.com/questions/3407256/height-of-status-bar-in-android


int height;
Window window = getWindow();
Rect rect = new Rect();
window.getDecorView().getWindowVisibleDisplayFrame(rect);
height = rect.top;

画面上で座標計算などする際に、ノーティフィケーションバーの高さを除いて算出するケースなど利用することは多そう。


[JavaScript]ボタンを押下して背景色を変更

JavaScriptを使用して背景色を切り替えるサンプルを紹介。
今回は背景色なので、document.bgColor にカラーを設定。
もしテキストの色を同様に変更したい場合、document.fgColor を
指定してあげればよい。

■サンプルコード

<html>
<head>
<title>背景色切り替え!!</title>
<script type="text/javascript">
<!--
// 背景色赤
function bgColChangeRed() {
document.bgColor = "#FF0000";
}

// 背景色青
function bgColChangeBlue() {
document.bgColor = "#0000FF";
}

// 背景色緑
function bgColChangeGreen() {
document.bgColor = "#008800";
}
// -->
</script>
</head>
<body>
<input type="button" value="背景色赤" onClick="bgColChangeRed()">
<input type="button" value="背景色青" onClick="bgColChangeBlue()">
<input type="button" value="背景色緑" onClick="bgColChangeGreen()">
</body>
</html>

JavaScript実行例(20130712)


[Android] 横画面用レイアウト(xml)

デフォルトだとXMLでレイアウトを作成した場合、縦画面でも横画面でも
共通したレイアウトを使用するようになっている。

今回、ちょっとレイアウトを縦か横で異なるようにしたいと
思ったのだが単純なことを忘れていた。

結論から言うと、
XMLのリソースを以下のように分けるだけでよかった。
#ランドスケープ用のディレクトリを作ってそこに入れるだけ。
 縦:res/layout/xxx.xml
 横:res/layout-land/xxx.xml


ちなみに、以下のような無駄な検討をしてしまった・・・

1.画面生成時(onCreate())
2.画面を縦/横切り替え時(onConfigurationChanged())

やること、
 Configuration config = resources.getConfiguration();
 で画面の向き(config.orientation)を取得する

  ・「Configuration.ORIENTATION_PORTRAIT」の場合、縦画面
  ・「Configuration.ORIENTATION_LANDSCAPE」の場合、横画面

 で、それぞれの画面を判定してレイアウトを設定する。


プロフィール

hiiro

Author:hiiro

最新記事
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Counter