Tôi có 12 mục trong bố cục tab trượt android + xem máy nhắn tin. Trong khi trượt từ trái sang phải, tab đã chọn phải được căn giữa giống như cửa hàng phát. Xin hãy giúp tôi làm thế nào để làm điều đó. Trong tab hoạt động ứng dụng của tôi luôn ở bên trái màn hình.Cách căn chỉnh trung tâm tab đang hoạt động trong Bố cục tab trượt Android
Trả lời
Google đã cung cấp mẫu cho sliding tab layout. Nhưng trong việc thực hiện lớp SlidingTabLayout, nó không được thiết kế để căn giữa căn giữa tab đã chọn. Tôi đã sửa đổi phương pháp cuộn để làm cho trung tâm tab đã chọn/hoạt động của màn hình. Phương pháp 241, scrollToTab {}
Cập nhật:: Đây là sự thay đổi mã:
Tên nhóm: Số SlidingTabLayout
Dòng
private void scrollToTab(int tabIndex, int positionOffset) {
final int tabStripChildCount = mTabStrip.getChildCount();
if (tabStripChildCount == 0 || tabIndex < 0 || tabIndex >= tabStripChildCount) {
return;
}
View selectedChild = mTabStrip.getChildAt(tabIndex);
if (selectedChild != null) {
int targetScrollX = selectedChild.getLeft() + positionOffset;
if (tabIndex > 0 || positionOffset > 0) {
// If we're not at the first child and are mid-scroll, make sure we obey the offset
targetScrollX -= (getWidth()-selectedChild.getWidth())/2;
}
scrollTo(targetScrollX, 0);
}
}
Bạn không cần phải lấy màn hình để đo chiều rộng của scrollview, chỉ cần gọi getWidth();) tức là: targetScrollX - = (getWidth() - selectedChild.getWidth())/2; –
Yuri Heupa, Đã cập nhật câu trả lời. Cảm ơn đề xuất của bạn. –
+1 Nó hoạt động :) Tuy nhiên, có một chút giật ở cuối trong những nỗ lực để đặt nó ở trung tâm. Dưới đây sửa chữa nó. :) Làm tốt lắm. –
Tiếp cận của tôi khác một chút là giải pháp Shripad Bhat, trả lại tab ở cuối trang trình bày.
Dưới đây là cách giải quyết của tôi ...
Changes để onPageScrolled
phương pháp:
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
int tabStripChildCount = mTabStrip.getChildCount();
if ((tabStripChildCount == 0) || (position < 0) || (position >= tabStripChildCount)) {
return;
}
mTabStrip.onViewPagerPageChanged(position, positionOffset);
View selectedTitle = mTabStrip.getChildAt(position);
int selectedOffset = (selectedTitle == null) ? 0 : selectedTitle.getWidth();
int nextTitlePosition = position + 1;
View nextTitle = mTabStrip.getChildAt(nextTitlePosition);
int nextOffset = (nextTitle == null) ? 0 : nextTitle.getWidth();
int extraOffset = (int)(0.5F * (positionOffset * (float)(selectedOffset + nextOffset)));
scrollToTab(position, extraOffset);
if (mViewPagerPageChangeListener != null) {
mViewPagerPageChangeListener.onPageScrolled(position, positionOffset, positionOffsetPixels);
}
}
Changes để scrollToTab
phương pháp:
private int mLastScrollTo;
private void scrollToTab(int tabIndex, int positionOffset) {
final int tabStripChildCount = mTabStrip.getChildCount();
if (tabStripChildCount == 0 || tabIndex < 0 || tabIndex >= tabStripChildCount) {
return;
}
View selectedChild = mTabStrip.getChildAt(tabIndex);
if (selectedChild != null && selectedChild.getMeasuredWidth() != 0) {
int targetScrollX = ((positionOffset + selectedChild.getLeft()) - getWidth()/2) + selectedChild.getWidth()/2;
if (targetScrollX != mLastScrollTo) {
scrollTo(targetScrollX, 0);
mLastScrollTo = targetScrollX;
}
}
}
Người bạn đời tuyệt vời. Nó hoạt động như nét duyên dáng :) +10 nếu tôi có thể. :) –
LGTM, cảm ơn! : D –
Cảm ơn bạn, nó thật tuyệt vời. Nhưng làm thế nào để làm cho mục tab đầu tiên ở trung tâm? – NickUnuchek
có vấn đề này là tốt. tabLayout chỉ cung cấp tabContentStart tùy chọn, cần cả hai bên:
public class CenteringTabLayout extends TabLayout {
public CenteringTabLayout(Context context) {
super(context);
}
public CenteringTabLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CenteringTabLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
View firstTab = ((ViewGroup)getChildAt(0)).getChildAt(0);
View lastTab = ((ViewGroup)getChildAt(0)).getChildAt(((ViewGroup)getChildAt(0)).getChildCount()-1);
ViewCompat.setPaddingRelative(getChildAt(0), (getWidth()/2) - (firstTab.getWidth()/2),0,(getWidth()/2) - (lastTab.getWidth()/2),0);
}
}
mã của bạn đang ném một ngoại lệ trên hàng đang sử dụng ViewCompat, bạn có thể vui lòng giải thích mã của bạn nhiều hơn một chút để tôi có thể hiểu những gì bạn thực sự muốn làm. – EyadMhanna
Tôi đã mở rộng android.support.design.widget.TabLayout. Đứa trẻ đầu tiên là SlidingTabStrip và mỗi tab là một trong số các con của nó và tôi đang cố gắng đặt padding thành SlidingTabStrip Nhưng ngay cả khi tôi không tập trung vào các tab cuối cùng một cách cẩn trọng. Vẫn không tìm thấy lý do tại sao. –
- 1. Trung tâm bố cục căn chỉnh Android
- 2. Tab hoạt động của Trung tâm bên trong TabLayout
- 3. Bố cục tab trượt kiểu Youtube trong ứng dụng Android
- 4. Văn bản bố cục tab trượt là chữ hoa
- 5. Bố cục tab Android được thiết lậpContent
- 6. Trung tâm căn chỉnh span HTML không hoạt động?
- 7. Cách tạo bố cục tab trong Android 4.0?
- 8. Cách tạo ảnh động trong Bố cục tab khi chọn một tab?
- 9. Làm cách nào để Trung tâm TextView trong Bố cục?
- 10. Bố cục tab trượt trong ứng dụng iOS được phát triển trong Swift
- 11. Trung tâm căn chỉnh một cột trong twitter bootstrap
- 12. Căn chỉnh nút đến trung tâm
- 13. Bố cục Android căn trái và phải căn chỉnh theo bố cục ngang
- 14. Android Pager Trượt tab với các biểu tượng
- 15. Căn chỉnh văn bản: căn giữa và căn chỉnh: trung tâm không hoạt động theo chiều ngang
- 16. Căn chỉnh trung tâm chặn nội tuyến
- 17. Bố cục tab trượt cho các ngôn ngữ từ phải sang trái
- 18. Nhiều div nổi trung tâm trong bố cục lỏng
- 19. Cột căn chỉnh phải trong bố cục bảng android
- 20. Cách kích hoạt ('click') trên tab hiện đang hoạt động của tab jquery
- 21. Căn chỉnh văn bản/bố cục trong Android (textAlignment, gravity)
- 22. Ẩn mục tab tab và căn chỉnh các mục tab khác
- 23. sử dụng trung tâm căn chỉnh văn bản trong colgroup
- 24. Trình quản lý bố cục Java Trung tâm dọc
- 25. Làm thế nào để căn chỉnh trung tâm hội thoại tùy chỉnh trong Android?
- 26. Eclipse thiếu tab Bố cục đồ họa và Nguồn khi chỉnh sửa tệp XML Android
- 27. Cách thêm Activtity khác nhau vào mỗi Tab trong Hoạt động được Tab
- 28. Android. Cách thay đổi Hoạt động trong một Tab
- 29. làm cách nào để kiểm tra xem tab nào đang hoạt động bằng các tab jquery?
- 30. Không thể xóa Đệm khỏi tab khi sử dụng Chế độ xem tùy chỉnh với Bố cục tab
Bạn đang sử dụng [PagerTabStrip] (http://developer.android.com/reference/android/support/v4/view/PagerTabStrip.html) trong dự án của bạn (đó là ứng dụng Google Play đang sử dụng). Có vẻ như bạn đang sử dụng các tab bình thường thay thế. – Marko
Không, tôi đã sử dụng lớp SlidingTabLayout do google cung cấp làm lớp mẫu cho bố cục tab trượt. Ngoài ra tôi đã thử PagerTabStrip nó không cho phép bạn trượt tiêu đề tab như chơi cửa hàng. SlidingTabLayout được mở rộng HorizontalScrollView. –
Tôi hiểu. Nhìn vào [video] này (https://www.youtube.com/watch?v=tRg_eDfQ8fk) từ các nhà phát triển Android, bạn có thể thấy đây không phải là hành vi mong đợi. Để có được hiệu ứng mà Google Play có, bạn phải sử dụng ** PagerTabStrip **. Nó là siêu dễ thực hiện, thanh toán [hướng dẫn này] (http://codetheory.in/android-pagertabstrip-pagertitlestrip-viewpager/). – Marko