Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 活动上下文的Android问题_Java_Android - Fatal编程技术网

Java 活动上下文的Android问题

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

因此,我有一个helper类,它在整个应用程序中重用了大量代码,其中一个方法如下所示:

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中看到一条消息,上面写着
尝试完成输入事件,但输入事件接收器已被释放。