スクロールバー表示を比べる

jquery.tablefix.js というjquery はHTML上、描画した table タグのスクロールを描画するのに
便利で良いと思っていたが、たまに線が1~2px ずれたりして気にいらないところがあった。

http://www.otchy.net/javascript/tablefix/


jQuery データObject を、Excel のように描画する http://handsontable.com/

で、スクロールさせる方が、ズレがなく綺麗に描画できてる。

以下のように書いて、、

$('#example').handsontable({
   data: data,
   colHeaders: ["Year", "Maserati", "Mazda", "Mercedes", "Mini", "Mitsubishi"],
   contextMenu: false,
   stretchH: 'all',
   readOnly: true
});

<div id="example" class="handsontable" style="width: 400px; height: 140px; overflow: auto"></div>

とスタイルを指定してスクロールバーを表示させると、、、

f:id:posturan:20160313192234j:plain




jQuery plugin で、Excel のように。。。

jQuery plugin で、Excel のように編集できるもの。

http://handsontable.com/index.html

github

JSの指定は、サンプルのように、配布されてる jquery.handsontable.full.js を使用
CSS は、、jquery.handsontable.full.css が配布されてる。

例えば、ドラッグして自動入力。。。。。

f:id:posturan:20160313192327j:plain


すると、以下のようになる。

f:id:posturan:20160313192316j:plain



HTML <div>で書きたいところに、、

<div id="example" class="handsontable"></div>

JavaScript は、、

$(function(){
   var data = [
      ["", "Kia", "Nissan", "Toyota", "Honda"],
      ["2008", 10, 11, 12, 13],
      ["2009", 20, 11, 14, 13],
      ["2010", 30, 15, 12, 13],
      ["2011", "", "", "", ""],
      ["2012", "", "", "", ""]
   ];
   $('#example').handsontable({
      data:
 data,
      minSpareRows: 1,
      colHeaders: true,
      contextMenu: true
   })
;
});

row = 2 , column = 3 の値を取り出す場合、、

var row2col3 = $("#example").handsontable('getDataAtCell', 2, 3);
console.log('value23 = ' + row2col3 );


その他、Method の説明を見ると良い。

一番上のActivityクラス名

ActivityManager mActivityManager = (ActivityManager)getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> list = mActivityManager.getRunningTasks(1);
if (list.size() > 0) {
   String className = list.get(0).topActivity.getClassName();
}

---
AndroidManifest.xml で、

<uses-permission android:name="android.permission.GET_TASKS"/>

@hide のコードは、使わない方が良い。

よく調べもせずに書いてしまった。address_book_index_extras
Android で、Contactの情報を取得する Uri にこのオプション true を指定すると連絡先の
インデックスの情報、インデックス毎のカウントなど取得できるのだが、
どうも、結果が怪しい!

Android ソースコードを調べると、これは

android.provider.ContactsContract.ContactCounts
という、隠された interface で定義したもので、ContactCounts を打っても、そんなクラスは存在せずエラーになる、
つまり、@hide APIなのである。

ContactCount で、
ADDRESS_BOOK_INDEX_EXTRAS = "address_book_index_extras"
EXTRA_ADDRESS_BOOK_INDEX_TITLES = "address_book_index_titles"
EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "address_book_index_counts"
これらが、@hide として定義されてる。

Cursor から、getExtra で取得する Bundle から情報が取得できるが、
どうも、値が怪しい。。。

@hide がついて、Android SDK からエクスポートされないから、
import android.provider.ContactsContract.ContactCounts;
も、コンパイル通らないわけであって、無理やり、

CommonDataKinds.Email.CONTENT_URI.buildUpon().appendQueryParameter("address_book_index_extras", "true").build()

という Uri を使うのは、良くない!


android.provider.ContactsContract は、他にも @hide だらけだった。。。

ContentResolver で、LIMIT句を書く場所

ContentResolver で、LIMIT句のクエリを実行する場合、Uriのパラメータ追加でなくて、
query メソッドsortOrder パラメータに書いた方が良い。

以下のように、UriappendQueryParameter を実行して 再 build するものと思っていたのだが、、、

Cursor cursor = context.getContentResolver().query(
ContactsContract.Data.CONTENT_URI
.buildUpon().appendQueryParameter("limit", "10")
.appendQueryParameter("offset", "20")
.build()

, projection
, selection
, selectionArgs
, RawContacts.CONTACT_ID + " ASC
");


これは、期待どおりに offset がうまく働かない。


query メソッドsortOrder に書いてしまう方がうまくいく。

Cursor cursor = context.getContentResolver().query(
ContactsContract.Data.CONTENT_URI
, projection
, selection
, selectionArgs
, RawContacts.CONTACT_ID + " ASC limit 10 offset 20"
);

Email.CONTENT_URI でPHONETIC_NAMEを取るべきでない

Abdroid 電話帳に、以下のようなデータが登録されている場合、

FAMILY_NAME = null (未入力状態)
GIVEN_NAME = null
MIDDLE_NAME = null
PHONETIC_FAMILY_NAME = null
PHONETIC_GIVEN_NAME = ウラン
PHONETIC_MIDDLE_NAME = null
ADDRESS = 12345@aaaaa.com


UriCommonDataKinds.Email.CONTENT_URI

String[] projection に、
android.provider.ContactsContract.Contacts.DISPLAY_NAME
android.provider.ContactsContract.RawContacts.PHONETIC_NAME
で、ContentResolver の query を実行すると、

DISPLAY_NAME = 12345@aaaaa.com
PHONETIC_NAME = null

の結果で取得してしまう。

DISPLAY_NAMEが空だから、代わりにADDRESSが返ってくるのは
しかたないけど、
PHONETIC_GIVEN_NAME を入れてるのに、
PHONETIC_NAME に、null が返ってしまう。


FAMILY_NAME、GIVEN_NAME が入力されてれば、PHONETIC_NAME は想定どおり

PHONETIC_FAMILY_NAME + PHONETIC_MIDDLE_NAME + PHONETIC_GIVEN_NAME
の結合で、取得できるのに。。。

やはり、PHONETIC_NAME と ADDRESS 両方が欲しい場合は、
ContactsContract.Data.CONTENT_URI で、CONTACT_ID と PHONETIC_NAME を取得してから、
CONTACT_ID をWHERE句で指定する Email.CONTENT_URI で、
問い合わせないといけない。


全角英数字→半角英数字

Webページ、入力フィールドでPOSTする前に、
全角英数字→半角英数字
などを行うための jQuery

$(function(){

   /* 全角英数字→半角英数字 */
   $('#serialNumber').change(function(){
      var txt  = $(this).val();
      var han = txt.replace(/[A-Za-z0-9]/g, function(s){ return String.fromCharCode(s.charCodeAt(0)-0xFEE0); });
      $(this).val(han);
   });
   /* 全角数字→半角数字 */
   $('#number').change(function(){
      var txt  = $(this).val();
      var han = txt.replace(/[0-9]/g, function(s){ return String.fromCharCode(s.charCodeAt(0)-0xFEE0); });
      $(this).val(han);
   });
   /* ひらがな→カタカナ */
   $('#hira').change(function(){
      var txt  = $(this).val();
      var r = txt.replace(/[ぁ-ん]/g, function(s){ return String.fromCharCode(s.charCodeAt(0)+0x0060); });
      $(this).val(r);
   });
   /* カタカナ→ひらがな */
   $('#kana').change(function(){
      var txt  = $(this).val();
      var r = txt.replace(/[ァ-ン]/g, function(s){ return String.fromCharCode(s.charCodeAt(0)-0x0060); });
      $(this).val(r);
   });

});