diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 7f04a0c..737904e 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -20,6 +20,7 @@ android:layout_height="match_parent" custom:tableView_columnCount="4" custom:tableView_headerColor="@color/primary" + custom:sortIconPosition="right" custom:tableView_headerElevation="10"/> diff --git a/tableview/src/main/java/de/codecrafters/tableview/SortableTableHeaderView.java b/tableview/src/main/java/de/codecrafters/tableview/SortableTableHeaderView.java index 5ce9909..4082480 100644 --- a/tableview/src/main/java/de/codecrafters/tableview/SortableTableHeaderView.java +++ b/tableview/src/main/java/de/codecrafters/tableview/SortableTableHeaderView.java @@ -27,6 +27,7 @@ class SortableTableHeaderView extends TableHeaderView { private SortStateViewProvider sortStateViewProvider = SortStateViewProviders.darkArrows(); + private int iconPosition = SortableTableView.SORT_ICON_LEFT; /** * Creates a new SortableTableHeaderView. @@ -125,6 +126,10 @@ public TableHeaderAdapter getAdapter() { return super.getAdapter(); } + public void setIconPosition(int iconPosition) { + this.iconPosition = iconPosition; + } + private class SortStateArrayAdapter extends TableHeaderAdapter { private final TableHeaderAdapter delegate; @@ -178,7 +183,11 @@ public int getCount() { public View getHeaderView(final int columnIndex, final ViewGroup parentView) { // create column header layout - final LinearLayout headerLayout = (LinearLayout) delegate.getLayoutInflater().inflate(R.layout.sortable_header, parentView, false); + // check if icon position is left or right + final LinearLayout headerLayout = (LinearLayout) + (iconPosition == 0 ? + delegate.getLayoutInflater().inflate(R.layout.sortable_header, parentView, false) + : delegate.getLayoutInflater().inflate(R.layout.sortable_header_right, parentView, false)); headerLayout.setOnClickListener(new InternalHeaderClickListener(columnIndex, getHeaderClickListeners())); // create header diff --git a/tableview/src/main/java/de/codecrafters/tableview/SortableTableView.java b/tableview/src/main/java/de/codecrafters/tableview/SortableTableView.java index 789c44c..39b1d3d 100644 --- a/tableview/src/main/java/de/codecrafters/tableview/SortableTableView.java +++ b/tableview/src/main/java/de/codecrafters/tableview/SortableTableView.java @@ -1,6 +1,7 @@ package de.codecrafters.tableview; import android.content.Context; +import android.content.res.TypedArray; import android.database.DataSetObserver; import android.os.Bundle; import android.os.Parcelable; @@ -36,6 +37,9 @@ public class SortableTableView extends TableView { private final SortableTableHeaderView sortableTableHeaderView; private final SortingController sortingController; + public static final int SORT_ICON_LEFT = 0; + public static final int SORT_ICON_RIGHT = 1; + private int sortIconPosition; /** * Creates a new SortableTableView with the given context.\n @@ -67,11 +71,11 @@ public SortableTableView(final Context context, final AttributeSet attributes) { */ public SortableTableView(final Context context, final AttributeSet attributes, final int styleAttributes) { super(context, attributes, styleAttributes); - + setCustomAttributes(attributes); sortableTableHeaderView = new SortableTableHeaderView(context); sortableTableHeaderView.setBackgroundColor(0xFFCCCCCC); + sortableTableHeaderView.setIconPosition(sortIconPosition); setHeaderView(sortableTableHeaderView); - sortingController = new SortingController(); sortableTableHeaderView.addHeaderClickListener(sortingController); } @@ -176,6 +180,12 @@ protected void onRestoreInstanceState(final Parcelable state) { } } + private void setCustomAttributes(AttributeSet attributes) { + final TypedArray styledAttributes = getContext().obtainStyledAttributes(attributes, R.styleable.SortableTableView); + sortIconPosition = styledAttributes.getInt(R.styleable.SortableTableView_sortIconPosition, SORT_ICON_LEFT); + } + + /** * A controller managing all actions that are in the context of sorting. * diff --git a/tableview/src/main/res/layout/sortable_header_right.xml b/tableview/src/main/res/layout/sortable_header_right.xml new file mode 100644 index 0000000..5c0db8f --- /dev/null +++ b/tableview/src/main/res/layout/sortable_header_right.xml @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git a/tableview/src/main/res/values/attributes.xml b/tableview/src/main/res/values/attributes.xml index 305aed1..8cbce0c 100644 --- a/tableview/src/main/res/values/attributes.xml +++ b/tableview/src/main/res/values/attributes.xml @@ -5,5 +5,12 @@ + + + + + + +