- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用带有 View 寻呼机的滑动标签布局。我的滑动标签布局条显示了很多项目,数字从 10 到 200。
下面的图片完整地描述了我的问题:首先是它是如何工作的,第二张图片显示了我遇到的问题。
第一张图片(我的标签如何工作):
第二张图片(我遇到的问题和要实现的目标):
我的 SlidingTabLayoutClass:
public class SlidingTabLayout extends HorizontalScrollView {
/**
* Allows complete control over the colors drawn in the tab layout. Set with
* {@link #setCustomTabColorizer(TabColorizer)}.
*/
public interface TabColorizer {
/**
* @return return the color of the indicator used when {@code position} is selected.
*/
int getIndicatorColor(int position);
/**
* @return return the color of the divider drawn to the right of {@code position}.
*/
int getDividerColor(int position);
}
private static final int TITLE_OFFSET_DIPS = 24;
private static final int TAB_VIEW_PADDING_DIPS = 16;
private static final int TAB_VIEW_TEXT_SIZE_SP = 12;
private int mTitleOffset;
private int mTabViewLayoutId;
private int mTabViewTextViewId;
private ViewPager mViewPager;
private ViewPager.OnPageChangeListener mViewPagerPageChangeListener;
private final SlidingTabStrip mTabStrip;
public SlidingTabLayout(Context context) {
this(context, null);
}
public SlidingTabLayout(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public SlidingTabLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// Disable the Scroll Bar
setHorizontalScrollBarEnabled(false);
// Make sure that the Tab Strips fills this View
setFillViewport(true);
mTitleOffset = (int) (TITLE_OFFSET_DIPS * getResources().getDisplayMetrics().density);
mTabStrip = new SlidingTabStrip(context);
addView(mTabStrip, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
}
/**
* Set the custom {@link TabColorizer} to be used.
*
* If you only require simple custmisation then you can use
* {@link #setSelectedIndicatorColors(int...)} and {@link #setDividerColors(int...)} to achieve
* similar effects.
*/
public void setCustomTabColorizer(TabColorizer tabColorizer) {
mTabStrip.setCustomTabColorizer(tabColorizer);
}
/**
* Sets the colors to be used for indicating the selected tab. These colors are treated as a
* circular array. Providing one color will mean that all tabs are indicated with the same color.
*/
public void setSelectedIndicatorColors(int... colors) {
mTabStrip.setSelectedIndicatorColors(colors);
}
/**
* Sets the colors to be used for tab dividers. These colors are treated as a circular array.
* Providing one color will mean that all tabs are indicated with the same color.
*/
public void setDividerColors(int... colors) {
mTabStrip.setDividerColors(colors);
}
/**
* Set the {@link ViewPager.OnPageChangeListener}. When using {@link SlidingTabLayout} you are
* required to set any {@link ViewPager.OnPageChangeListener} through this method. This is so
* that the layout can update it's scroll position correctly.
*
* @see ViewPager#setOnPageChangeListener(ViewPager.OnPageChangeListener)
*/
public void setOnPageChangeListener(ViewPager.OnPageChangeListener listener) {
mViewPagerPageChangeListener = listener;
}
/**
* Set the custom layout to be inflated for the tab views.
*
* @param layoutResId Layout id to be inflated
* @param textViewId id of the {@link TextView} in the inflated view
*/
public void setCustomTabView(int layoutResId, int textViewId) {
mTabViewLayoutId = layoutResId;
mTabViewTextViewId = textViewId;
}
/**
* Sets the associated view pager. Note that the assumption here is that the pager content
* (number of tabs and tab titles) does not change after this call has been made.
*/
public void setViewPager(ViewPager viewPager) {
mTabStrip.removeAllViews();
mViewPager = viewPager;
if (viewPager != null) {
viewPager.setOnPageChangeListener(new InternalViewPagerListener());
populateTabStrip();
}
}
/**
* Create a default view to be used for tabs. This is called if a custom tab view is not set via
* {@link #setCustomTabView(int, int)}.
*/
protected TextView createDefaultTabView(Context context) {
TextView textView = new TextView(context);
textView.setGravity(Gravity.CENTER);
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, TAB_VIEW_TEXT_SIZE_SP);
textView.setTypeface(Typeface.DEFAULT_BOLD);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// If we're running on Honeycomb or newer, then we can use the Theme's
// selectableItemBackground to ensure that the View has a pressed state
TypedValue outValue = new TypedValue();
getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground,
outValue, true);
textView.setBackgroundResource(outValue.resourceId);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
// If we're running on ICS or newer, enable all-caps to match the Action Bar tab style
textView.setAllCaps(true);
}
int padding = (int) (TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density);
textView.setPadding(padding, padding, padding, padding);
return textView;
}
private void populateTabStrip() {
final PagerAdapter adapter = mViewPager.getAdapter();
final View.OnClickListener tabClickListener = new TabClickListener();
for (int i = 0; i < adapter.getCount(); i++) {
View tabView = null;
TextView tabTitleView = null;
if (mTabViewLayoutId != 0) {
// If there is a custom tab view layout id set, try and inflate it
tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip,
false);
tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId);
}
if (tabView == null) {
tabView = createDefaultTabView(getContext());
}
if (tabTitleView == null && TextView.class.isInstance(tabView)) {
tabTitleView = (TextView) tabView;
}
tabTitleView.setText(adapter.getPageTitle(i));
tabView.setOnClickListener(tabClickListener);
mTabStrip.addView(tabView);
}
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (mViewPager != null) {
scrollToTab(mViewPager.getCurrentItem(), 0);
}
}
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 -= mTitleOffset;
}
scrollTo(targetScrollX, 0);
}
}
private class InternalViewPagerListener implements ViewPager.OnPageChangeListener {
private int mScrollState;
@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 extraOffset = (selectedTitle != null)
? (int) (positionOffset * selectedTitle.getWidth())
: 0;
scrollToTab(position, extraOffset);
if (mViewPagerPageChangeListener != null) {
mViewPagerPageChangeListener.onPageScrolled(position, positionOffset,
positionOffsetPixels);
}
}
@Override
public void onPageScrollStateChanged(int state) {
mScrollState = state;
if (mViewPagerPageChangeListener != null) {
mViewPagerPageChangeListener.onPageScrollStateChanged(state);
}
}
@Override
public void onPageSelected(int position) {
if (mScrollState == ViewPager.SCROLL_STATE_IDLE) {
mTabStrip.onViewPagerPageChanged(position, 0f);
scrollToTab(position, 0);
}
if (mViewPagerPageChangeListener != null) {
mViewPagerPageChangeListener.onPageSelected(position);
}
}
}
private class TabClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
for (int i = 0; i < mTabStrip.getChildCount(); i++) {
if (v == mTabStrip.getChildAt(i)) {
mViewPager.setCurrentItem(i);
return;
}
}
}
}
}
请帮忙解决我的问题
我尝试过的方法:
1.)我尝试调用 scrollToTab(mViewPager.getCurrentItem(), 0);在 SlidingTabLayout 类的 setViewPager 方法中,但在首次加载 Activity 时无法显示第 6 个项目。
2.)代替scrollToTab(mViewPager.getCurrentItem(), 0);在 SlidingTabLayout 类的 setViewPager 方法中,我尝试调用 scrollTo(500,0),它在 Activity 首次加载时向我显示了滚动的滑动标签条,这种方式效率不高,因为我们不知道要放置什么值500 为不同的设备。
我创建的这个滑动选项卡布局类似于下面显示的布局,唯一的区别是我的选项卡显示带有圆形背景的数字,而下图只描绘了三个选项卡,我的选项卡布局包含许多编号从 10 到 200 的选项卡。
最佳答案
我已经通过使用 android 的 Gallery Control 而不是带有 View Pager 的 SlidingTabLayout 解决了上述问题,有了 gallery,我能够将 6 个项目显示为默认选择,并且在第一次加载 Activity 时它也可见。代码:mGallery.setSelection(6);
关于android - SlidingTabLayout 当前项集在首次加载 Activity 时未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30545721/
使用 Google 的 SlidingTabLayout如何以编程方式更改选定的选项卡? 最佳答案 @Bind(R.id.pager) ViewPager mViewPager; @Bind(R.id
我正在使用 SlidingTabLayout 类在我的 Android 应用程序中显示标签。 我正在使用我使用 setCustomTabView 函数设置的自定义选项卡 View 。虽然我可以轻松自定
我想在 SlidingTabLayout 中实现子标签。 我搜索了很多,但我没有找到类似的东西。 有没有人有实现此方案的解决方案或建议? 谢谢。 最佳答案 有一个非常简单的方法。您可以将主选项卡与 v
图片示例: 清空 PagerView PagerView 有新内容(SlidingTabLayout 不更新) View 的新实例(SlidingTabLayout 已更新); 这是我的代码: pub
我正在尝试更改(https://developer.android.com/samples/SlidingTabsBasic/src/com.example.android.common/view/S
在我将我的应用程序移动到 5.0 后,我不得不从基本选项卡移动到谷歌开发人员的 slidingTabLayout provides . 问题是,我不知道如何让两个按钮都像旧按钮一样居中。顺便说一句,我
我搜索了很多有关如何使用 SlidingTabLayout 在 fragment 之间进行通信的信息,但没有真正找到好的答案。我知道使用 ActionBar,但我想要使用 SlidingTabLayo
我有一个带有图像的折叠工具栏,向上滚动时它应该移动到顶部。在此之后我想要一个 SlidingTabLayout,它有不同的选项卡并且它必须跟随折叠工具栏。 当工具栏折叠时,布局将仅显示折叠模式下的工具
我尝试在我的应用程序中实现 SlidingTabLayout。遗憾的是它没有在滑动选项卡中显示标题。我需要在选项卡中显示我的 Activity 的标题(稍后在图标中)。我可以知道该怎么做吗?我对 An
我正在尝试向预构建的 Android 应用程序添加一些功能,其中之一是以编程方式更改应用程序语言。 我为更改应用程序的资源所做的是:在 onCreate 中为每个 Activity 执行此代码:
我的 SlidingTabLayout 的大小有问题。我有该功能,如果需要,将在滚动时调整大小,在这种情况下,我不希望我的 SlidingTabLayout 调整大小,我希望它像下面这样小:- 这是它
我在我的 View 中使用谷歌的 SlidingTabLayout,但我想向它动态添加新标签。我正在使用这个 http://developer.android.com/samples/SlidingT
请问是否可以更改 SlidingTablayout 中标签指示器的颜色?我必须使用 developer.android.com 的 SlidingTabsColors 吗?我只想更改另一种颜色而不是默
我正在使用来自开发人员 android 页面的 SlidingTabLayout.java。在我使用 slidingTabLayout.setDistributeEvenly(true); 使 sli
我正在我的 android 应用程序中实现一个 SlidingTabLayout。我的查询是我想在我的滑动选项卡中实现图标而不是导航文本。我在互联网上大量搜索任何此类教程或示例,但没有找到。我还在st
我正在使用来自 google (https://developer.android.com/samples/SlidingTabsBasic/src/com.example.android.commo
我将使用以下名为 ObservableScrollView 的库来处理带有滑动选项卡的抽屉导航 https://github.com/ksoichiro/Android-ObservableScrol
我是一名有抱负的 Android 开发人员,没有太多经验,而且对这个领域还很陌生。最近,我一直对在我的第一个(即将发布的)应用程序中实现 Material 设计功能很感兴趣,特别是 SlidingTa
我正在使用带有 View 寻呼机的滑动标签布局。我的滑动标签布局条显示了很多项目,数字从 10 到 200。 下面的图片完整地描述了我的问题:首先是它是如何工作的,第二张图片显示了我遇到的问题。 第一
我已经在我的应用程序上实现了 SlidingTabLayout,遵循 https://github.com/google/iosched/blob/master/android/src/main/ja
我是一名优秀的程序员,十分优秀!