Build 70 incorporates ViewTitleIndicator by default now. The problem with the title indicators is that they don’t natively play nice with themes. Here’s how I fixed it:
TypedValue tvBarTabStyle = new TypedValue(); int actionBarStyleResId; int backgroundResId; int actionBarTabTextStyleResId; int actionBarTabStyleResId; if (VERSION.SDK_INT >= 14) { backgroundResId = V14.getBackgroundStackedResId(); actionBarStyleResId = V11.getActionBarStyleResId(); actionBarTabTextStyleResId = V11 .getActionBarTabTextStyleResId(); actionBarTabStyleResId = V11.getActionBarTabStyleResId(); } else if (VERSION.SDK_INT >= 11) { actionBarStyleResId = V11.getActionBarStyleResId(); backgroundResId = android.R.attr.background; actionBarTabTextStyleResId = V11 .getActionBarTabTextStyleResId(); actionBarTabStyleResId = V11.getActionBarTabStyleResId(); } else { backgroundResId = com.actionbarsherlock.R.attr.backgroundStacked; actionBarStyleResId = com.actionbarsherlock.R.attr.actionBarStyle; actionBarTabTextStyleResId = com.actionbarsherlock.R.attr.actionBarTabTextStyle; actionBarTabStyleResId = com.actionbarsherlock.R.attr.actionBarTabStyle; } getTheme().resolveAttribute(actionBarStyleResId, tvBarTabStyle, true); TypedArray taBackground = this.obtainStyledAttributes( tvBarTabStyle.resourceId, new int[] { backgroundResId }); mIndicator.setBackgroundResource(taBackground.getResourceId(0, 0)); taBackground.recycle(); TypedValue tvBarTabTextStyle = new TypedValue(); getTheme().resolveAttribute(actionBarTabTextStyleResId, tvBarTabTextStyle, true); TypedArray taTitleTextColor = this.obtainStyledAttributes( tvBarTabTextStyle.resourceId, new int[] { android.R.attr.textColor }); mIndicator.setSelectedColor(taTitleTextColor.getColor(0, 0)); mIndicator.setTextColor(taTitleTextColor.getColor(0, 0)); taTitleTextColor.recycle(); TypedValue tvBarTabBarStyle = new TypedValue(); getTheme().resolveAttribute(actionBarTabStyleResId, tvBarTabBarStyle, true); TypedArray taIndicator = this.obtainStyledAttributes( tvBarTabBarStyle.resourceId, new int[] { android.R.attr.background }); TypedValue tvDivider = new TypedValue(); taIndicator.getValue(0, tvDivider); int color = -1; StateListDrawable sldIndicator = (StateListDrawable) getResources() .getDrawable(tvDivider.resourceId); sldIndicator.setState(new int[] { android.R.attr.state_selected }); Drawable drawable = sldIndicator.getCurrent(); Bitmap bmp = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(bmp); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); int height = bmp.getHeight(); int width = bmp.getWidth(); color = bmp.getPixel(width / 2, height / 2); mIndicator.setFooterColor(color); taIndicator.recycle();
Leave a Reply