SQLの窓

2015年06月28日


Eclipse で、文字列内のファイルのパスの \ 記号を \\ にする方法


 

このチェックボックスをオンにすると、"" の中にクリップボードから文字列を貼り付ける場合に、" や \ の後になんらかの文字が続いている場合は、" が \" に \ が \\ になります。

この為、Windows のパスをそのまま "" の中に貼り付けると、全ての \ が \\ となり、そのまま使用可能になります。

※ " や \ を単独で貼り付けても変化はしません。
※ コメント内は対象になりません

既に \ で作成されている文字列は、範囲を選択して SHIFT + DEL で削除して、再度貼り付けるといいです。

※ この場合、SHIFT + INS で貼り付けるとキー操作は最速になります。


posted by lightbox at 2015-06-28 21:43 | Java | このブログの読者になる | 更新情報をチェックする

2015年06月27日


Android の ListView をカスタマイズする為のテスト用の TestArrayAdapter クラスを作成しました。getView を外に出したので、継承して getView を Override する必要がありません

tools.jar

(Tools/Tools2/TestArrayAdapter)



tools.jar には、以下のサンプルコードで使用している、テストを楽にする static メソッドを持った、Tools クラスと Tools2 クラスと、TestArrayAdapter がカタログされています。tools.jar で動かすのもいいですが、どうせテスト目的なので、ソースで実装したほうが面白いかもしれません。
TestArrayAdapter

コンストラクタの第三引数で、OnGetViewListener を渡して、コンストラクタ作成部分で、内部の getView 情報をもらって、カスタムの行画面に対してデータをセットしようというものです。( 通常処理に戻すには、第三引数は null にします )
package jp.android.work;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;

/**
 * Created by lightbox on 2015/06/27.
 */
public class TestArrayAdapter<T> extends ArrayAdapter<T> {

	public interface OnGetViewListener {
		abstract public View onGetViewListener(int position, View convertView, ViewGroup parent);
	}

	private OnGetViewListener listener = null;

	public TestArrayAdapter(Context context, int resource,OnGetViewListener listener) {
		super(context, resource);
		this.listener = listener;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		if ( listener != null ) {
			return listener.onGetViewListener(position, convertView, parent);
		}
		return super.getView(position, convertView, parent);
	}
}


使用サンプル

Tools や Tools2 のメソッドでできる限りソースを簡潔に書けるように努力しています。

getView 内のお約束の処理に関しては、一応 Android Developer のサンプルコードで該当するものをチェックしました。

LayoutInflater の取得に関しては、getSystemService を使うものと、getLayoutInflater を使うものと両方がありましたが、LayoutInflater の説明ではどちらでもいいような記述でした。ただ、目立ってたので getSystemService を使いました。
package sample.lightbox.simplelistview;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;

import com.google.gson.Gson;

import jp.android.work.TestArrayAdapter;
import jp.android.work.Tools;
import jp.android.work.Tools2;


public class MainActivity extends Activity {

	// Livedoor の お天気Webサービス用 (配列データ用)
	class PinpointLocation {
		String link;
		String name;
		public PinpointLocation(String myLink, String myName) {
			name = myName;
			link = myLink;
		}

		@Override
		public String toString() {
			return name;
		}
	}
	// Livedoor の お天気Webサービス用 (JSON用)
	class Weather {
		PinpointLocation[] pinpointLocations;
	}

	// 専用アダプター
	TestArrayAdapter<PinpointLocation> adapter = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// リストビュー(PinpointLocation)用のテスト用アダプターを作成
		adapter =
			new TestArrayAdapter<PinpointLocation>(
				MainActivity.this,
				android.R.layout.simple_list_item_1,
				// 内部からこの OnGetViewListener 内の onGetViewListener を呼び出しています
				new TestArrayAdapter.OnGetViewListener() {
					@Override
					public View onGetViewListener(int position, View convertView, ViewGroup parent) {
						// 行処理のお約束
						// ▼ getView を使ったカスタムのサンプル
						// developer.android.com/samples/DataLayer/Application/src/com.example.android.wearable.datalayer/MainActivity.html
						View rowView = convertView;
						if (rowView == null) {
							// developer.android.com/reference/android/view/LayoutInflater.html
							LayoutInflater inflater = (LayoutInflater)MainActivity.this.getSystemService
								(Context.LAYOUT_INFLATER_SERVICE);
							rowView = inflater.inflate(R.layout.layout_items, null);
						}

						// 外側の自分自身を参照して、内部の PinpointLocation を取得
						PinpointLocation pl = adapter.getItem(position);
						// useView を使用して直接値をセット
						Tools2.<TextView>useView(rowView,R.id.text1).setText(pl.name);
						Tools2.<TextView>useView(rowView,R.id.text2).setText(pl.link);
						Tools2.<TextView>useView(rowView,R.id.text3).setText(Integer.toString(position+1));

						return rowView;
					}
				}
			);

		// ボタンイベントの作成
		Tools2.useButton(MainActivity.this, R.id.button, new View.OnClickListener() {
			@Override
			public void onClick(View v) {

				// データをセット
				Tools.callHttpGet(
					"http://weather.livedoor.com/forecast/webservice/json/v1?city=270000",
					"utf-8",
					new Tools.OnAsyncTaskListener() {
						@Override
						public void onAsyncTaskListener(String s) {

							Gson gson = new Gson();
							Weather weatherData = gson.fromJson(s, Weather.class);

							adapter.clear();
							adapter.addAll(weatherData.pinpointLocations);
							// リストビューに適用
							Tools2.<ListView>useView(MainActivity.this, R.id.listView)
								.setAdapter(adapter);

						}
					}
				);
			}
		});
	}

}


画面定義
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:padding="20dp">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:id="@+id/text1"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:textSize="20dp"/>

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:id="@+id/text2"
        android:layout_below="@+id/text1"
        android:layout_alignParentStart="true"/>

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:id="@+id/text3"
        android:layout_below="@+id/text2"
        android:layout_alignParentStart="true"/>
</RelativeLayout>



posted by lightbox at 2015-06-27 23:20 | 2 Android Studio | このブログの読者になる | 更新情報をチェックする

2015年06月25日


jQuery の css メソッドの引数に、$.get で外部から取得した値をセットして表示を変更する( JSON を Google ドライブに置いて使います )

jQuery の css メソッドは、文字列を一つのペアで渡すか、オブジェクトの内部を css のプロパティと一致させて複数の指定を一度に処理できます。ですから、その部分の定義を JSON 文字列で外部に保存しておいて、$.get で取得して利用するという運用が可能です。
{
    "background-color": "pink",
    "color": "red",
    "padding": "10px",
    "border": "solid 1px #000000",
    "border-radius": "8px"
}

その際、ページと違ったドメインにファイルを置く場合、そのままではセキュリティエラーになる為、参照されるドメイン側で、『access-control-allow-origin:*』を返す必要がありますが、Google ドライブにWEBページを作成する方法 でファイルを置いておけば、もともとそのような設定になっているのですぐ使う事ができます。

 

『Google ドライブ内の css.json』

※ Drive Notepad等の編集アプリで作成して変更する運用が必要になるので注意して下さい


▼ 実際に読み込んで実行しています



$.get は、このサンプルの使い方の場合、【第三引数 ※説明ありにデータの種類を指定できますが、Google ドライブに正しく保存して公開すると、『content-type:application/json』となるのでこの場合は指定する必要がありません。
<style>
.entry input {
    background-color: white;
    color: black;
    padding: 2px;
    border: solid 1px #dddddd;
    border-radius: 0px;
}
</style>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$(function(){

	$("#button").click(function(){
			$.get("https://96c122600b0451b70cd6e48fcec8f876331f788b.googledrive.com/host/0B9Jymqpro6gSflBRZktqSVRqaHA3M2R1S1lIb05NdGNNckFENXJmbGRkX3hsRnZOR1laTG8/css.json", function(data){
			$(".entry input").css( data );
			
		});
	});

	$("#button_reset").click(function(){
		$.get("https://96c122600b0451b70cd6e48fcec8f876331f788b.googledrive.com/host/0B9Jymqpro6gSflBRZktqSVRqaHA3M2R1S1lIb05NdGNNckFENXJmbGRkX3hsRnZOR1laTG8/css_default.json", function(data){
			$(".entry input").css( data );
			
		});
	});
});
</script>
<input type="button" value="CSS適用" id="button">

<form class="entry">
<input type="text" name="sei" id="sei" value="山田"><br>
<input type="text" name="mei" id="mei" value="太郎"><br>
<input type="text" name="simei" id="simei"><br>
</form>

<input type="button" value="解除" id="button_reset">
オンライン実行



タグ:AJAX jquery
posted by lightbox at 2015-06-25 15:17 | Ajax:jQuery | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり