[英]Android menu bar on the bottom
我想在我的應用程序底部實現一個菜單欄,就像我在許多主要應用程序中看到的那樣,如facebook,google +,stumble等(見下圖)
這方面的關鍵方面是它疊加在實際內容之上,當你向下滾動時,它會消失,但是當你向上滾動它會回來。
由於一堆應用程序使用這種構造,我想知道是否有一種簡單的方法可以做到這一點,我只是缺少一些東西,或者它實際上是非常復雜但是這些大公司只雇用了非常好的開發人員?
關於如何解決這個問題的任何指示將不勝感激。
此模式通常稱為“ QuickReturn UI ”。 很少有開源實現可以看一下,即QuickReturnListView
我已經在Facebook中實現了QuickReturn UI模式。
你可以在這里看到更多的例子 - > https://github.com/lawloretienne/QuickReturn
public class QuickReturnFacebookFragment extends Fragment {
// region Member Variables
private String[] mAvatarUrls;
private String[] mDisplayNames;
private String[] mTimestamps;
private String[] mMessages;
private String[] mPostImageUrls;
private int[] mCommentCounts;
private int[] mLikeCounts;
@InjectView(R.id.rv)
RecyclerView mRecyclerView;
@InjectView(R.id.quick_return_footer_ll)
LinearLayout mQuickReturnFooterLinearLayout;
@InjectView(R.id.quick_return_header_tv)
TextView mQuickReturnHeaderTextView;
// endregion
//region Listeners
//endregion
// region Constructors
public static QuickReturnFacebookFragment newInstance() {
QuickReturnFacebookFragment fragment = new QuickReturnFacebookFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
public QuickReturnFacebookFragment() {
}
// endregion
// region Lifecycle Methods
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAvatarUrls = getActivity().getResources().getStringArray(R.array.avatar_urls);
mDisplayNames = getActivity().getResources().getStringArray(R.array.display_names);
mTimestamps = getActivity().getResources().getStringArray(R.array.facebook_timestamps);
mMessages = getActivity().getResources().getStringArray(R.array.facebook_messages);
mPostImageUrls = getActivity().getResources().getStringArray(R.array.facebook_post_image_urls);
mCommentCounts = getActivity().getResources().getIntArray(R.array.facebook_comment_counts);
mLikeCounts = getActivity().getResources().getIntArray(R.array.facebook_like_counts);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_quick_return_facebook, container, false);
ButterKnife.inject(this, view);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ArrayList<FacebookPost> posts = new ArrayList<>();
for(int i=0; i<23; i++){
FacebookPost post = new FacebookPost();
post.setAvatarUrl(mAvatarUrls[i]);
post.setDisplayName(mDisplayNames[i]);
post.setTimestamp(mTimestamps[i]);
post.setCommentCount(mCommentCounts[i]);
post.setLikeCount(mLikeCounts[i]);
post.setPostImageUrl(mPostImageUrls[i]);
post.setMessage(mMessages[i]);
posts.add(post);
}
FacebookAdapter adapter = new FacebookAdapter(getActivity(), posts);
// use this setting to improve performance if you know that changes
// in content do not change the layout size of the RecyclerView
mRecyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setAdapter(adapter);
mRecyclerView.addItemDecoration(new SpacesItemDecoration(QuickReturnUtils.dp2px(getActivity(), 8)));
int headerHeight = getResources().getDimensionPixelSize(R.dimen.facebook_header_height);
int footerHeight = getResources().getDimensionPixelSize(R.dimen.facebook_footer_height);
int headerTranslation = -headerHeight;
int footerTranslation = -footerHeight;
QuickReturnRecyclerViewOnScrollListener scrollListener = new QuickReturnRecyclerViewOnScrollListener.Builder(QuickReturnViewType.BOTH)
.header(mQuickReturnHeaderTextView)
.minHeaderTranslation(headerTranslation)
.footer(mQuickReturnFooterLinearLayout)
.minFooterTranslation(-footerTranslation)
.isSnappable(true)
.build();
mRecyclerView.setOnScrollListener(scrollListener);
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.reset(this);
}
// endregion
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.