TBR: java/projects/todos: SwipeableCardViewHolder and SwipeableTouchHelperCallback
Use these abstract classes to eliminate a lot of the duplicate code
surrounding our RecyclerViews and swipe handlers.
We also no longer draw to the canvas, instead relying on xml-based
layouts to be visible/gone'd by the program.
Change-Id: I8011c28d2b7370800cacfbbe2663de23f6580da8
diff --git a/projects/todos/app/src/main/java/io/v/todos/MainActivity.java b/projects/todos/app/src/main/java/io/v/todos/MainActivity.java
index a92793e..e2229b8 100644
--- a/projects/todos/app/src/main/java/io/v/todos/MainActivity.java
+++ b/projects/todos/app/src/main/java/io/v/todos/MainActivity.java
@@ -7,10 +7,6 @@
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.graphics.Paint;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.RecyclerView;
@@ -89,68 +85,7 @@
recyclerView.setAdapter(adapter);
// TODO(alexfandrianto): Very much copy-pasted between MainActivity and TodoListActivity.
- new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(
- ItemTouchHelper.UP | ItemTouchHelper.DOWN,
- ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
- private Paint paint = new Paint();
- private Bitmap deleteIcon = BitmapFactory.decodeResource(
- getResources(), android.R.drawable.ic_input_delete);
- private Bitmap doneIcon = BitmapFactory.decodeResource(
- getResources(), android.R.drawable.checkbox_on_background);
-
- @Override
- public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
- // TODO(alexfandrianto): Refactor further. Is there another way to do this?
- if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
- // Get RecyclerView item from the ViewHolder
- View itemView = viewHolder.itemView;
-
- if (dX > 0) {
- /* Set your color for positive displacement */
- paint.setColor(0xFF00FF00);
-
- // Draw Rect with varying right side, equal to displacement dX
- c.drawRect((float) itemView.getLeft(), (float) itemView.getTop(), dX,
- (float) itemView.getBottom(), paint);
-
- c.drawBitmap(doneIcon,
- (float) itemView.getLeft() + 32,
- (float) itemView.getTop() + ((float) itemView.getBottom() - (float) itemView.getTop() - doneIcon.getHeight())/2,
- paint);
- } else {
- /* Set your color for negative displacement */
- paint.setColor(0xFFFF0000);
-
- // Draw Rect with varying left side, equal to the item's right side plus negative displacement dX
- c.drawRect((float) itemView.getRight() + dX, (float) itemView.getTop(),
- (float) itemView.getRight(), (float) itemView.getBottom(), paint);
-
-
- //Set the image icon for Left swipe
- c.drawBitmap(deleteIcon,
- (float) itemView.getRight() - 32 - deleteIcon.getWidth(),
- (float) itemView.getTop() + ((float) itemView.getBottom() - (float) itemView.getTop() - deleteIcon.getHeight())/2,
- paint);
- }
-
- super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
- }
- }
-
- @Override
- public boolean onMove(final RecyclerView recyclerView,
- final RecyclerView.ViewHolder viewHolder,
- final RecyclerView.ViewHolder target) {
-
-
- /*editListStructure(l -> l.add(target.getAdapterPosition(),
- l.remove(viewHolder.getAdapterPosition())));*/
-
- // TODO(alexfandrianto): Actually, I really doubt that we want to do this. It's super complex..
- Log.d(SNACKOOS, "Moving is hard.");
- return false;
- }
-
+ new ItemTouchHelper(new SwipeableTouchHelperCallback() {
@Override
public void onSwiped(final RecyclerView.ViewHolder viewHolder, final int direction) {
if (direction == ItemTouchHelper.RIGHT) {
diff --git a/projects/todos/app/src/main/java/io/v/todos/SwipeableCardViewHolder.java b/projects/todos/app/src/main/java/io/v/todos/SwipeableCardViewHolder.java
new file mode 100644
index 0000000..a600579
--- /dev/null
+++ b/projects/todos/app/src/main/java/io/v/todos/SwipeableCardViewHolder.java
@@ -0,0 +1,32 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package io.v.todos;
+
+import android.support.v7.widget.CardView;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+
+public abstract class SwipeableCardViewHolder extends RecyclerView.ViewHolder {
+ private CardView cardView;
+ private View swipeLeftView;
+ private View swipeRightView;
+
+ public SwipeableCardViewHolder(View itemView) {
+ super(itemView);
+
+ cardView = (CardView)itemView.findViewById(R.id.card);
+ swipeLeftView = itemView.findViewById(R.id.swipe_left);
+ swipeRightView = itemView.findViewById(R.id.swipe_right);
+ }
+
+ public CardView getCardView() {
+ return cardView;
+ }
+
+ public void decideBackground(float dX) {
+ swipeLeftView.setVisibility(dX < 0 ? View.VISIBLE : View.GONE);
+ swipeRightView.setVisibility(dX > 0 ? View.VISIBLE : View.GONE);
+ }
+}
diff --git a/projects/todos/app/src/main/java/io/v/todos/SwipeableTouchHelperCallback.java b/projects/todos/app/src/main/java/io/v/todos/SwipeableTouchHelperCallback.java
new file mode 100644
index 0000000..58856c3
--- /dev/null
+++ b/projects/todos/app/src/main/java/io/v/todos/SwipeableTouchHelperCallback.java
@@ -0,0 +1,62 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package io.v.todos;
+
+import android.graphics.Canvas;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.helper.ItemTouchHelper;
+
+/**
+ * SwipeableTouchHelperCallback wraps the SimpleCallback for SwipeableCardViewHolders.
+ * Subclasses should only override the onSwiped method since onMove is disabled.
+ */
+public abstract class SwipeableTouchHelperCallback extends ItemTouchHelper.SimpleCallback {
+ SwipeableTouchHelperCallback() {
+ super(ItemTouchHelper.UP | ItemTouchHelper.DOWN,
+ ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);
+ }
+
+ @Override
+ public boolean onMove(final RecyclerView recyclerView,
+ final RecyclerView.ViewHolder viewHolder,
+ final RecyclerView.ViewHolder target) {
+ return false;
+ }
+
+ @Override
+ public boolean isLongPressDragEnabled() {
+ return false;
+ }
+
+ @Override
+ public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
+ SwipeableCardViewHolder holder = (SwipeableCardViewHolder)viewHolder;
+ holder.decideBackground(0);
+ getDefaultUIUtil().clearView(holder.getCardView());
+ }
+
+ @Override
+ public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
+ if (viewHolder != null) {
+ getDefaultUIUtil().onSelected(((SwipeableCardViewHolder) viewHolder).getCardView());
+ }
+ }
+
+ public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
+ float dX, float dY, int actionState, boolean isCurrentlyActive) {
+ SwipeableCardViewHolder holder = (SwipeableCardViewHolder)viewHolder;
+ holder.decideBackground(dX);
+ getDefaultUIUtil().onDraw(c, recyclerView, holder.getCardView(), dX, dY, actionState,
+ isCurrentlyActive);
+ }
+
+ public void onChildDrawOver(Canvas c, RecyclerView recyclerView,
+ RecyclerView.ViewHolder viewHolder, float dX, float dY,
+ int actionState, boolean isCurrentlyActive) {
+ SwipeableCardViewHolder holder = (SwipeableCardViewHolder)viewHolder;
+ getDefaultUIUtil().onDrawOver(c, recyclerView, holder.getCardView(), dX, dY, actionState,
+ isCurrentlyActive);
+ }
+}
diff --git a/projects/todos/app/src/main/java/io/v/todos/TaskViewHolder.java b/projects/todos/app/src/main/java/io/v/todos/TaskViewHolder.java
index 632441f..b4f4ace 100644
--- a/projects/todos/app/src/main/java/io/v/todos/TaskViewHolder.java
+++ b/projects/todos/app/src/main/java/io/v/todos/TaskViewHolder.java
@@ -4,8 +4,6 @@
package io.v.todos;
-import android.support.v7.widget.CardView;
-import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
@@ -13,34 +11,29 @@
/**
* @author alexfandrianto
*/
-public class TaskViewHolder extends RecyclerView.ViewHolder{
- private CardView myView;
+public class TaskViewHolder extends SwipeableCardViewHolder {
private boolean showDone = true;
public TaskViewHolder(View itemView) {
super(itemView);
-
- myView = (CardView)itemView;
}
public void bindTask(Task task, View.OnClickListener listener) {
- // TODO(alexfandrianto): Now might be a good time to set data in myView.
-
- final ImageView doneMark = (ImageView)myView.findViewById(R.id.task_done);
+ final ImageView doneMark = (ImageView) itemView.findViewById(R.id.task_done);
doneMark.setVisibility(task.getDone() ? View.VISIBLE : View.GONE);
- final TextView name=(TextView)myView.findViewById(R.id.task_text);
+ final TextView name=(TextView) itemView.findViewById(R.id.task_text);
name.setText(task.getText());
- final TextView created=(TextView)myView.findViewById(R.id.task_time);
+ final TextView created=(TextView) itemView.findViewById(R.id.task_time);
created.setText(computeCreated(task));
- myView.setCardBackgroundColor(task.getDone() ? 0xFFCCCCCC : 0xFFFFFFFF);
+ getCardView().setCardBackgroundColor(task.getDone() ? 0xFFCCCCCC : 0xFFFFFFFF);
- myView.setTag(task.getKey());
- myView.setOnClickListener(listener);
+ itemView.setTag(task.getKey());
+ itemView.setOnClickListener(listener);
- myView.setVisibility(!showDone && task.getDone() ? View.GONE : View.VISIBLE);
+ itemView.setVisibility(!showDone && task.getDone() ? View.GONE : View.VISIBLE);
}
private String computeCreated(Task task) {
diff --git a/projects/todos/app/src/main/java/io/v/todos/TodoListActivity.java b/projects/todos/app/src/main/java/io/v/todos/TodoListActivity.java
index 2fc7086..d049da2 100644
--- a/projects/todos/app/src/main/java/io/v/todos/TodoListActivity.java
+++ b/projects/todos/app/src/main/java/io/v/todos/TodoListActivity.java
@@ -7,10 +7,6 @@
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.graphics.Paint;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.RecyclerView;
@@ -89,69 +85,7 @@
RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recycler);
recyclerView.setAdapter(adapter);
- new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(
- ItemTouchHelper.UP | ItemTouchHelper.DOWN,
- ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
-
- private Paint paint = new Paint();
- private Bitmap deleteIcon = BitmapFactory.decodeResource(
- getResources(), android.R.drawable.ic_input_delete);
- private Bitmap doneIcon = BitmapFactory.decodeResource(
- getResources(), android.R.drawable.checkbox_on_background);
-
- @Override
- public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
- // TODO(alexfandrianto): Refactor further. Is there another way to do this?
- if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
- // Get RecyclerView item from the ViewHolder
- View itemView = viewHolder.itemView;
-
- if (dX > 0) {
- /* Set your color for positive displacement */
- paint.setColor(0xFF00FF00);
-
- // Draw Rect with varying right side, equal to displacement dX
- c.drawRect((float) itemView.getLeft(), (float) itemView.getTop(), dX,
- (float) itemView.getBottom(), paint);
-
- c.drawBitmap(doneIcon,
- (float) itemView.getLeft() + 32,
- (float) itemView.getTop() + ((float) itemView.getBottom() - (float) itemView.getTop() - doneIcon.getHeight())/2,
- paint);
- } else {
- /* Set your color for negative displacement */
- paint.setColor(0xFFFF0000);
-
- // Draw Rect with varying left side, equal to the item's right side plus negative displacement dX
- c.drawRect((float) itemView.getRight() + dX, (float) itemView.getTop(),
- (float) itemView.getRight(), (float) itemView.getBottom(), paint);
-
-
- //Set the image icon for Left swipe
- c.drawBitmap(deleteIcon,
- (float) itemView.getRight() - 32 - deleteIcon.getWidth(),
- (float) itemView.getTop() + ((float) itemView.getBottom() - (float) itemView.getTop() - deleteIcon.getHeight())/2,
- paint);
- }
-
- super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
- }
- }
-
- @Override
- public boolean onMove(final RecyclerView recyclerView,
- final RecyclerView.ViewHolder viewHolder,
- final RecyclerView.ViewHolder target) {
-
-
- /*editListStructure(l -> l.add(target.getAdapterPosition(),
- l.remove(viewHolder.getAdapterPosition())));*/
-
- // TODO(alexfandrianto): Actually, I really doubt that we want to do this. It's super complex..
- Log.d(SNACKOO_LISTS, "Moving is hard.");
- return false;
- }
-
+ new ItemTouchHelper(new SwipeableTouchHelperCallback() {
@Override
public void onSwiped(final RecyclerView.ViewHolder viewHolder, final int direction) {
if (direction == ItemTouchHelper.RIGHT) {
diff --git a/projects/todos/app/src/main/java/io/v/todos/TodoListViewHolder.java b/projects/todos/app/src/main/java/io/v/todos/TodoListViewHolder.java
index f0d36c4..f99beb2 100644
--- a/projects/todos/app/src/main/java/io/v/todos/TodoListViewHolder.java
+++ b/projects/todos/app/src/main/java/io/v/todos/TodoListViewHolder.java
@@ -4,39 +4,31 @@
package io.v.todos;
-import android.support.v7.widget.CardView;
-import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
/**
* @author alexfandrianto
*/
-public class TodoListViewHolder extends RecyclerView.ViewHolder {
- private CardView myView;
-
+public class TodoListViewHolder extends SwipeableCardViewHolder {
public TodoListViewHolder(View itemView) {
super(itemView);
-
- myView = (CardView)itemView;
}
public void bindTodoList(TodoList todoList, View.OnClickListener listener) {
- // TODO(alexfandrianto): Now might be a good time to set data in myView.
-
- final TextView name=(TextView)myView.findViewById(R.id.todo_list_name);
+ final TextView name=(TextView) itemView.findViewById(R.id.todo_list_name);
name.setText(todoList.getName());
- final TextView completedStatus=(TextView)myView.findViewById(R.id.todo_list_completed);
+ final TextView completedStatus=(TextView) itemView.findViewById(R.id.todo_list_completed);
completedStatus.setText(computeCompleted(todoList));
- final TextView timeAgo=(TextView)myView.findViewById(R.id.todo_list_time);
+ final TextView timeAgo=(TextView) itemView.findViewById(R.id.todo_list_time);
timeAgo.setText(computeTimeAgo(todoList));
- myView.setCardBackgroundColor(todoList.getDone() ? 0xFFCCCCCC : 0xFFFFFFFF);
+ getCardView().setCardBackgroundColor(todoList.getDone() ? 0xFFCCCCCC : 0xFFFFFFFF);
- myView.setTag(todoList.getKey());
- myView.setOnClickListener(listener);
+ itemView.setTag(todoList.getKey());
+ itemView.setOnClickListener(listener);
}
private String computeTimeAgo(TodoList todoList) {
diff --git a/projects/todos/app/src/main/res/layout/task_row.xml b/projects/todos/app/src/main/res/layout/task_row.xml
index 8fedb85..8d95a3a 100644
--- a/projects/todos/app/src/main/res/layout/task_row.xml
+++ b/projects/todos/app/src/main/res/layout/task_row.xml
@@ -1,51 +1,81 @@
<?xml version="1.0" encoding="utf-8"?>
-<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- xmlns:card_view="http://schemas.android.com/apk/res-auto"
- android:layout_marginBottom="1dp"
- card_view:cardElevation="1dp"
- card_view:cardBackgroundColor="#DDDDFF"
- card_view:cardCornerRadius="5dp">
-
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
+ android:layout_height="match_parent">
+ <LinearLayout
+ android:id="@+id/swipe_right"
android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- <ImageView android:id="@+id/task_done"
+ android:layout_height="match_parent"
+ android:background="#00FF00"
+ android:visibility="gone">
+ <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_weight = "0"
android:src="@android:drawable/checkbox_on_background"
android:layout_gravity="center_vertical"
- android:layout_margin="@dimen/fab_margin"
- android:visibility="gone"/>
+ android:layout_margin="@dimen/fab_margin"/>
+ </LinearLayout>
+ <LinearLayout
+ android:id="@+id/swipe_left"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="#FF0000"
+ android:gravity="right"
+ android:visibility="gone">
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@android:drawable/ic_input_delete"
+ android:layout_gravity="center_vertical"
+ android:layout_margin="@dimen/fab_margin"/>
+ </LinearLayout>
+ <android.support.v7.widget.CardView android:id="@+id/card"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ xmlns:card_view="http://schemas.android.com/apk/res-auto"
+ android:layout_marginBottom="1dp"
+ card_view:cardElevation="1dp"
+ card_view:cardBackgroundColor="#DDDDFF">
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_weight = "1"
+ <LinearLayout
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
android:layout_height="wrap_content">
- <TextView android:id="@+id/task_text"
- android:layout_width="fill_parent"
+ <ImageView android:id="@+id/task_done"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_weight = "1"
- android:gravity="center_vertical"
- android:textStyle="bold"
- android:textSize="22sp"
- android:textColor="#000000"
- android:layout_margin="5dp" />
+ android:layout_weight = "0"
+ android:src="@android:drawable/checkbox_on_background"
+ android:layout_gravity="center_vertical"
+ android:layout_margin="@dimen/fab_margin"
+ android:visibility="gone"/>
- <TextView android:id="@+id/task_time"
+ <LinearLayout
+ android:orientation="vertical"
android:layout_width="fill_parent"
- android:layout_height="wrap_content"
android:layout_weight = "1"
- android:gravity="center_vertical"
- android:textSize="12sp"
- android:textColor="#333333"
- android:layout_margin="5dp" />
+ android:layout_height="wrap_content">
+
+ <TextView android:id="@+id/task_text"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight = "1"
+ android:gravity="center_vertical"
+ android:textStyle="bold"
+ android:textSize="22sp"
+ android:textColor="#000000"
+ android:layout_margin="5dp" />
+
+ <TextView android:id="@+id/task_time"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight = "1"
+ android:gravity="center_vertical"
+ android:textSize="12sp"
+ android:textColor="#333333"
+ android:layout_margin="5dp" />
+ </LinearLayout>
</LinearLayout>
- </LinearLayout>
-</android.support.v7.widget.CardView>
\ No newline at end of file
+ </android.support.v7.widget.CardView>
+</FrameLayout>
\ No newline at end of file
diff --git a/projects/todos/app/src/main/res/layout/todo_list_row.xml b/projects/todos/app/src/main/res/layout/todo_list_row.xml
index f69ddfb..9006102 100644
--- a/projects/todos/app/src/main/res/layout/todo_list_row.xml
+++ b/projects/todos/app/src/main/res/layout/todo_list_row.xml
@@ -1,51 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
-<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- xmlns:card_view="http://schemas.android.com/apk/res-auto"
- android:layout_marginBottom="1dp"
- card_view:cardElevation="1dp"
- card_view:cardBackgroundColor="#DDDDFF"
- card_view:cardCornerRadius="5dp">
-
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
+ android:layout_height="match_parent">
+ <LinearLayout
+ android:id="@+id/swipe_right"
android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- <TextView android:id="@+id/todo_list_name"
- android:layout_width="fill_parent"
- android:layout_weight = "1"
+ android:layout_height="match_parent"
+ android:background="#00FF00"
+ android:visibility="gone">
+ <ImageView
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:gravity="center_vertical"
- android:textStyle="bold"
- android:textSize="22sp"
- android:textColor="#000000"
- android:layout_margin="5dp" />
+ android:src="@android:drawable/checkbox_on_background"
+ android:layout_gravity="center_vertical"
+ android:layout_margin="@dimen/fab_margin"/>
+ </LinearLayout>
+ <LinearLayout
+ android:id="@+id/swipe_left"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="#FF0000"
+ android:gravity="right"
+ android:visibility="gone">
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@android:drawable/ic_input_delete"
+ android:layout_gravity="center_vertical"
+ android:layout_margin="@dimen/fab_margin"/>
+ </LinearLayout>
+
+ <android.support.v7.widget.CardView android:id="@+id/card"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ xmlns:card_view="http://schemas.android.com/apk/res-auto"
+ android:layout_marginBottom="1dp"
+ card_view:cardElevation="1dp"
+ card_view:cardBackgroundColor="#DDDDFF"
+ card_view:cardCornerRadius="5dp">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
+ android:orientation="vertical"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight = "1">
+ android:layout_height="wrap_content">
- <TextView android:id="@+id/todo_list_completed"
- android:layout_width="wrap_content"
+ <TextView android:id="@+id/todo_list_name"
+ android:layout_width="fill_parent"
android:layout_weight = "1"
- android:layout_height="fill_parent"
+ android:layout_height="wrap_content"
android:gravity="center_vertical"
- android:textSize="12sp"
- android:textColor="#333333"
+ android:textStyle="bold"
+ android:textSize="22sp"
+ android:textColor="#000000"
android:layout_margin="5dp" />
- <TextView android:id="@+id/todo_list_time"
- android:layout_width="wrap_content"
- android:layout_weight = "1"
- android:layout_height="fill_parent"
- android:gravity="center_vertical"
- android:textSize="12sp"
- android:textColor="#333333"
- android:layout_margin="5dp" />
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight = "1">
+
+ <TextView android:id="@+id/todo_list_completed"
+ android:layout_width="wrap_content"
+ android:layout_weight = "1"
+ android:layout_height="fill_parent"
+ android:gravity="center_vertical"
+ android:textSize="12sp"
+ android:textColor="#333333"
+ android:layout_margin="5dp" />
+
+ <TextView android:id="@+id/todo_list_time"
+ android:layout_width="wrap_content"
+ android:layout_weight = "1"
+ android:layout_height="fill_parent"
+ android:gravity="center_vertical"
+ android:textSize="12sp"
+ android:textColor="#333333"
+ android:layout_margin="5dp" />
+ </LinearLayout>
</LinearLayout>
- </LinearLayout>
-</android.support.v7.widget.CardView>
\ No newline at end of file
+ </android.support.v7.widget.CardView>
+</FrameLayout>
\ No newline at end of file