Java 活动上下文的Android问题
因此,我有一个helper类,它在整个应用程序中重用了大量代码,其中一个方法如下所示:Java 活动上下文的Android问题,java,android,Java,Android,因此,我有一个helper类,它在整个应用程序中重用了大量代码,其中一个方法如下所示: public void setTitleTextSize(final int id){ infoButton = ((Activity) context).findViewById(R.id.info_button); ViewTreeObserver customTitleScale = infoButton.getViewTreeObserver(); customTitleS
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_按钮)时;infoButton.setVisibility(View.GONE)代码>对于活动,屏幕只是黑色的
所以我在想如何做到这一点,我唯一能做的就是向方法中传递一个布尔值,说明信息视图是否可见。我想我会做一个if语句,说‘如果为真,则显示它,如果为假,则不显示它,但我不知道如何做到这一点
任何帮助都将是惊人的,谢谢。尝试使用infoButton.getVisibility()方法
它将返回整数以获取小部件的可见性状态。我发现了我遇到的问题,对于if
语句if(infoWidth!=0)
,我的逻辑不正确。如果活动没有“信息”按钮,则代码不会运行,因为“信息宽度”始终为零。因此,我将逻辑更改为if(infoWidth!=0 | | |!displayInfoButton)
,这很好地工作。您不能在setTitleTextSize()
中添加一个boolean
参数,当true
时,应该将infoButton
的可见性设置为View.VISIBLE
和View.GONE
否则?是的,这就是我所做的,但我遇到的问题是,在可见性设置为GONE
的活动上,屏幕只显示黑色,无法理解为什么它不应该与视图
相关,是否可能该视图
的“下方”有黑色背景、黑色图像等?不,它在所有三个活动中都会执行,我不想让imageButton
显示,在logcat中我看不到任何可能的问题。我可以在logcat中看到一条消息,上面写着尝试完成输入事件,但输入事件接收器已被释放。