diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java index 7e368dc0..e1877a9d 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java @@ -28,7 +28,9 @@ import android.os.Environment; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.support.v4.content.ContextCompat; -import android.text.Html; +import android.text.SpannableStringBuilder; +import android.text.Spanned; +import android.text.SpannedString; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; @@ -145,7 +147,7 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { @Override public void updateOnView(List scaleMeasurementList) { - tableDataView.setAdapter(new ListViewAdapter(new ArrayList>())); // delete all data in the table with an empty adapter array list + tableDataView.setAdapter(new ListViewAdapter(new ArrayList>())); // delete all data in the table with an empty adapter array list if (scaleMeasurementList.isEmpty()) { return; @@ -220,7 +222,7 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { } } - ArrayList> dataRowList = new ArrayList<>(); + ArrayList> dataRowList = new ArrayList<>(); int displayCount = 0; @@ -232,16 +234,21 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { prevScaleMeasurement = scaleMeasurementList.get(i + 1); } - HashMap dataRow = new HashMap<>(); + HashMap dataRow = new HashMap<>(); int columnNr = 0; - dataRow.put(columnNr++, Long.toString(scaleMeasurement.getId())); + dataRow.put(columnNr++, new SpannedString(Long.toString(scaleMeasurement.getId()))); for (MeasurementView measurement : measurementsList) { measurement.loadFrom(scaleMeasurement, prevScaleMeasurement); if (measurement.isVisible()) { - dataRow.put(columnNr++, measurement.getValueAsString() + "
" + measurement.getDiffValue()); + SpannableStringBuilder text = new SpannableStringBuilder(); + text.append(measurement.getValueAsString()); + text.append("\n"); + measurement.appendDiffValue(text); + + dataRow.put(columnNr++, text); } } @@ -410,12 +417,12 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { private class ListViewAdapter extends BaseAdapter { - private ArrayList> dataList; + private ArrayList> dataList; private LinearLayout row; - public ListViewAdapter(ArrayList> list) { + public ListViewAdapter(ArrayList> list) { super(); - this.dataList =list; + this.dataList = list; } @Override @@ -464,11 +471,11 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { LinearLayout convView = (LinearLayout)convertView; - HashMap map = dataList.get(position); + HashMap map = dataList.get(position); - for (int i = 0; i< dataList.get(0).size(); i++) { + for (int i = 0; i < map.size(); i++) { TextView column = (TextView)convView.getChildAt(i); - column.setText(Html.fromHtml(map.get(i))); + column.setText(map.get(i)); } return convertView; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/FloatMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/FloatMeasurementView.java index 598714aa..e5004da3 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/FloatMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/FloatMeasurementView.java @@ -248,28 +248,39 @@ public abstract class FloatMeasurementView extends MeasurementView { } @Override - public String getDiffValue() { + public void appendDiffValue(SpannableStringBuilder text) { if (previousValue < 0.0f) { - return ""; + return; } char symbol; - String color; + int color; final float diff = value - previousValue; if (diff > 0.0f) { symbol = SYMBOL_UP; - color = "green"; + color = Color.GREEN; } else if (diff < 0.0f) { symbol = SYMBOL_DOWN; - color = "red"; + color = Color.RED; } else { symbol = SYMBOL_NEUTRAL; - color = "grey"; + color = Color.GRAY; } - return String.format( - "%s %s", - color, symbol, formatValue(diff)); + + int start = text.length(); + text.append(symbol); + text.setSpan(new ForegroundColorSpan(color), start, text.length(), + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + + text.append(' '); + + start = text.length(); + text.append(formatValue(diff)); + text.setSpan(new ForegroundColorSpan(Color.GRAY), start, text.length(), + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + text.setSpan(new RelativeSizeSpan(0.8f), start, text.length(), + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } @Override diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java index e00cf21f..7ea9d921 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java @@ -23,6 +23,7 @@ import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v4.content.ContextCompat; +import android.text.SpannableStringBuilder; import android.util.TypedValue; import android.view.Gravity; import android.view.View; @@ -158,7 +159,7 @@ public abstract class MeasurementView extends TableLayout { public abstract void updatePreferences(SharedPreferences preferences); public abstract String getValueAsString(); - public String getDiffValue() { return ""; } + public void appendDiffValue(SpannableStringBuilder builder) { } public Drawable getIcon() { return iconView.getDrawable(); } protected boolean isEditable() {