我已经定义了三个不同的类来处理选项卡图标。以下是BaseActivity
类。
public class MainScreenPagerAdapter extends FragmentPagerAdapter implements TabBarView.IconTabProvider {
private int[] tab_icons =
{R.drawable.launcher_inactive,
R.drawable.chat_inactive,
R.drawable.t3_inactive,
R.drawable.launcher,
R.drawable.chat_active,
R.drawable.t3_active
};
然后在TabView.java
中我将setIcon定义为
public void setIcon(int resId) {
setIcon(getContext().getResources().getDrawable(resId));
}
由于getDrawable
已被弃用,我认为这是我看不到标签图标的唯一问题
public class TabView extends LinearLayout {
private ImageView mImageView;
private TextView mTextView;
public TabView(Context context) {
this(context, null);
}
public TabView(Context context, AttributeSet attrs) {
this(context, attrs, android.R.attr.actionBarTabStyle);
}
public TabView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.actionBarTabTextStyle, outValue, true);
int txtstyle = outValue.data;
int pad = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources()
.getDisplayMetrics());
mImageView = new ImageView(context);
mImageView.setLayoutParams(new LayoutParams(100, LayoutParams.MATCH_PARENT));//hadi andaze icon taba
mImageView.setScaleType(ScaleType.CENTER_INSIDE);
mTextView = new TextView(context);
mTextView.setLayoutParams(new LayoutParams(50, LayoutParams.MATCH_PARENT));
mTextView.setGravity(Gravity.CENTER);
// mTextView.setCompoundDrawablePadding(pad);
mTextView.setTextAppearance(context, txtstyle);
;
this.addView(mImageView);
// this.addView(mTextView);
this.setLayoutParams(new LayoutParams(determineScreenDensity(), LayoutParams.MATCH_PARENT));
//this.setLayoutParams(new LayoutParams(150, LayoutParams.MATCH_PARENT));
}
public void setIcon(int resId) {
Log.i("Case+","" +resId);
setIcon(getContext().getResources().getDrawable(resId));
}
public void setIcon(Drawable icon) {
if (icon != null) {
mImageView.setVisibility(View.VISIBLE);
mImageView.setImageDrawable(icon);
} else {
mImageView.setImageResource(View.GONE);
Log.i("icon","null" +null);
}
}
public void setText(int resId, int ico) {
setText(getContext().getString(resId), ico);
}
public void setText(CharSequence text, int ico) {
mTextView.setText(text);
mTextView.setCompoundDrawablesWithIntrinsicBounds(ico, 0, 0, 0);
;
}
然后从TabBarView.java
班级调用setIcon()
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
mSelectedTab = position;
mOffset = positionOffset;
invalidate();
if (delegatePageListener != null) {
delegatePageListener.onPageScrolled(position, positionOffset, positionOffsetPixels);
}
if (position == 0) {
tabView1.setIcon(((IconTabProvider) pager.getAdapter()).getPageIconResId(3));
tabView1.setScaleX(1);
tabView1.setScaleY(1);
tabView2.setIcon(((IconTabProvider) pager.getAdapter()).getPageIconResId(1));
// tabView2.setScaleX(2);
// tabView2.setScaleY(2);
tabView3.setIcon(((IconTabProvider) pager.getAdapter()).getPageIconResId(2));
tabView3.setScaleX(1.1f);
tabView3.setScaleY(1.1f);
} else if (position == 1) {
tabView1.setIcon(((IconTabProvider) pager.getAdapter()).getPageIconResId(0));
tabView1.setScaleX(0.7f);
tabView1.setScaleY(0.7f);
// tabView1.setBackgroundResource(R.drawable.transparent_button_2);
tabView2.setIcon(((IconTabProvider) pager.getAdapter()).getPageIconResId(4));
//tabView2.setBackgroundResource(R.drawable.transparent_round_button);
//tabView2.setScaleX(2);
//tabView2.setScaleY(2);
tabView3.setIcon(((IconTabProvider) pager.getAdapter()).getPageIconResId(2));
tabView3.setScaleX(1.1f);
tabView3.setScaleY(1.1f);
// tabView3.setBackgroundResource(R.drawable.transparent_button_2);
} else if (position == 2) {
tabView1.setIcon(((IconTabProvider) pager.getAdapter()).getPageIconResId(0));
//tabView1.setBackgroundResource(R.drawable.transparent_button_2);
tabView2.setIcon(((IconTabProvider) pager.getAdapter()).getPageIconResId(1));
//tabView2.setBackgroundResource(R.drawable.transparent_button_2);
tabView3.setIcon(((IconTabProvider) pager.getAdapter()).getPageIconResId(5));
// tabView3.setBackgroundResource(R.drawable.transparent_round_button);
tabView3.setScaleX(1.7f);
tabView3.setScaleY(1.7f);
/*
LayoutParams params = new LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT
);
params.gravity = Gravity.CENTER;
params.setMargins(40,0,0,0);
tabView1.setLayoutParams(params);
tabView2.setLayoutParams(params);
tabView3.setLayoutParams(params);
// tabView2.setPadding(20,0,20,0);
//tabView3.setPadding(20,0,0,0);
*/
}
}
this question中的解决方案无法应用于我的代码。如果你能帮我解决这个问题,我感激不尽。
答案 0 :(得分:0)
这项工作在我的案例中
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
holder.thumbnail.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_launcher_background, context.getTheme()));
} else {
holder.thumbnail.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_launcher_background));
}
//根据您的要求
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
setIcon(context.getResources().getDrawable(R.drawable.ic_launcher_background, context.getTheme()));
} else {
setIcon(context.getResources().getDrawable(R.drawable.ic_launcher_background));
}
答案 1 :(得分:0)
您的localhost:8079/works/Woods/services/1
代码看起来非常简单。我能想到的唯一选择是你可以在设置drawable之后尝试在TabView
内调用invalidate()
,因为它会尝试重新绘制布局。
答案 2 :(得分:0)
如果它在API级别23以下工作,那么我认为您在使用getDrawable时遇到问题我们有一些选项可用于代替getContext().getResources().getDrawable()
它可以与ContextCompat
ContextCompat.getDrawable(getActivity(), R.drawable.drawble_name);
请尝试此操作,因为资源的getDrawable已弃用于API级别22以上。