spinnerのドロップダウン時の文字色は黒のまま。Spinnerの文字色を白へ変更する。

spinnerのドロップダウン時の文字色は黒のまま。Spinnerの文字色を白へ変更した。

Buttonの文字色はxmlで”textcolor”にて色を設定できるが

Spinnerは”textcolor”で設定できず、通常は文字色は黒になる。

今回は以下のスクショのようにSpinnerの文字色をホワイトにした。

ちなみにスクショは、とりのから揚げです。Yokohamaの関内駅近くで食べました。

Spinnerをタップしドロップダウンで配列の文字を表示した場合、文字色は黒です。デザインをシンプルかつ統一したいためSpinnerの文字は白にし、ドロップダウンした場合は文字色を黒にしました。

上記のアプリはGoogle Playにあります。
食事メモ 食べたもの記録帳

やり方は簡単です。

 
▼通常

ArrayAdapter<String> adapter 
= new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,strings);

▼Spinner 文字色 白

ArrayAdapter<String> adapter 
= new ArrayAdapter<String>(this,R.layout.spinner_item,strings);

 

▼異なる箇所
android.R.layout.simple_list_item_1
R.layout.spinner_item

”android.R.layout.simple_list_item_1”は、文字色が黒です。
”R.layout.spinner_item”は、文字色を白に設定したlayoutで、以下のようにidを@android:id/text1と指定します。

▼spinner_item.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:textColor="#fff" />

上記のようにspinner_item.xmlを新規作成し、
ArrayAdapterのコンストラクタの引数に指定し、setAdapterすればOKです。

以上、spinnerの文字色を白にする方法でした。

 

PreferenceScreenで設定をネスト/ネスティングする。

PreferenceScreenで設定をネスト/ネスティングする。

「電気 グラフ」、「ガス グラフ」、「水道 グラフ」がPreferenceScreenでネストした箇所です。 例えば、「電気 グラフ」の部分をタップすると、ネストしたPreferenceScreenの設定の画面へ遷移する。

 

遷移後の画面です。

 

▼Preferenceのソース(一部)

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="円グラフの設定">
            <SwitchPreference android:key="en_graph" android:summary="OFFにすると非表示になります。" android:switchTextOff="OFF" android:switchTextOn="ON" android:title="円グラフの表示" />
    </PreferenceCategory>
    <PreferenceScreen android:title="電気 グラフ" >
        <PreferenceCategory android:title="電気 グラフの設定" android:layout="@layout/row_preference_category">
            <SwitchPreference android:key="denki_fee_bar_graph" android:summary="OFFにすると非表示になります。" android:switchTextOff="OFF" android:switchTextOn="ON" android:title="[棒グラフ] 電気 金額" />
        </PreferenceCategory>
    </PreferenceScreen>
    <PreferenceScreen android:title="ガス グラフ" >
        <PreferenceCategory android:title="ガス グラフの設定">
             <SwitchPreference android:key="gass_fee_bar_graph" android:summary="OFFにすると非表示になります。" android:switchTextOff="OFF" android:switchTextOn="ON" android:title="[棒グラフ] ガス 金額" />
        </PreferenceCategory>
    </PreferenceScreen>
    <PreferenceScreen android:title="水道 グラフ" >
        <PreferenceCategory android:title="水道 グラフの設定">
             <SwitchPreference android:key="suidou_fee_bar_graph" android:summary="OFFにすると非表示になります。" android:switchTextOff="OFF" android:switchTextOn="ON" android:title="[棒グラフ] 水道 金額" />
        </PreferenceCategory>
    </PreferenceScreen>
 </PreferenceScreen>

 

 

現在の月を取得して条件分岐させたい クリスマス想定

現在の月を取得して条件分岐させたい。

12月24日、25日あたりはクリスマスなので

12月中は、その日まではクリスマスの感じをだしたりする。

そのための条件分岐をつくりたい。

まずは2つメソッドを作成した。

1つは月を取得するためのメソッドで
2つ目は日を取得するためのメソッドです。


	/*
	 * 月を取得
	 */
    private int getMonth() {
        // TODO 自動生成されたメソッド・スタブ
        //カレンダーのインスタンス宣言
    	Calendar cal1= Calendar.getInstance();
        return cal1.get(Calendar.MONTH)+1;
    }
	/*
	 * 日を取得
	 */
    private int getDay() {
        // TODO 自動生成されたメソッド・スタブ
        //カレンダーのインスタンス宣言
    	Calendar cal1= Calendar.getInstance();
        return cal1.get(Calendar.DATE);
    }

ほかのメソッド内でクリスマス用の処理を記載するための
条件分岐を以下のように記載

		//クリスマス時期限定  12/1から12/25は表示
		if(getMonth()==12&&getDay()<=25){
			//クリスマス限定の処理
		}

上の条件分岐で月は12月で、日付が25以下のときはtrueになる予定。

配列とlist Collections.shuffleでlistの中をシャフル

package tokyo.too.java.sample001;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class Sampleneko {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		new Sampleneko().neko1();
	}
	private void neko1(){
		Random random1 = new Random();
		Random random2 = new Random();
		
		String[] strUnsei1 = {"凶", "吉", "大凶", "末吉"};
		String[] neko1 = strUnsei1;
		String[] neko2 = strUnsei1;
		String[] neko3 = strUnsei1;
		String[] nekoX3 = {"ねこ4", " ねこ5", "ねこ6", "ねこ7"};
		
		List<String> list = Arrays.asList(nekoX3);
		Collections.shuffle(list);
		
		nekoX3 = (String[])list.toArray(new String[0]);

		
		int randam_number1 = random1.nextInt(strUnsei1.length);
		System.out.print("運勢:");
		System.out.println(strUnsei1[randam_number1]);
		
		for(int i=0;i<4;i++){
			System.out.println("neko1:"+i+" "+neko1[i]);
		}
		
		int randam_number_c  = random2.nextInt(neko2.length);
		System.out.println(neko2[randam_number_c]);
		
		
		for(int i=0;i<4;i++){
			System.out.println("neko3:"+i+" "+neko3[i]);
		}
		
		for(String str:nekoX3){
			System.out.println(str);
		}
	}
}

実行結果

運勢:大凶
neko1:0 凶
neko1:1 吉
neko1:2 大凶
neko1:3 末吉

neko3:0 凶
neko3:1 吉
neko3:2 大凶
neko3:3 末吉
ねこ5
ねこ4
ねこ6
ねこ7

ポリモーフィズムの重要な点 サンプルソース

同じクラスのインスタンスでも

参照する変数の型が異なると

使用できるメソッドに差異を作れる。

変数の型を変えることで

メソッドや定数などを使えないようにすることができる。

最小構成のメソッドや定数を使えればOKというときなどに

インターフェースの型の変数にインスタンスを参照させたりする。

 

ポリモーフィズムを使ったAPIがよくあるので

理解していないと、スムーズにプログラミングが進まない。

ポリモーフィズムだと気づけるのと気づけないのでは

処理のやり方に大きな違いがでると思います。

 

Catインターフェース

package tokyo.too.java.polymorphism;

public interface Cat {
	 static final int COLOR_WHITE = 1;
	 static final int COLOR_BLACK = 2;
	 static final int COLOR_GRAY = 3;

	 public void nya();
	 public void walk();
	 public void run();

}

Catインターフェースを実装したCatTamaクラス

package tokyo.too.java.polymorphism;

public class CatTama implements Cat{

	 public final int  COLORTAMA = 5;

	@Override
	public void nya() {
		// TODO 自動生成されたメソッド・スタブ

	}

	@Override
	public void walk() {
		// TODO 自動生成されたメソッド・スタブ

	}

	@Override
	public void run() {
		// TODO 自動生成されたメソッド・スタブ

	}

	public void getFish(){

	}

	public void getCatFood(){

	}
	public void setFish(){

	}

	public void setCatFood(){

	}
}

Main クラス

CatTamaのインスタンスの生成と
クラス型変数への参照
メソッドの実行、定数の参照をおこなっている。


package tokyo.too.java.polymorphism;

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		//CatTamaクラスのメソッドをすべて使用可能 
		CatTama catTama = new CatTama();
		catTama.getCatFood();
		catTama.getFish();
		catTama.nya();
		catTama.run();
		catTama.walk();
		int catTama_calor1 = catTama.COLOR_BLACK;
		int catTama_calor2 = catTama.COLOR_WHITE;
		int catTama_calor3 = catTama.COLOR_GRAY;
		int catTama_calor4 = catTama.COLORTAMA;

		/*
		 * Cat型cat CatTamaのメソッドと定数など呼び出せない
		 * Cat型のメソッド・定数などを使用できる。
		 */

		Cat cat = new CatTama();
		cat.nya();
		cat.run();
		cat.walk();
		int cat_calor1 = cat.COLOR_BLACK;
		int cat_calor2 = cat.COLOR_WHITE;
		int cat_calor3 = cat.COLOR_GRAY;

		/*
		 * キャスト Cat型catをCatTama型にキャスト
		 * CatTamaのメソッド・定数など使用できる
		 */
		CatTama catTamaCast = (CatTama)cat;
		catTamaCast.nya();
		catTamaCast.run();
		catTamaCast.setCatFood();
		catTamaCast.setFish();
		catTamaCast.getFish();
		int catTamaCast_calor1 = catTamaCast.COLOR_BLACK;
		int catTamaCast_calor2 = catTamaCast.COLOR_WHITE;
		int catTamaCast_calor3 = catTamaCast.COLOR_GRAY;
		int catTamaCast_calor4 = catTamaCast.COLORTAMA;

	}
}

引数とforを使った簡単なjavaプログラムサンプル

javaで引数を指定し
指定した引数の値によって
”にゃにゃーん”
を表示する簡単なプログラムです。

実行結果
tmp1

package tokyo.too.samplejava001;

public class Ren {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		
		/*
		 * 引数チェック
		 */
		int argslength = args.length;
		if(argslength!=1){
			System.out.println("引数を指定してください。");
			return;
		}
		
		/*
		 * 引数を使用し処理実行
		 */
		String argument1 = args[0];
		int i=0;
		if(!argument1.equals("")|argument1!=null){
			i = Integer.valueOf(argument1);	
		}
		View v = new View();
		v.stanya(i);
	}
}

Viewクラスは以下です。

package tokyo.too.samplejava001;

public class View {
	
	void stanya(int p){
		
		if(p==0){
			System.out.println("[エラーだにゃ] 0は無効な値です。有効な数字を入力してくださいにゃ(有効な値:1~20)");
		}else if(p>=1&p<=20){
			System.out.println("入力した値:"+p);	
			String stars = makenya(p);
			System.out.println(stars);
		}else if(p<=-1|p>=21){
			System.out.println("参ったニャー");
		}else{
			System.out.println("[エラーだにゃ]有効な数字を入力してくださいにゃ(有効な値:1~20)");
		}
	}
	
	/*
	 * にゃんにゃーんsakusei
	 */
	private String makenya(int p){
		StringBuilder builder = new StringBuilder();
		int forcount = (int)(20/p);
		System.out.println("forcount:"+forcount);
		for(int i=0;i<forcount;i++){
			builder.append("にゃにゃーん:");
			builder.append(i);
			builder.append("\n");
		}
		return builder.toString();
	}

}

Javaのswitch でクラスのインスタンス化 のサンプル

Javaのswitch でクラスのインスタンス化 のサンプル


public class Tmp {
	//フィールド
	private static A a;
	private static B b;
	private static C c;
	
	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Tmp tmp = new Tmp();
		//引数に1を指定してAクラスをインスタンス化
		tmp.classSwitch(1);
		//Aクラスのインたんすからメソッド呼び出し
		a.aMethod();
		
		tmp.classSwitch(2);
		b.bMethod();
		
		tmp.classSwitch(3);
		c.cMethod();
		
	}
	private void classSwitch(int key){
		switch (key) {
		case 1:
			a = new A();
			break;
		case 2:
			b = new B();
			break;
		case 3:
			c = new C();
			break;
		default:
			break;
		}

	}
	class A {
		void aMethod(){
			System.out.println("A");
		};
	}
	class B {
		void bMethod(){
			System.out.println("B");
		};
	}
	static class C{
		void cMethod(){
			System.out.println("C");
		};
	}
}

USBメモリを使ってwindows7からwindows10へアップグレードした

Windows 10 のインストールまたは再インストールが必要な場合は、このページのツールを実行すると、USB フラッシュ ドライブまたは DVD を使って独自のインストール メディアを作成できます。

USBメモリ16GBを使ってwindows7からwindows10へアップグレードした。

USBメモリ16GBにwindows10 proの32bitと64bitのインストーラを両方をいれた。

約9GBになった。

※windows 10 proのはいったUSBメモリをwindows 7 homeにさしてsetupを押したら
プロダクトキーをきかれた。どうやらwindows7 homeにはwindows10homeを使用するようです。
→windows10home用にUSBメモリ32GBを注文した。
ちいさめのUSBメモリを選んだ。

※USBメモリのかわりに外付けのHDDでためしたけれど、windows10homeのインストーラーをいれられなかった。

windows7 proにそのUSBメモリをいれて

setupをクリックして次へ次へとすすめていった。

準備中てきな画面で15分くらいかかった。

再起動後、”windowsをアップグレードしています”

という画面になった。

そこでも10分くらいまった。

windows10をインストール完了した。

起動したが、固まった。22:15
ほっておいた。
→電源ボタンをおして強制終了させた。

再起動後は固まらずに動いた。

youtubeで動画をみたら
音がでなかった。

なんでだろう。

コンストラクタの初期化にはthisをつける必要がある。

コンストラクタの初期化には

thisをつける必要がある。

package tokyo.jan;

public class MainClass {

	private String msg;
	
	public MainClass(){
		this("Good morning everyone");
	}
	
	public MainClass(String msg){
		this.msg=msg;
	}
	

	public static void main(String[] args) {
		System.out.println(new MainClass());
	}

	@Override
	public String toString() {
		// TODO 自動生成されたメソッド・スタブ
		return msg;
	}

}

printlnの引数にnewしたインスタンスを指定している。

さらに、toStringメソッドをオーバーライドしている。

オーバーライドはメソッドの上書きです。

すべてのクラスはObjectクラスを継承しています。

ObjectクラスはtoStringメソッドをもってます。

そのためprintlnメソッドを実行するとtoStringメソッドが実行され表示される。

詳しくはprintlnメソッドのAPI(ソース)などを参照ください。

ArrayListを使ったサンプル

可変長のArrayListを使ったサンプルです。

addメソッド:追加

getメソッド:値の取得

あと、削除する場合にはremoveメソッドがあります。

package jp.xsrv.websky21;

import java.util.ArrayList;

public class Mainclass {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		//いつくでも代入できるList 型にIntegerを指定
		ArrayList<Integer> list = new ArrayList<Integer>();
		
		//追加 addを使用していくつでも追加できる
		list.add(1);
		list.add(2);
		list.add(999);
		list.add(123);
		list.add(555);
		
		//1個づつ取り出すその1 index指定する
		System.out.println(list.get(0));
		System.out.println(list.get(1));
		System.out.println(list.get(2));
		System.out.println(list.get(3));
		System.out.println(list.get(4));
		
		
		//拡張for文ですべて表示
		for(int i:list){
			System.out.println(i);	
		}
	}

}