-->

Android

イメージを座標を表示する方法だ。ただ、leftMargin、topMarginにマイナス値が指定できないのでイメージがはみ出しているような表示ができないんだよな〜〜〜。これをしたい場合、カスタムビューを作るだろうな。たぶん。

//イメージを表示する(のせる)レイアウト
RelativeLayout activityMain = (RelativeLayout)findViewById(R.id.activity_main);

//表示するイメージを用意する。
ImageView imageView = newImageView(this);
imageView.setImageResource(R.drawable.image);

//イメージのサイズを指定
RelativeLayout.LayoutParams params = newRelativeLayout.LayoutParams(200,200);

//表示位置を指定
params.leftMargin = 100;
params.topMargin = 100;

//イメージの表示
imageView.setLayoutParams(params);
activityMain.addView(imageView);

このエントリーをはてなブックマークに追加

ここ(http://m-miya.blog.jp/archives/1060960478.html)にも書いたがPCのJavaの方法では、ARM64、Genymotionでうまく動かなかった。本来ならそれようのネイティヴコードを追加するべきなんだろうが、Andoidに最初から含まれているSQLiteを使うJDBCドライバあるんでそれを使ってみることにする。

追加したいプロジェクトを開いてプロジェクトのところを右クリックのメニューで"Open Module Settings"を選択して"Project Structure"ダイアログを表示する。

ダイアログの左のappを選択してDependenciesタブを選択して右の"+"を押すとメニューが出るのでLibrary dependencyを選んで"Choose Library Dependency"ダイアログを表示する。

ダイアログのテキストボックスにsqldroidと入力して検索(虫眼鏡)ボタンを押すとリストに"org.sqldroid:sqldroid:~"と出るのでそれを選んでOKボタンを押すとsqldroidが追加される。


次にプログラムの方は、Class.forNameで読み込むのを"org.sqldroid.SQLDroidDriver"にする。
getConnectionに渡す文字列を"jdbc:sqlite:"のところを"jdbc:sqldroid:"に変更すればOK。


このエントリーをはてなブックマークに追加

SQLiteを使うには、まず、ここ(https://bitbucket.org/xerial/sqlite-jdbc)からSQLiteのJDBCをダウンロードする。これをプロジェクトに追加してやるとJDBC経由でSQLiteが使えるようになる。
このjarファイルには、ネイティヴコードの共有ライブラリも含まれているので、そのまんま使える。sqlite-jdbc-3.8.11.2.jarでざっくり調べてみたら、Windows10(x64)、Mac(OS X El Capitan)、Android 5.1(ARM)、6.0(x86)で動くのを確認した。AndroidのエミュレータGenymotionのAndroid6.0とSDKのエミュレータでAndroid7.0(ARM64)では動かなかった。

ちょっとしたサンプルを。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SQLiteTest {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("org.sqlite.JDBC");
        Connection conn = DriverManager.getConnection("jdbc:sqlite:c:\\tmp\\test.db");
        
        // テーブルを作る
        Statement stmt = conn.createStatement();
        String sql =  "CREATE TABLE IF NOT EXISTS "
                + "test(id INTEGER PRIMARY KEY, name TEXT)";
        stmt.execute(sql);
        stmt.close();
        
        // データを登録
        sql =  "INSERT INTO test(id, name) VALUES(?, ?)";
        PreparedStatement preStmt = conn.prepareStatement(sql);
        for(int i = 0; i < 10; i++) {
            int j = 1;
            preStmt.setInt(j++, i);
            preStmt.setString(j++, "hoge" + i);
            preStmt.execute();            
        }
        preStmt.close();

        // 検索
        sql =  "SELECT * FROM test";
        stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
        while(rs.next()) {
            System.out.println(rs.getInt("id") + ", " + rs.getString("name"));
        }
        rs.close();
        stmt.close();
        
        conn.close();
    }
}


このエントリーをはてなブックマークに追加

らびブログ » Blog Archive » [Android] gradle.propertiesの場所
gradle.properties

32ビットのWindowsでこのエラーがちょくちょく出てたんだよね~

このエントリーをはてなブックマークに追加

アクションバーをいじろうとgetActionBar()したんだが、nullが返ってきて・・・
調べてみると、というか、よく見てみるとActivityがAppCompatActivityを継承してた。AppCompatActivityはサポートライブラリのActionBarを使ったActivityってことで、ActionBarを取得するには、getSupportActionBar()を呼んで取得することになる。これで返ってくるActionBarは、サポートライブラリのandroid.support.v7.app.ActionBarになる。

Android StudioのActivityのテンプレートがAppCompatActivityを継承したものを作るようになっているんだな。前は違ったような気がするんだが。(自分で書いてただけかもしれんが)


このエントリーをはてなブックマークに追加

↑このページのトップヘ