From fd8a8062368c9f3d8b1329284131715c772df8a6 Mon Sep 17 00:00:00 2001 From: Christophe Beyls Date: Sun, 3 Jan 2016 22:50:11 +0100 Subject: [PATCH] Enhanced list item layouts and make them RTL-compatible. --- .../fosdem/adapters/EventsAdapter.java | 27 +++----- .../fragments/TrackScheduleListFragment.java | 50 ++++++-------- app/src/main/res/layout/item_event.xml | 28 +++++--- .../main/res/layout/item_schedule_event.xml | 68 ++++++++++++++----- app/src/main/res/values/colors.xml | 2 - app/src/main/res/values/dimens.xml | 3 - 6 files changed, 97 insertions(+), 81 deletions(-) diff --git a/app/src/main/java/be/digitalia/fosdem/adapters/EventsAdapter.java b/app/src/main/java/be/digitalia/fosdem/adapters/EventsAdapter.java index e6fb81c..e82ba7c 100644 --- a/app/src/main/java/be/digitalia/fosdem/adapters/EventsAdapter.java +++ b/app/src/main/java/be/digitalia/fosdem/adapters/EventsAdapter.java @@ -3,10 +3,8 @@ package be.digitalia.fosdem.adapters; import android.content.Context; import android.database.Cursor; import android.support.v4.widget.CursorAdapter; -import android.text.Spannable; -import android.text.SpannableString; +import android.support.v4.widget.TextViewCompat; import android.text.TextUtils; -import android.text.style.AbsoluteSizeSpan; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -24,7 +22,6 @@ public class EventsAdapter extends CursorAdapter { private final LayoutInflater inflater; private final DateFormat timeDateFormat; - private final int titleTextSize; private final boolean showDay; public EventsAdapter(Context context) { @@ -35,7 +32,6 @@ public class EventsAdapter extends CursorAdapter { super(context, null, 0); inflater = LayoutInflater.from(context); timeDateFormat = DateUtils.getTimeDateFormat(context); - titleTextSize = context.getResources().getDimensionPixelSize(R.dimen.list_item_title_text_size); this.showDay = showDay; } @@ -50,7 +46,7 @@ public class EventsAdapter extends CursorAdapter { ViewHolder holder = new ViewHolder(); holder.title = (TextView) view.findViewById(R.id.title); - holder.titleSizeSpan = new AbsoluteSizeSpan(titleTextSize); + holder.persons = (TextView) view.findViewById(R.id.persons); holder.trackName = (TextView) view.findViewById(R.id.track_name); holder.details = (TextView) view.findViewById(R.id.details); view.setTag(holder); @@ -64,19 +60,12 @@ public class EventsAdapter extends CursorAdapter { Event event = DatabaseManager.toEvent(cursor, holder.event); holder.event = event; - String eventTitle = event.getTitle(); - SpannableString spannableString; - String personsSummary = event.getPersonsSummary(); - if (TextUtils.isEmpty(personsSummary)) { - spannableString = new SpannableString(eventTitle); - } else { - spannableString = new SpannableString(String.format("%1$s\n%2$s", eventTitle, event.getPersonsSummary())); - } - spannableString.setSpan(holder.titleSizeSpan, 0, eventTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - holder.title.setText(spannableString); + holder.title.setText(event.getTitle()); int bookmarkDrawable = DatabaseManager.toBookmarkStatus(cursor) ? R.drawable.ic_bookmark_grey600_24dp : 0; - holder.title.setCompoundDrawablesWithIntrinsicBounds(0, 0, bookmarkDrawable, 0); - + TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(holder.title, 0, 0, bookmarkDrawable, 0); + String personsSummary = event.getPersonsSummary(); + holder.persons.setText(personsSummary); + holder.persons.setVisibility(TextUtils.isEmpty(personsSummary) ? View.GONE : View.VISIBLE); holder.trackName.setText(event.getTrack().getName()); Date startTime = event.getStartTime(); @@ -94,7 +83,7 @@ public class EventsAdapter extends CursorAdapter { private static class ViewHolder { TextView title; - AbsoluteSizeSpan titleSizeSpan; + TextView persons; TextView trackName; TextView details; Event event; diff --git a/app/src/main/java/be/digitalia/fosdem/fragments/TrackScheduleListFragment.java b/app/src/main/java/be/digitalia/fosdem/fragments/TrackScheduleListFragment.java index 5823e60..b366b10 100644 --- a/app/src/main/java/be/digitalia/fosdem/fragments/TrackScheduleListFragment.java +++ b/app/src/main/java/be/digitalia/fosdem/fragments/TrackScheduleListFragment.java @@ -3,19 +3,16 @@ package be.digitalia.fosdem.fragments; import android.app.Activity; import android.content.Context; import android.content.res.Resources; +import android.content.res.TypedArray; import android.database.Cursor; -import android.graphics.Typeface; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; import android.support.v4.widget.CursorAdapter; -import android.text.Spannable; -import android.text.SpannableString; +import android.support.v4.widget.TextViewCompat; import android.text.TextUtils; -import android.text.style.AbsoluteSizeSpan; -import android.text.style.StyleSpan; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -240,13 +237,15 @@ public class TrackScheduleListFragment extends SmoothListFragment implements Han private static class TrackScheduleAdapter extends CursorAdapter { + private static final int[] PRIMARY_TEXT_COLORS + = new int[]{android.R.attr.textColorPrimary, android.R.attr.textColorPrimaryInverse}; + private final LayoutInflater inflater; private final DateFormat timeDateFormat; private final int timeBackgroundColor; private final int timeForegroundColor; private final int timeRunningBackgroundColor; private final int timeRunningForegroundColor; - private final int titleTextSize; private long currentTime = -1L; public TrackScheduleAdapter(Context context) { @@ -255,10 +254,12 @@ public class TrackScheduleListFragment extends SmoothListFragment implements Han timeDateFormat = DateUtils.getTimeDateFormat(context); Resources res = context.getResources(); timeBackgroundColor = res.getColor(R.color.schedule_time_background); - timeForegroundColor = res.getColor(R.color.schedule_time_foreground); timeRunningBackgroundColor = res.getColor(R.color.schedule_time_running_background); - timeRunningForegroundColor = res.getColor(R.color.schedule_time_running_foreground); - titleTextSize = res.getDimensionPixelSize(R.dimen.list_item_title_text_size); + + TypedArray a = context.getTheme().obtainStyledAttributes(PRIMARY_TEXT_COLORS); + timeForegroundColor = a.getColor(0, 0); + timeRunningForegroundColor = a.getColor(1, 0); + a.recycle(); } public void setCurrentTime(long time) { @@ -279,9 +280,9 @@ public class TrackScheduleListFragment extends SmoothListFragment implements Han ViewHolder holder = new ViewHolder(); holder.time = (TextView) view.findViewById(R.id.time); - holder.text = (TextView) view.findViewById(R.id.text); - holder.titleSizeSpan = new AbsoluteSizeSpan(titleTextSize); - holder.boldStyleSpan = new StyleSpan(Typeface.BOLD); + holder.title = (TextView) view.findViewById(R.id.title); + holder.persons = (TextView) view.findViewById(R.id.persons); + holder.room = (TextView) view.findViewById(R.id.room); view.setTag(holder); return view; @@ -304,27 +305,20 @@ public class TrackScheduleListFragment extends SmoothListFragment implements Han holder.time.setTextColor(timeForegroundColor); } - SpannableString spannableString; - String eventTitle = event.getTitle(); - String personsSummary = event.getPersonsSummary(); - if (TextUtils.isEmpty(personsSummary)) { - spannableString = new SpannableString(String.format("%1$s\n%2$s", eventTitle, event.getRoomName())); - } else { - spannableString = new SpannableString(String.format("%1$s\n%2$s\n%3$s", eventTitle, personsSummary, event.getRoomName())); - } - spannableString.setSpan(holder.titleSizeSpan, 0, eventTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - spannableString.setSpan(holder.boldStyleSpan, 0, eventTitle.length() + personsSummary.length() + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - - holder.text.setText(spannableString); + holder.title.setText(event.getTitle()); int bookmarkDrawable = DatabaseManager.toBookmarkStatus(cursor) ? R.drawable.ic_bookmark_grey600_24dp : 0; - holder.text.setCompoundDrawablesWithIntrinsicBounds(0, 0, bookmarkDrawable, 0); + TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(holder.title, 0, 0, bookmarkDrawable, 0); + String personsSummary = event.getPersonsSummary(); + holder.persons.setText(personsSummary); + holder.persons.setVisibility(TextUtils.isEmpty(personsSummary) ? View.GONE : View.VISIBLE); + holder.room.setText(event.getRoomName()); } private static class ViewHolder { TextView time; - TextView text; - AbsoluteSizeSpan titleSizeSpan; - StyleSpan boldStyleSpan; + TextView title; + TextView persons; + TextView room; Event event; } } diff --git a/app/src/main/res/layout/item_event.xml b/app/src/main/res/layout/item_event.xml index d75b5f2..c7f6893 100644 --- a/app/src/main/res/layout/item_event.xml +++ b/app/src/main/res/layout/item_event.xml @@ -5,34 +5,40 @@ android:layout_height="wrap_content" android:background="?attr/activatedBackgroundIndicator" android:orientation="vertical" - android:padding="@dimen/list_item_padding"> + android:paddingBottom="@dimen/list_item_padding" + android:paddingLeft="?attr/listPreferredItemPaddingLeft" + android:paddingRight="?attr/listPreferredItemPaddingRight" + android:paddingTop="@dimen/list_item_padding"> + android:textAppearance="@style/TextAppearance.AppCompat.Title" + android:textSize="@dimen/abc_text_size_medium_material" + tools:text="Welcome to FOSDEM 2015"/> + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_schedule_event.xml b/app/src/main/res/layout/item_schedule_event.xml index df3f9a0..b1d9229 100644 --- a/app/src/main/res/layout/item_schedule_event.xml +++ b/app/src/main/res/layout/item_schedule_event.xml @@ -1,33 +1,65 @@ - + + android:paddingTop="@dimen/list_item_padding" + android:textAppearance="@style/TextAppearance.AppCompat.Title" + android:textSize="@dimen/abc_text_size_medium_material" + tools:text="Welcome to FOSDEM 2015"/> - \ No newline at end of file + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index e74f337..2738f36 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -9,8 +9,6 @@ #eaeaea #0c000000 #29000000 - #000 #d6000000 - #fff \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index fa4406e..7eff4d7 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -8,9 +8,6 @@ 48dp 32dp 8dp - 18sp - 16sp - 14sp 16dp 8dp 360dp