[英]Android Issue with activity context
因此,我有一个帮助程序类,该类在整个应用程序中重用了很多代码,其中一种方法如下所示:
public void setTitleTextSize(final int id){
infoButton = ((Activity) context).findViewById(R.id.info_button);
ViewTreeObserver customTitleScale = infoButton.getViewTreeObserver();
customTitleScale.addOnPreDrawListener(new OnPreDrawListener() {
@Override
public boolean onPreDraw() {
int infoWidth = infoButton.getMeasuredWidth();
if(infoWidth !=0){
if(Build.VERSION.SDK_INT >= 11.0){
TypedValue tv = new TypedValue();
((Activity) context).getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true);
actionBarWidth = ((Activity) context).getResources().getDimensionPixelSize(tv.resourceId);
}
DisplayMetrics metrics = new DisplayMetrics();
Display Screen = ((Activity) context).getWindowManager().getDefaultDisplay();
Screen.getMetrics(metrics);
int screenWidth = metrics.widthPixels;
int titleWidth = screenWidth - infoWidth - actionBarWidth;
TextView titleText = (TextView) ((Activity) context).findViewById(R.id.title_text);
titleText.setText(id);
TextPaint paint = titleText.getPaint();
Rect rect = new Rect();
String text = String.valueOf(titleText.getText());
int textLength = text.length();
paint.getTextBounds(text, 0, textLength, rect);
if(rect.width() > titleWidth){
float scale = (float) titleWidth / (float) rect.width();
float textSize = titleText.getTextSize();
float scaleSize = (float) (textSize * (scale*0.8));
titleText.setTextSize(TypedValue.COMPLEX_UNIT_PX, scaleSize);
}
infoButton.getViewTreeObserver().removeOnPreDrawListener(this);
}
return false;
}
});
}
我在所有活动中都使用这种特定方法。
我遇到的问题是我不想在每个活动上都显示infoButton
,但是当我添加View infoButton = findViewById(R.id.info_button); infoButton.setVisibility(View.GONE);
View infoButton = findViewById(R.id.info_button); infoButton.setVisibility(View.GONE);
对于活动,屏幕只是黑色。
因此,我在考虑如何执行此操作,我唯一能做的就是将一个布尔值传递给该方法,以说明信息视图是否可见。 我想我会做一个if语句,说“如果为true,则显示它,如果为false,则不显示,但我不知道如何做到这一点。”
任何帮助将是惊人的感谢。
尝试使用方法infoButton.getVisibility(),它将返回您的整数以获取小部件的可见性状态。
我发现了我遇到的问题,我的逻辑对于if
语句if(infoWidth !=0)
是不正确的。 如果活动没有信息按钮,则代码不会运行,因为infoWidth始终为零。 因此,我将逻辑更改为if(infoWidth !=0 || !displayInfoButton)
,它可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.