2012年12月27日木曜日

TextViewのテキストを選択可能にする

TextViewのタグ内に以下の属性を入れるだけ。
android:textIsSelectable="true"
選択できるようになる。

TextViewの文字幅を揃える

TextViewのタグ内に以下の属性を入れるだけ。
android:typeface="monospace"
入れるとこうなる。

2012年12月16日日曜日

Java FXのダイアログ

標準のダイアログが無いようなので作ってみた。

import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.paint.Color;
import javafx.scene.control.*;
import javafx.event.*;

public class FBDialog {

 private static final int W = 300;
 private static final int H = 120;
 
 private static final int BUTTON_W = 80;
 
 public static void show(String title, String message, final Stage owner) {
  final Stage stage = new Stage();
  stage.setResizable(false);
  
  stage.initModality(Modality.APPLICATION_MODAL);
  stage.initOwner(owner);
  stage.setTitle(title);
  Group root = new Group();
  Scene scene = new Scene(root, W, H, Color.WHITE);

  Label label = new Label();
  label.setText(message);
  label.setLayoutX(10);
  label.setLayoutY(20);
  label.setMaxWidth(W-20);
  label.setWrapText(true);
  
  Button button = new Button();
  button.setOnAction(new EventHandler<ActionEvent>() {
   public void handle(ActionEvent event) {
    stage.hide();
   }
  });

  button.setPrefWidth(BUTTON_W);
  button.setLayoutX(W / 2 - BUTTON_W / 2);
  button.setLayoutY(80);
  button.setText("OK");

  root.getChildren().addAll(label, button);
  stage.setScene(scene);
  stage.show();
 }
}

例えばこんなコードを書いて実行すると、

FBDialog.show("Test", "This is a test dialog.", stage);

こんなダイアログが出る。

ラベルをセンターに置く方法がよくわからなかった。今後の課題。

Java FX アプリケーション用のantビルドファイル

Java FXの実行ファイルを作るのに、ビルドファイルをどう書けばいいのか悩んでたけど、解決した。

こちらのサイトで紹介されていたコードを改造した。

JavaFX プロジェクトの実行可能 Jar ファイルを作成する with Apache Ant

jdk1.7になって以前とパスが変わったようなので、その辺も少し修正。環境変数はこんなかんじ。

JAVA_HOME C:\Program Files\Java\jdk1.7.0_07

で、build.xmlはこんなかんじ。

 
<project name="JavaFXProject" basedir="." default="pack" xmlns:fx="javafx:com.sun.javafx.tools.ant">

    <property environment="env" />
    <property name="javafx.tools.ant.jar" value="${env.JAVA_HOME}/lib/ant-javafx.jar" />

    <property name="src" location="src/main/java" />
    <property name="dest" location="build/classes/main" />
    <property name="jardest" location="build/libs" />
    
    <property name="app.vendor" value="com.fb" />
    <property name="app.id" value="fxtest01" />
    <property name="app.name" value="FXTest01" />
    <property name="app.version" value="1.0" />
    <property name="app.main-class" value="com.fb.fxtest.FXTest01" /> 

    <taskdef resource="com/sun/javafx/tools/ant/antlib.xml" uri="javafx:com.sun.javafx.tools.ant" classpath="${javafx.tools.ant.jar}"/>

    <target name="clean">
        <delete dir="build" />
    </target>

    <target name="compile" depends="clean">
        <mkdir dir="${dest}" />
        <javac srcdir="${src}" destdir="${dest}" classpath="${env.JAVA_HOME}/jre/lib/jfxrt.jar" />
        <copy todir="${dest}">
            <fileset dir="${src}" includes = "**/*.fxml" />
        </copy>
    </target>

    <target name="pack" depends="compile">
        <fx:application id="app-info" name="${app.name}" mainClass="${app.main-class}" />
    
        <fx:jar destfile="${jardest}/${app.id}.jar">
            <fx:application refid="app-info"/>
            <manifest>
                <attribute name="Implementation-Vendor" value="${app.vendor}"/>
                <attribute name="Implementation-Title" value="${app.name}"/>
                <attribute name="Implementation-Version" value="${app.version}"/>
            </manifest>
            <fileset dir="${dest}"/>
        </fx:jar>
    </target>
        
</project>

使用したサンプルデータはこちら。

fxtest01.zip

2012年11月11日日曜日

Vertex Shaderのコンパイルエラー

Vertex Shaderのコンパイル時にエラーが出たので調査。
uniform mat4 u_mvp;
void main() {
  ...
};
Sony Tabletだと、これでコンパイル通ってたけど、他の機種やエミュレーターではコンパイルエラーが出た。理由は簡単で、最後のセミコロンを外すとあっさりコンパイルが通った。機種によってコンパイラの挙動が違うんだな。

2012年9月26日水曜日

Google Play Storeの再インストール

Sony TabletでGoogle Playストアを起動しようとすると、「com.android.vendingは終了しました」というエラーが出て起動しなくなった。ネットでいろいろ調べてもよくわからかったけど、自分で試行錯誤しているうちに解決した。Sonyに再インストールを依頼すると6,000円もかかるということなので、必死になって解決法を探したw

症状の詳細

  • Google Playストアのアイコンがなぜかcom.android.vendingというアイコンに置き換わっている。
  • アイコンから起動すると「com.android.vendingは終了しました」というエラーが出て、起動しない。
  • 他から起動しても同じようなエラーが出る。
  • アプリ一覧でGoogle Playストアが見つからない。

Google Play Storeの再インストール

Windows7から、コマンドプロンプトを使って再インストールしてみました。

ストアアプリのパッケージを探してきてダウンロードする。

自分が試したときのバージョンは、Google Play Store-8014017.apk。ググればどこかにあるはず...
最新バージョンを取得すればOK。
名前にスペースが入っていたら、実行時にエラーになるので、名前を適当に変える。
例: gps8014017.apk
適当なディレクトリにファイルを入れる。
例: C:\temp\gps8014017.apk

Android SDKをインストールしてadbを実行可能にする。

Android SDKのダウンロードはこちら
Android SDK
ダウンロードしたファイルを展開し、adb.exeのあるディレクトリを、システム環境変数のPATHに追加する。

再インストール

PCと端末をUSBデバッグ接続し、コマンドプロンプトから以下のコマンドを入力する。
C:\temp>adb install -r gps8014017.apk
Successというメッセージが出たら成功です。
※この操作で何か不具合が出るかもしれないので、くれぐれも自己責任で!

2012/12/27更新

adb関連の内容がわかりにくかったので修正。現在、adb.exeは標準では入ってないようです。SDKマネージャーから取得できるようだけど、未検証です。