Android问题与活动上下文

时间:2014-04-22 15:51:23

标签: java android

所以我有一个帮助器类,它在应用程序中重用了很多代码,其中一个方法如下所示:

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声明说'如果是真的那么显示它,如果是假则不要但我无法弄清楚如何做到这一点。

任何帮助都会非常棒。

2 个答案:

答案 0 :(得分:0)

尝试使用方法infoButton.getVisibility() 它将返回整数以获得您的小部件的可见性状态。

答案 1 :(得分:0)

我想出了我遇到的问题,if语句if(infoWidth !=0)我的逻辑不正确。如果活动没有信息按钮,则代码未运行,因为infoWidth始终为零。所以我将逻辑改为if(infoWidth !=0 || !displayInfoButton),这完全有效。