繁体   English   中英

具有活动上下文的Android问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM