use of android.support.v7.widget.RecyclerView.LayoutParams in project MaterialDrawer by mikepenz.
the class ContainerDrawerItem method bindView.
@Override
public void bindView(ViewHolder viewHolder, List payloads) {
super.bindView(viewHolder, payloads);
Context ctx = viewHolder.itemView.getContext();
//set the identifier from the drawerItem here. It can be used to run tests
viewHolder.itemView.setId(hashCode());
//define how the divider should look like
viewHolder.view.setEnabled(false);
//make sure our view is not used in another parent
if (mView.getParent() != null) {
((ViewGroup) mView.getParent()).removeView(mView);
}
//set the height
if (mHeight != null) {
RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) viewHolder.view.getLayoutParams();
lp.height = mHeight.asPixel(ctx);
viewHolder.view.setLayoutParams(lp);
}
//make sure the header view is empty
((ViewGroup) viewHolder.view).removeAllViews();
int dividerHeight = 0;
if (mDivider) {
dividerHeight = 1;
}
View divider = new View(ctx);
divider.setMinimumHeight(dividerHeight);
divider.setBackgroundColor(UIUtils.getThemeColorFromAttrOrRes(ctx, R.attr.material_drawer_divider, R.color.material_drawer_divider));
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) UIUtils.convertDpToPixel(dividerHeight, ctx));
//depending on the position we add the view
if (mViewPosition == Position.TOP) {
((ViewGroup) viewHolder.view).addView(mView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.bottomMargin = ctx.getResources().getDimensionPixelSize(R.dimen.material_drawer_padding);
((ViewGroup) viewHolder.view).addView(divider, layoutParams);
} else if (mViewPosition == Position.BOTTOM) {
layoutParams.topMargin = ctx.getResources().getDimensionPixelSize(R.dimen.material_drawer_padding);
((ViewGroup) viewHolder.view).addView(divider, layoutParams);
((ViewGroup) viewHolder.view).addView(mView);
} else {
((ViewGroup) viewHolder.view).addView(mView);
}
//call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)
onPostBindView(this, viewHolder.itemView);
}
use of android.support.v7.widget.RecyclerView.LayoutParams in project twoway-view by lucasr.
the class BaseLayoutManager method layoutChild.
@Override
protected void layoutChild(View child, Direction direction) {
getLaneForChild(mTempLaneInfo, child, direction);
mLanes.getChildFrame(mChildFrame, getDecoratedMeasuredWidth(child), getDecoratedMeasuredHeight(child), mTempLaneInfo, direction);
final ItemEntry entry = cacheChildFrame(child, mChildFrame);
layoutDecorated(child, mChildFrame.left, mChildFrame.top, mChildFrame.right, mChildFrame.bottom);
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
if (!lp.isItemRemoved()) {
pushChildFrame(entry, mChildFrame, mTempLaneInfo.startLane, getLaneSpanForChild(child), direction);
}
}
use of android.support.v7.widget.RecyclerView.LayoutParams in project twoway-view by lucasr.
the class TwoWayLayoutManager method makeAndAddView.
private View makeAndAddView(int position, Direction direction, Recycler recycler) {
final View child = recycler.getViewForPosition(position);
final boolean isItemRemoved = ((LayoutParams) child.getLayoutParams()).isItemRemoved();
if (!isItemRemoved) {
addView(child, (direction == Direction.END ? -1 : 0));
}
setupChild(child, direction);
if (!isItemRemoved) {
updateLayoutEdgesFromNewChild(child);
}
return child;
}
use of android.support.v7.widget.RecyclerView.LayoutParams in project BaseRecyclerViewAdapterHelper by CymChad.
the class BaseQuickAdapter method addFooterView.
/**
* Add footer view to mFooterLayout and set footer view position in mFooterLayout.
* When index = -1 or index >= child count in mFooterLayout,
* the effect of this method is the same as that of {@link #addFooterView(View)}.
*
* @param footer
* @param index the position in mFooterLayout of this footer.
* When index = -1 or index >= child count in mFooterLayout,
* the effect of this method is the same as that of {@link #addFooterView(View)}.
*/
public int addFooterView(View footer, int index, int orientation) {
if (mFooterLayout == null) {
mFooterLayout = new LinearLayout(footer.getContext());
if (orientation == LinearLayout.VERTICAL) {
mFooterLayout.setOrientation(LinearLayout.VERTICAL);
mFooterLayout.setLayoutParams(new LayoutParams(MATCH_PARENT, WRAP_CONTENT));
} else {
mFooterLayout.setOrientation(LinearLayout.HORIZONTAL);
mFooterLayout.setLayoutParams(new LayoutParams(WRAP_CONTENT, MATCH_PARENT));
}
}
final int childCount = mFooterLayout.getChildCount();
if (index < 0 || index > childCount) {
index = childCount;
}
mFooterLayout.addView(footer, index);
if (mFooterLayout.getChildCount() == 1) {
int position = getFooterViewPosition();
if (position != -1) {
notifyItemInserted(position);
}
}
return index;
}
use of android.support.v7.widget.RecyclerView.LayoutParams in project Reader by TheKeeperOfPie.
the class FragmentThreadList method onCreateView.
@SuppressWarnings("ResourceType")
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
initialize();
view = bind(inflater.inflate(R.layout.fragment_thread_list, container, false));
setUpToolbar();
buttonExpandActions.setOnClickListener(v -> toggleLayoutActions());
behaviorButtonExpandActions = new ScrollAwareFloatingActionButtonBehavior(getActivity(), null, new ScrollAwareFloatingActionButtonBehavior.OnVisibilityChangeListener() {
@Override
public void onStartHideFromScroll() {
hideLayoutActions(0);
}
@Override
public void onEndHideFromScroll() {
buttonExpandActions.setImageResource(R.drawable.ic_unfold_more_white_24dp);
buttonExpandActions.setColorFilter(themer.getColorFilterAccent());
}
});
((CoordinatorLayout.LayoutParams) buttonExpandActions.getLayoutParams()).setBehavior(behaviorButtonExpandActions);
buttonJumpTop.setOnClickListener(v -> scrollToPositionWithOffset(0, 0));
buttonJumpTop.setOnLongClickListener(v -> {
Toast.makeText(getActivity(), getString(R.string.content_description_button_jump_top), Toast.LENGTH_SHORT).show();
return false;
});
buttonClearViewed.setOnClickListener(v -> controllerLinks.clearViewed(historian));
buttonClearViewed.setOnLongClickListener(v -> {
Toast.makeText(getActivity(), getString(R.string.content_description_button_clear_viewed), Toast.LENGTH_SHORT).show();
return false;
});
// Margin is included within shadow margin on pre-Lollipop, so remove all regular margin
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
((CoordinatorLayout.LayoutParams) buttonExpandActions.getLayoutParams()).setMargins(0, 0, 0, 0);
int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics());
LinearLayout.LayoutParams layoutParamsJumpTop = (LinearLayout.LayoutParams) buttonJumpTop.getLayoutParams();
layoutParamsJumpTop.setMargins(0, 0, 0, 0);
buttonJumpTop.setLayoutParams(layoutParamsJumpTop);
LinearLayout.LayoutParams layoutParamsClearViewed = (LinearLayout.LayoutParams) buttonClearViewed.getLayoutParams();
layoutParamsClearViewed.setMargins(0, 0, 0, 0);
buttonClearViewed.setLayoutParams(layoutParamsClearViewed);
RelativeLayout.LayoutParams layoutParamsActions = (RelativeLayout.LayoutParams) layoutActions.getLayoutParams();
layoutParamsActions.setMarginStart(margin);
layoutParamsActions.setMarginEnd(margin);
layoutActions.setLayoutParams(layoutParamsActions);
}
buttonExpandActions.setColorFilter(themer.getColorFilterAccent());
buttonJumpTop.setColorFilter(themer.getColorFilterAccent());
buttonClearViewed.setColorFilter(themer.getColorFilterAccent());
swipeRefreshThreadList.setOnRefreshListener(() -> {
controllerLinks.reload();
});
AdapterListener adapterListener = new AdapterListener() {
@Override
public void requestMore() {
controllerLinks.loadMore();
}
@Override
public void scrollAndCenter(int position, int height) {
UtilsAnimation.scrollToPositionWithCentering(position, recyclerThreadList, height, 0, 0, false);
}
@Override
public void hideToolbar() {
AppBarLayout.Behavior behaviorAppBar = (AppBarLayout.Behavior) ((CoordinatorLayout.LayoutParams) layoutAppBar.getLayoutParams()).getBehavior();
behaviorAppBar.onNestedFling(layoutCoordinator, layoutAppBar, null, 0, 1000, true);
}
@Override
public void clearDecoration() {
behaviorButtonExpandActions.animateOut(buttonExpandActions);
AppBarLayout.Behavior behaviorAppBar = (AppBarLayout.Behavior) ((CoordinatorLayout.LayoutParams) layoutAppBar.getLayoutParams()).getBehavior();
behaviorAppBar.onNestedFling(layoutCoordinator, layoutAppBar, null, 0, 1000, true);
}
@Override
public void requestDisallowInterceptTouchEventVertical(boolean disallow) {
recyclerThreadList.requestDisallowInterceptTouchEvent(disallow);
swipeRefreshThreadList.requestDisallowInterceptTouchEvent(disallow);
itemTouchHelper.select(null, CustomItemTouchHelper.ACTION_STATE_IDLE);
}
@Override
public void requestDisallowInterceptTouchEventHorizontal(boolean disallow) {
itemTouchHelper.setDisallow(disallow);
}
};
AdapterLink.ViewHolderLink.Listener listener = new LinksListenerBase(mListener.getEventListenerBase()) {
@Override
public void onVote(Link link, AdapterLink.ViewHolderLink viewHolderLink, Likes vote) {
mListener.getEventListenerBase().onVote(link, vote).subscribe(new ObserverEmpty<Link>() {
@Override
public void onError(Throwable e) {
controllerLinks.getEventHolder().getErrors().call(LinksError.VOTE);
}
@Override
public void onNext(Link link) {
controllerLinks.update(link);
}
});
}
@Override
public void onDelete(Link link) {
new AlertDialog.Builder(getContext()).setTitle(R.string.delete_post).setMessage(link.getTitle()).setPositiveButton(R.string.yes, (dialog, which) -> {
mListener.getEventListenerBase().onDelete(link).subscribe(new ObserverEmpty<Link>() {
@Override
public void onError(Throwable e) {
controllerLinks.getEventHolder().getErrors().call(LinksError.DELETE);
}
@Override
public void onNext(Link link) {
controllerLinks.remove(link);
}
});
}).setNegativeButton(R.string.no, null).show();
}
@Override
public void onReport(Link link) {
// TODO: Add link title
new AlertDialog.Builder(getContext()).setTitle(R.string.report_title).setSingleChoiceItems(Report.getDisplayReasons(getResources()), -1, (dialog, which) -> {
reportSelected = Report.values()[which];
}).setPositiveButton(R.string.ok, (dialog, which) -> {
if (reportSelected == Report.OTHER) {
View viewDialog = LayoutInflater.from(getContext()).inflate(R.layout.dialog_text_input, null, false);
final EditText editText = (EditText) viewDialog.findViewById(R.id.edit_text);
editText.setFilters(new InputFilter[] { new InputFilter.LengthFilter(100) });
new AlertDialog.Builder(getContext()).setView(viewDialog).setTitle(R.string.item_report).setPositiveButton(R.string.ok, (dialog1, which1) -> {
mListener.getEventListenerBase().onReport(link, editText.getText().toString()).subscribe(new ObserverError<String>() {
@Override
public void onError(Throwable e) {
controllerLinks.getEventHolder().getErrors().call(LinksError.REPORT);
}
});
}).setNegativeButton(R.string.cancel, (dialog1, which1) -> {
dialog1.dismiss();
}).show();
} else if (reportSelected != null) {
mListener.getEventListenerBase().onReport(link, reportSelected.getReason()).subscribe(new ObserverError<String>() {
@Override
public void onError(Throwable e) {
controllerLinks.getEventHolder().getErrors().call(LinksError.REPORT);
}
});
}
}).setNegativeButton(R.string.cancel, null).show();
}
@Override
public void onSave(Link link) {
if (link.isSaved()) {
mListener.getEventListenerBase().onUnsave(link).subscribe(new ObserverEmpty<Link>() {
@Override
public void onError(Throwable e) {
controllerLinks.getEventHolder().getErrors().call(LinksError.UNSAVE);
}
@Override
public void onNext(Link link) {
controllerLinks.update(link);
}
});
} else {
mListener.getEventListenerBase().onSave(link).subscribe(new ObserverEmpty<Link>() {
@Override
public void onError(Throwable e) {
controllerLinks.getEventHolder().getErrors().call(LinksError.SAVE);
}
@Override
public void onNext(Link link) {
controllerLinks.update(link);
}
});
}
}
@Override
public void onMarkNsfw(Link link) {
if (link.isOver18()) {
mListener.getEventListenerBase().onUnmarkNsfw(link).subscribe(new ObserverEmpty<Link>() {
@Override
public void onError(Throwable e) {
controllerLinks.getEventHolder().getErrors().call(LinksError.UNMARK_NSFW);
}
@Override
public void onNext(Link link) {
controllerLinks.update(link);
}
});
} else {
mListener.getEventListenerBase().onMarkNsfw(link).subscribe(new ObserverEmpty<Link>() {
@Override
public void onError(Throwable e) {
controllerLinks.getEventHolder().getErrors().call(LinksError.MARK_NSFW);
}
@Override
public void onNext(Link link) {
controllerLinks.update(link);
}
});
}
}
};
adapterLinkList = new AdapterLinkList(getActivity(), adapterListener, eventListenerHeader, listener);
adapterLinkGrid = new AdapterLinkGrid(getActivity(), adapterListener, eventListenerHeader, listener);
adapterLink = AppSettings.MODE_GRID.equals(preferences.getString(AppSettings.INTERFACE_MODE, AppSettings.MODE_GRID)) ? adapterLinkGrid : adapterLinkList;
itemDecorationDivider = new ItemDecorationDivider(getActivity(), ItemDecorationDivider.VERTICAL_LIST);
// recyclerThreadList.setItemAnimator(null);
resetAdapter(adapterLink);
recyclerThreadList.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
switch(newState) {
case RecyclerView.SCROLL_STATE_IDLE:
case RecyclerView.SCROLL_STATE_DRAGGING:
picasso.resumeTag(AdapterLink.TAG_PICASSO);
break;
case RecyclerView.SCROLL_STATE_SETTLING:
picasso.pauseTag(AdapterLink.TAG_PICASSO);
break;
}
}
});
itemTouchHelper = new CustomItemTouchHelper(new CustomItemTouchHelper.SimpleCallback(getActivity(), R.drawable.ic_visibility_off_white_24dp, ItemTouchHelper.START | ItemTouchHelper.END, ItemTouchHelper.START | ItemTouchHelper.END) {
@Override
public float getSwipeThreshold(RecyclerView.ViewHolder viewHolder) {
if (layoutManager instanceof StaggeredGridLayoutManager) {
return 1f / ((StaggeredGridLayoutManager) layoutManager).getSpanCount();
}
return 0.5f;
}
@Override
public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
if (viewHolder.getAdapterPosition() == 0) {
return 0;
}
ViewGroup.LayoutParams layoutParams = viewHolder.itemView.getLayoutParams();
if (layoutParams instanceof StaggeredGridLayoutManager.LayoutParams && !((StaggeredGridLayoutManager.LayoutParams) layoutParams).isFullSpan()) {
int spanCount = layoutManager instanceof StaggeredGridLayoutManager ? ((StaggeredGridLayoutManager) layoutManager).getSpanCount() : 2;
int spanIndex = ((StaggeredGridLayoutManager.LayoutParams) layoutParams).getSpanIndex() % spanCount;
if (spanIndex == 0) {
return ItemTouchHelper.END;
} else if (spanIndex == spanCount - 1) {
return ItemTouchHelper.START;
}
}
return super.getSwipeDirs(recyclerView, viewHolder);
}
@Override
public boolean isLongPressDragEnabled() {
return false;
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(final RecyclerView.ViewHolder viewHolder, int direction) {
// Offset by 1 due to subreddit header
Link link = controllerLinks.hideLink(viewHolder.getAdapterPosition());
mListener.getEventListenerBase().hide(link);
if (snackbar != null) {
snackbar.dismiss();
}
SpannableString text = new SpannableString(link.isHidden() ? getString(R.string.link_hidden) : getString(R.string.link_shown));
text.setSpan(new ForegroundColorSpan(themer.getColorFilterPrimary().getColor()), 0, text.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
//noinspection ResourceType
snackbar = Snackbar.make(recyclerThreadList, text, UtilsAnimation.SNACKBAR_DURATION).setActionTextColor(themer.getColorFilterPrimary().getColor()).setAction(R.string.undo, v -> {
mListener.getEventListenerBase().hide(link);
controllerLinks.reshowLastHiddenLink();
});
snackbar.getView().setBackgroundColor(themer.getColorPrimary());
snackbar.show();
}
});
itemTouchHelper.attachToRecyclerView(recyclerThreadList);
recyclerThreadList.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
// rv.getChildViewHolder(rv.findChildViewUnder(e.getX(), e.getY()));
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
});
if (layoutManager instanceof LinearLayoutManager) {
recyclerThreadList.setPadding(0, 0, 0, 0);
} else {
int padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, getResources().getDisplayMetrics());
recyclerThreadList.setPadding(padding, 0, padding, 0);
}
textSidebar.setMovementMethod(LinkMovementMethod.getInstance());
buttonSubscribe.setOnClickListener(v -> controllerLinks.subscribe());
return view;
}
Aggregations