ともちゃんのアプリ開発日記

組込みC言語プログラマだったともちゃんが、四苦八苦しながら、AndroidのJAVA/Kotlin、iOSのSwiftUIを習得して行きます。ともちゃんの備忘録も兼ねています。

Scroll View

Linear LayoutやRelative Layoutをスクロールするには、Scroll Viewを使います。

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:layout_weight="1">

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.jimdo.uchida001tmhr.dietrecfree.DataMainFragment"
android:gravity="center_vertical">


<EditText
android:layout_width="80dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:inputType="number"
android:ems="10"
android:id="@+id/editTextYear"
android:layout_marginLeft="50dp"
android:layout_marginStart="50dp"
android:gravity="center_horizontal"
android:imeOptions="actionNext"
android:layout_alignTop="@+id/editTextDate"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

<EditText
android:layout_width="55dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:inputType="number"
android:ems="10"
android:id="@+id/editTextMonth"
android:layout_alignBottom="@+id/editTextYear"
android:layout_toRightOf="@+id/editTextYear"
android:layout_toEndOf="@+id/editTextYear"
android:gravity="center_horizontal"
android:imeOptions="actionNext"/>

<EditText
android:layout_width="55dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:inputType="number"
android:ems="10"
android:id="@+id/editTextDate"
android:gravity="center_horizontal"
android:imeOptions="actionNext"
android:layout_below="@+id/buttonDayUp"
android:layout_toRightOf="@+id/editTextMonth"
android:layout_toEndOf="@+id/editTextMonth">
<requestFocus/>
</EditText>

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_up"
android:id="@+id/buttonYearUp"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/editTextMonth"
android:layout_toStartOf="@+id/editTextMonth"
android:layout_marginRight="15dp"
android:layout_marginEnd="15dp"
android:textAppearance="?android:attr/textAppearanceLarge" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_up"
android:id="@+id/buttonMonthUp"
android:layout_alignTop="@+id/buttonYearUp"
android:layout_toRightOf="@+id/editTextYear"
android:layout_toEndOf="@+id/editTextYear"
android:layout_alignParentTop="true"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_marginLeft="3dp" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_up"
android:id="@+id/buttonDayUp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/editTextMonth"
android:layout_toEndOf="@+id/editTextMonth"
android:layout_marginLeft="3dp" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_down"
android:id="@+id/buttonYearDown"
android:layout_below="@+id/editTextYear"
android:layout_alignLeft="@+id/buttonYearUp"
android:layout_alignStart="@+id/buttonYearUp"
android:textAppearance="?android:attr/textAppearanceLarge" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_down"
android:id="@+id/buttonMonthDown"
android:layout_below="@+id/editTextMonth"
android:layout_alignLeft="@+id/editTextMonth"
android:layout_alignStart="@+id/editTextMonth"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_marginLeft="3dp" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_down"
android:id="@+id/buttonDayDown"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_above="@+id/editTextWeightValue"
android:layout_toRightOf="@+id/editTextMonth"
android:layout_toEndOf="@+id/editTextMonth"
android:layout_marginLeft="3dp" />

<TextView
android:layout_width="wrap_content"
android:layout_height="50dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/text_view_weight"
android:id="@+id/textViewWeight"
android:gravity="center_vertical"
android:layout_below="@+id/buttonYearDown"
android:layout_alignLeft="@+id/editTextYear"
android:layout_alignStart="@+id/editTextYear" />

<EditText
android:layout_width="100dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/editTextWeightValue"
android:layout_alignTop="@+id/textViewWeight"
android:gravity="right"
android:layout_toRightOf="@+id/textViewBodyFatPercentage"
android:layout_toEndOf="@+id/textViewBodyFatPercentage"
android:singleLine="true"
android:inputType="numberDecimal"
android:imeOptions="actionNext"
>
<requestFocus/>
</EditText>

<TextView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/text_view_weight_unit"
android:id="@+id/textViewWeightUnit"
android:layout_alignTop="@+id/editTextWeightValue"
android:layout_toRightOf="@+id/editTextWeightValue"
android:layout_toEndOf="@+id/editTextWeightValue"
android:layout_alignBottom="@+id/editTextWeightValue"
android:gravity="center_vertical" />

<TextView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/text_view_body_fat_percentage"
android:id="@+id/textViewBodyFatPercentage"
android:layout_alignTop="@+id/editTextBodyFatPercentageValue"
android:layout_alignLeft="@+id/textViewWeight"
android:layout_alignStart="@+id/textViewWeight"
android:layout_alignBottom="@+id/editTextBodyFatPercentageValue"
android:gravity="center_vertical" />

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/editTextBodyFatPercentageValue"
android:layout_below="@+id/editTextWeightValue"
android:layout_alignLeft="@+id/editTextWeightValue"
android:layout_alignStart="@+id/editTextWeightValue"
android:gravity="right"
android:layout_toLeftOf="@+id/textViewWeightUnit"
android:layout_toStartOf="@+id/textViewWeightUnit"
android:singleLine="true"
android:inputType="numberDecimal"
android:imeOptions="actionNext"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/text_view_body_fat_percentage_init"
android:id="@+id/textViewBodyFatPercentageUnit"
android:layout_below="@+id/editTextWeightValue"
android:layout_toRightOf="@+id/editTextBodyFatPercentageValue"
android:layout_toEndOf="@+id/editTextBodyFatPercentageValue"
android:layout_alignBottom="@+id/editTextBodyFatPercentageValue"
android:gravity="center_vertical" />

<TextView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/text_view_BMI"
android:id="@+id/textViewBMI"
android:layout_alignTop="@+id/editTextBMIValue"
android:layout_alignRight="@+id/textViewWeight"
android:layout_alignEnd="@+id/textViewWeight"
android:layout_alignBottom="@+id/editTextBMIValue"
android:gravity="center_vertical"
android:layout_toRightOf="@+id/textViewMemo"
android:layout_toEndOf="@+id/textViewMemo" />

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/editTextBMIValue"
android:gravity="right"
android:layout_below="@+id/editTextBodyFatPercentageValue"
android:layout_toLeftOf="@+id/textViewBodyFatPercentageUnit"
android:layout_alignLeft="@+id/editTextBodyFatPercentageValue"
android:layout_alignStart="@+id/editTextBodyFatPercentageValue"
android:singleLine="true"
android:inputType="numberDecimal"
android:editable="false"
android:imeOptions="actionNext"
android:focusable="false" />

<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/check_box_O"
android:id="@+id/checkBox_O"
android:clickable="true"
android:layout_below="@+id/editTextBMIValue"
android:layout_alignLeft="@+id/buttonMonthDown"
android:layout_alignStart="@+id/buttonMonthDown" />

<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/check_box_X"
android:id="@+id/checkBox_X"
android:textAppearance="?android:attr/textAppearanceLarge"
android:clickable="true"
android:layout_below="@+id/editTextBMIValue"
android:layout_alignRight="@+id/textViewWeightUnit"
android:layout_alignEnd="@+id/textViewWeightUnit" />

<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/check_box_triangle"
android:id="@+id/checkBoxTriangle"
android:textAppearance="?android:attr/textAppearanceLarge"
android:clickable="true"
android:layout_below="@+id/checkBox_X"
android:layout_alignLeft="@+id/checkBox_O"
android:layout_alignStart="@+id/checkBox_O" />

<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/check_box_star"
android:id="@+id/checkBoxStar"
android:textAppearance="?android:attr/textAppearanceLarge"
android:clickable="true"
android:layout_below="@+id/checkBox_X"
android:layout_alignLeft="@+id/checkBox_X"
android:layout_alignStart="@+id/checkBox_X" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/text_view_stamp"
android:id="@+id/textViewStamp"
android:gravity="center_vertical"
android:layout_above="@+id/editTextMemo"
android:layout_alignRight="@+id/textViewWeight"
android:layout_alignEnd="@+id/textViewWeight"
android:layout_alignTop="@+id/checkBox_O" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/text_view_memo"
android:id="@+id/textViewMemo"
android:layout_below="@+id/textViewStamp"
android:layout_alignLeft="@+id/textViewStamp"
android:layout_alignStart="@+id/textViewStamp"
android:layout_alignBottom="@+id/editTextMemo"
android:gravity="center_vertical" />

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="text"
android:ems="10"
android:id="@+id/editTextMemo"
android:layout_below="@+id/checkBoxTriangle"
android:layout_toRightOf="@+id/textViewBMI"
android:layout_toEndOf="@+id/textViewBMI"
android:gravity="top|left"
android:imeOptions="actionDone"
android:singleLine="false" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_today"
android:id="@+id/buttonToday"
android:layout_alignBottom="@+id/editTextDate"
android:layout_toRightOf="@+id/textViewBodyFatPercentageUnit"
android:layout_toEndOf="@+id/textViewBodyFatPercentageUnit" />


<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_data_main_register"
android:id="@+id/buttonDataMainRegister"
android:layout_below="@+id/textViewMemo"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_data_main_clear"
android:id="@+id/buttonDataMainClear"
android:layout_below="@+id/editTextMemo"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />

</RelativeLayout>

</ScrollView>

 

 これで作成したViewがこちらです。

f:id:uchida001tmhr:20160423075651p:plain

IntentでメールツールにCcとBccを渡す

今回は、IntentでメールツールにCcとBccを渡します。

ソースコード例はこちら:

// 「メール作成01」のOnClickListener本体
private class MakeMail01NowOnClickListener implements View.OnClickListener {
public void onClick(View v) {

SharedPreferences prefs = getSharedPreferences("MailSetting01Activity", Context.MODE_PRIVATE);
Resources res = getResources();
// String SettingName = prefs.getString("setting_name", res.getString(R.string.default_01_setting_name));
String MailAddress = prefs.getString("mail_address", res.getString(R.string.default_01_mail_address));
String CC = prefs.getString("mail_address_CC", "");
String MailAddress_CC[] = {CC};
String BCC = prefs.getString("mail_address_BCC", "");
String MailAddress_BCC[] = {BCC};
String Subject = prefs.getString("subject", res.getString(R.string.default_01_subject));
String MailText = prefs.getString("mail_text", res.getString(R.string.default_01_text));

// メールアドレス設定
// Resources res01 = getResources();
Uri uri = Uri.parse("mailto:" + MailAddress.toString());

// 件名、本文をメールツールに渡す
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra(intent.EXTRA_CC, MailAddress_CC);
intent.putExtra(intent.EXTRA_BCC, MailAddress_BCC);
intent.putExtra(intent.EXTRA_SUBJECT, Subject);
intent.putExtra(intent.EXTRA_TEXT, MailText);

startActivity(intent);

}

ポイントは、

  intent.putExtra(intent.EXTRA_CC, MailAddress_CC);

で渡す変数MailAddress_CCがString配列になっていることですね。

 

ボタンの角を丸くする

ボタンの色を変えるのは、

Button button = findViewByID(R.id.button1);

button.setBackgroundColor(Color);

でできることは、に書きました。

ただ問題点は、ボタンを押したときの反応が亡くなることと、ボタンが何の変哲もない四画になってしまうことです。

今回は、ボタンの角を丸くすることで、ボタンに飾り気を持たせてみたいと思います。

 

1.まず、ボタンの形と色を決めるレイアウトを作成します。

  ボタンを離した時のbutton_skyblue_unpressed.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<corners
android:radius="10dp"
/>
<solid
android:color="#00C8C8"
/>
</shape>
</item>
</selector>

android:radius="10dp"のところで角を丸くしています。

ボタンを押した時のbutton_skyblue_pressed.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<corners
android:radius="10dp"
/>
<solid
android:color="#009898"
/>
</shape>
</item>
</selector>

色のところが異なっているだけです。

 

2.次にプログラム本体です。

上記で作成した、レイアウトをボタンに反映するのに、

button.setBackground(ResourcesCompat.getDrawable(getResources(), button_skyblue_unpressed, getActivity().getTheme()));

を使います。

実際のコードは下記です。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_data_main, container, false);

(中略)

Button btnRegister = (Button) view.findViewById(R.id.buttonDataMainRegister);
// 「登録」のOnTouchListenerを設定
btnRegister.setOnTouchListener(new registerOnTouchListener());

(中略)

return view;
}

 

// 「登録」のOnTouchListener本体
private class registerOnTouchListener implements View.OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {

Button button = (Button) getActivity().findViewById(R.id.buttonDataMainRegister);

DataCenter dataCenter = new DataCenter();
SharedPreferences prefs = getActivity().getSharedPreferences("setting", Context.MODE_PRIVATE);
int backgroundColor = prefs.getInt("BackgroundColor", 0);
int touchEvent = event.getAction();
switch (backgroundColor) {
case R.id.radioButtonSkyBule :
switch (touchEvent) {
case MotionEvent.ACTION_DOWN :
button.setBackground(ResourcesCompat.getDrawable(getResources(), button_skyblue_pressed, getActivity().getTheme()));
break;
case MotionEvent.ACTION_UP:
button.setBackground(ResourcesCompat.getDrawable(getResources(), button_skyblue_unpressed, getActivity().getTheme()));
break;
}
break;
case R.id.radioButtonGreen :
switch (touchEvent) {
case MotionEvent.ACTION_DOWN :
button.setBackground(ResourcesCompat.getDrawable(getResources(), button_green_pressed, getActivity().getTheme()));
break;
case MotionEvent.ACTION_UP:
button.setBackground(ResourcesCompat.getDrawable(getResources(), button_green_unpressed, getActivity().getTheme()));
break;
}
break;
case R.id.radioButtonYellow :
switch (touchEvent) {
case MotionEvent.ACTION_DOWN :
button.setBackground(ResourcesCompat.getDrawable(getResources(), button_yellow_pressed, getActivity().getTheme()));
break;
case MotionEvent.ACTION_UP:
button.setBackground(ResourcesCompat.getDrawable(getResources(), button_yellow_unpressed, getActivity().getTheme()));
break;
}
break;
default :
switch (touchEvent) {
case MotionEvent.ACTION_DOWN :
button.setBackground(ResourcesCompat.getDrawable(getResources(), button_white_pressed, getActivity().getTheme()));
break;
case MotionEvent.ACTION_UP:
button.setBackground(ResourcesCompat.getDrawable(getResources(), button_white_unpressed, getActivity().getTheme()));
break;
}
break;
}
return false;
}
}

 

 これで作った画面が、下記です。

f:id:uchida001tmhr:20160327075445p:plain

ステータスバーの背景色を変える

setStatusBarColorを使います。

setStatusBarColorはAndroid5.0(Lollipop、API Level 21)で追加された機能です。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {// Android 5.0 Lollipop
Window window = getActivity().getWindow();
// clear FLAG_TRANSLUCENT_STATUS flag:
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
// finally change the color
window.setStatusBarColor(Color.parseColor(dataCenter.COLOR_SKYBLUE_STATUSBAR));
}

 

 

ボタンの背景色の変更

ボタンの背景色の変更は、単純に

Button button = findViewByID(R.id.button1);

button.setBackgroundColor(Color);

でできます。

例えば私の実装は下記です。

まず、色の定義クラスを作ります。

public class DataCenter {
public final String COLOR_SKYBLUE_TOOLBAR = "#FF1E90FF";
public final String COLOR_SKYBLUE_VIEW = "#FFB4FFFF";
public final String COLOR_SKYBLUE_BUTTON_NORMAL = "#FF00C8C8";
public final String COLOR_SKYBLUE_BUTTON_CLICK = "#FF009898";


public final String COLOR_GREEN_TOOLBAR = "#FF228B22";
public final String COLOR_GREEN_VIEW = "#FF7FFFD4";
public final String COLOR_GREEN_BUTTON_NORMAL = "#FF00B050";
public final String COLOR_GREEN_BUTTON_CLICK = "#FF009030";


public final String COLOR_YELLOW_TOOLBAR = "#FFDAA520";
public final String COLOR_YELLOW_VIEW = "#FFFFFF96";
public final String COLOR_YELLOW_BUTTON_NORMAL = "#FFC8C800";
public final String COLOR_YELLOW_BUTTON_CLICK = "#FF989800";

public final String COLOR_WHITE_TOOLBAR = "#FF3F51B5";
public final String COLOR_WHITE_BUTTON_CLICK = "#FFB0B0B0";

public void DataCenter () {};

}

 

 次いで、色の設定本体

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_data_main, container, false);

DataCenter dataCenter = new DataCenter();

Button btnRegister = (Button) view.findViewById(R.id.buttonDataMainRegister);
// 「登録」のOnClickListenerを設定
btnRegister.setOnClickListener(new registerOnClickListener());

SharedPreferences prefs = getActivity().getSharedPreferences("setting",
Context.MODE_PRIVATE);
int backgroundColor = prefs.getInt("BackgroundColor", 0);
switch (backgroundColor) {
case R.id.radioButtonSkyBule :
btnRegister.setBackgroundColor(
Color.parseColor(dataCenter.COLOR_SKYBLUE_BUTTON_NORMAL));
break;
}
return view;
}

 これでボタンの背景色を変更できました。

ここで問題となるのが、ボタンの背景色を変えると、ボタンをタッチしたときの反応まで無くなってしまうということです。

仕方ないので、独自で実装しました。

ボタンをタッチ・クリックしたときは

①OnToucheイベント(MotionEvent.ACTION_DOWN)

②OnLongClick イベント

OnToucheイベント(MotionEvent.ACTION_UP)

④OnClickイベント

がこの順番で発生します。ロングクリックしないときは、OnLongClick イベントは発生しません。

この①と③を拾ってボタンの背景色を変えてボタンの反応を復活させることにしました。

OnCreateView()に、以下のように、setOnTouchListener()を追加します。

Button btnRegister = (Button) view.findViewById(R.id.buttonDataMainRegister);
// 「登録」のOnClickListenerを設定
btnRegister.setOnClickListener(new registerOnClickListener());
// 「登録」のOnTouchListenerを設定
btnRegister.setOnTouchListener(new registerOnTouchListener());

OnTouchListener本体です

// 「登録」のOnTouchListener本体
private class registerOnTouchListener implements View.OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {

Button button = (Button) getActivity().
findViewById(R.id.buttonDataMainRegister);

DataCenter dataCenter = new DataCenter();
SharedPreferences prefs = getActivity().getSharedPreferences("setting",
Context.MODE_PRIVATE);
int backgroundColor = prefs.getInt("BackgroundColor", 0);
int touchEvent = event.getAction();
switch (backgroundColor) {
case R.id.radioButtonSkyBule :
switch (touchEvent) {
case MotionEvent.ACTION_DOWN :
button.setBackgroundColor(
Color.parseColor(dataCenter.COLOR_SKYBLUE_BUTTON_CLICK));
break;
case MotionEvent.ACTION_UP:
button.setBackgroundColor(
Color.parseColor(dataCenter.COLOR_SKYBLUE_BUTTON_NORMAL));
break;
}
break;
case R.id.radioButtonGreen :
switch (touchEvent) {
case MotionEvent.ACTION_DOWN :
button.setBackgroundColor(
Color.parseColor(dataCenter.COLOR_GREEN_BUTTON_CLICK));
break;
case MotionEvent.ACTION_UP:
button.setBackgroundColor(
Color.parseColor(dataCenter.COLOR_GREEN_BUTTON_NORMAL));
break;
}
break;
case R.id.radioButtonYellow :
switch (touchEvent) {
case MotionEvent.ACTION_DOWN :
button.setBackgroundColor(
Color.parseColor(dataCenter.COLOR_YELLOW_BUTTON_CLICK));
break;
case MotionEvent.ACTION_UP:
button.setBackgroundColor(
Color.parseColor(dataCenter.COLOR_YELLOW_BUTTON_NORMAL));
break;
}
break;
default :
switch (touchEvent) {
case MotionEvent.ACTION_DOWN :
button.setBackgroundColor(
Color.parseColor(dataCenter.COLOR_WHITE_BUTTON_CLICK));
break;
case MotionEvent.ACTION_UP:
button.setBackgroundColor(Color.LTGRAY);
break;
}
break;
}
return false;
}
}

 

 これで、ボタンをクリックしたときの反応が復活します。

 

Uriで指定されたファイルの読み込み

暗黙的インテントでアプリが起動される場合、Uriでファイルが指定されることがあります。その場合、ContentResolverを駆使しなくても、ファイルを読みだすことが可能です。

UriCSVファイルが指定されている場合を例にとって、説明していきます。

1.Uriで指定されたファイルのオープン

InputStream inputStream = context.getContentResolver().openInputStream(importUri);

 2.InputStream型→InpurStreamReader型→BufferReader型変換

バイナリファイルの場合、

byte[] buffer = new Byte[1024];
inputStream.read(buffer);

で読み込めますが、テキストファイルの場合、1行単位で読み出したいので、InputStream型を、InpurStreamReader型→BufferReader型に変換する必要があります。

そのやり方がこうです。

InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(inputStreamReader);

そして、

String AcpplicationTitle = reader.readLine();

 

で読み込みます

3.ソースコード全体

    public int importFile(Context context, Uri importUri, ProgressDialog progressDialog) {
// File srcFile = new File(CSVfile);
// InputStream inputFile;
try {
InputStream inputStream = context.getContentResolver().openInputStream(importUri);
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(inputStreamReader);
String AcpplicationTitle = reader.readLine();
if (!AcpplicationTitle.equals(context.getText(R.string.app_name).toString())) {
return NOT_DIET_REC_FILE;
}
String strVersionCode = reader.readLine();

String[] strs;
strs = strVersionCode.split(",");
int version = Integer.valueOf(strs[1]);
switch (version) {
case 1:
String PrefecensesTitle = reader.readLine();
String PrefecensesData = reader.readLine();
strs = PrefecensesData.split(",");
if (strs.length != 4) {
return INVALID_PREFERENCE_DATA_COUNT;
}
float targetTall = Float.valueOf(strs[0]);
float targetWeight = Float.valueOf(strs[1]);
float targetBodyFatPercentage = Float.valueOf(strs[2]);
float targetBMI = Float.valueOf(strs[3]);
SharedPreferences prefs = context.getSharedPreferences("setting", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putFloat("TargetTall", targetTall);
editor.putFloat("TargetWeight", targetWeight);
editor.putFloat("TargetBodyFatPercentage", targetBodyFatPercentage);
editor.putFloat("TargetBMI", targetBMI);
// editor.commit();
editor.apply();

String strDataCount = reader.readLine();
strs = strDataCount.split(",");
long dataCount = Long.valueOf(strs[1]);
String DataTitle = reader.readLine();
DatabaseManager databaseManager = new DatabaseManager();
progressDialog.setMax((int) dataCount);
for (long i = 0; i < dataCount; i++) {
String strData = reader.readLine();
strs = strData.split(",");
switch (strs.length) {
case 11:
databaseManager.replaceDatabase(
strs[0], // 日付
Float.valueOf(strs[1]), // 体重
Float.valueOf(strs[2]), // 体脂肪率
Float.valueOf(strs[3]), // BMI
Float.valueOf(strs[4]), // 目標体重
Float.valueOf(strs[5]), // 目標体脂肪率
Float.valueOf(strs[6]), // 目標BMI
Integer.valueOf(strs[7]), // スタンプ●
Integer.valueOf(strs[8]), // スタンプ×
Integer.valueOf(strs[9]), // スタンプ▲
Integer.valueOf(strs[10]), // スタンプ★
""); // メモ
break;
case 12:
databaseManager.replaceDatabase(
strs[0], // 日付
Float.valueOf(strs[1]), // 体重
Float.valueOf(strs[2]), // 体脂肪率
Float.valueOf(strs[3]), // BMI
Float.valueOf(strs[4]), // 目標体重
Float.valueOf(strs[5]), // 目標体脂肪率
Float.valueOf(strs[6]), // 目標BMI
Integer.valueOf(strs[7]), // スタンプ●
Integer.valueOf(strs[8]), // スタンプ×
Integer.valueOf(strs[9]), // スタンプ▲
Integer.valueOf(strs[10]), // スタンプ★
strs[11]); // メモ
break;
default:
return INVALID_DB_DATA_COUNT;
}
progressDialog.setProgress((int) i);
try {
Thread.sleep(WAIT_TIME); //200ミリ秒Sleepする
} catch (InterruptedException e) {
}
}
break;
}
} catch(FileNotFoundException e) {
return FAIL_IN_FILE_OPEN;
} catch(IOException e) {
return FAIL_IN_FILE_READ;
}

return SUCCESS;
}
}