所以我有一个帮助器类,它在应用程序中重用了很多代码,其中一个方法如下所示:
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);
时,屏幕只是黑色。
所以我在考虑如何做到这一点,我唯一能做的就是将一个布尔值传递给方法,说明信息视图是否可见。我想我会做一个if声明说'如果是真的那么显示它,如果是假则不要但我无法弄清楚如何做到这一点。
任何帮助都会非常棒。
答案 0 :(得分:0)
尝试使用方法infoButton.getVisibility() 它将返回整数以获得您的小部件的可见性状态。
答案 1 :(得分:0)
我想出了我遇到的问题,if
语句if(infoWidth !=0)
我的逻辑不正确。如果活动没有信息按钮,则代码未运行,因为infoWidth始终为零。所以我将逻辑改为if(infoWidth !=0 || !displayInfoButton)
,这完全有效。