3

我遇到以下问题:当我将手机从纵向更改为横向时,我想要消失的图像。当我参加当前活动并且移动方向时,它工作得很好。如果我去其他活动并回来,它也可以工作得很好。但问题是,在我返回到主页面后,onConfigurationChanged()将不会在我第一次改变方向时被调用。当我返回时,图像将显示/不能正确显示,但当返回onConfigurationChanged()后我第一次改变方向时将不会被调用,并且图像将保持/不保持,直到第二次更改方向。任何帮助你们都会非常感激! 这是我的代码的几个部分。我已经把configChange-orientation权限放在清单中,所以这不成问题。onConfigurationChanged在我第一次从另一个活动返回时未被调用

@Override 
    public void onConfigurationChanged(Configuration newConfig) {L.p("configList",5200184); 
     super.onConfigurationChanged(newConfig); 

     if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE&&isVertical==true) { 

      Logo.setVisibility(ImageView.GONE); 
      mainLogo.setVisibility(ImageView.GONE); 
      isHorizontal=true; 

     } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT&&isHorizontal==true){ 

      Logo.setVisibility(ImageView.VISIBLE); 
      mainLogo.setVisibility(ImageView.VISIBLE); 
      isVertical=true; 
     } 
     } 




    @Override 
    protected void onResume() {L.p("onResumeList", 5200113); 
     super.onResume(); 
     Context ctx = getApplicationContext(); 
    WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 

     if((display.getOrientation() == Surface.ROTATION_90) || (display.getOrientation() == Surface.ROTATION_270)) 
      {//Horizontal 
      L.p("you are resuming horizontal",5200124); 
      Logo.setVisibility(ImageView.INVISIBLE); 
    mainLogo.setVisibility(ImageView.INVISIBLE);  
    isHorizontal=true; 
    //isVertical=false; 
      } 
     else {//Vertical 
      L.p("you are resuming vertical",5200131); 
    Logo.setVisibility(ImageView.VISIBLE); 
    mainLogo.setVisibility(ImageView.VISIBLE); 
    isVertical=true; 
    // isHorizontal=false; 
    } 
     tracker.trackPageView("/deviceList"); 
    } 

谢谢!

+0

我有同样的问题。你有没有设法修复它? – 2013-04-29 13:39:12

回答

0

无需覆盖方向更改。只需在layout-land文件夹中声明一个不包含图像(或图像设置为不可见/不存在)的新布局文件即可。在改变方向时,您的活动将在onCreate中加载该布局。

+0

我听说过这是不好的做法,但谢谢你的提示。我只想知道为什么onConfigurationChanged()不是第一次在从另一个活动返回后更改方向。如果我将它从水平移动到垂直,图像仍然消失。但是,然后我回到水平,然后垂直,它看起来应该是。 – 2012-02-15 01:11:01

+1

我个人从来没有听说过布局文件夹是“坏习惯”。任何为什么它被认为是这样的? – josephus 2012-02-15 01:35:24

+0

@tdevoy通过使用configChange进行黑客攻击是一种更好的做法。 – 2014-08-12 22:42:11

0

为什么你检查isHorizo​​ntal和isVertical? 它可能是其中一个是错误的,并导致它如果条件失败?

+1

没有那些肯定工作正确。我只是把他们作为一个额外的保卫,在onResume之后再次检查它是否知道以前的方向。一切正常,只是我第一次回到活动并改变手机的方向时,方向变化无法识别,我必须在调用onConfigurationChanged之前更改方向两次。谢谢你,还有其他想法吗? – 2012-02-15 01:06:47

0

的方法将不会被调用,除非你在AndroidManifest.xml宣布下<activity>各自的属性:

android:configChanges="orientation" 
+0

是的,这不是问题。问题是,当我从另一个活动返回时,onConfigurationChanged()将不会被称为第一次改变方向,但它会在每次之后被调用。你有什么想法吗? – 2012-02-15 01:12:38

+0

不太确定原因,但是您是否手动设置了活动的方向?如果是这样,该方法也不会被正确调用。我建议你创建一个新的Android项目,而不是放置任何代码而不是onConfigurationChanged()和startActivity(),这样你就可以观察行为。 – 2012-02-15 01:32:18

+0

从来没有,只是因为你可以使用configChange。 https://plus.google.com/109306462100800920982/posts/LuYGURGdX7Q查看Adam的评论。除非Android开发人员停止这样做,否则我不会休息。 @VictorWong – 2014-08-12 22:41:32

0

有可能是一个标志的地方造成问题的原因。而且,不幸的是,如果没有看到完整的代码,我们可能永远不会知道问题所在。

但是,请不要使用configChange黑客。 (https://plus.google.com/109306462100800920982/posts/LuYGURGdX7Q可以很好地解释什么时候它是好的极少数情况)。

最有可能的是,onConfigurationChanged方法在这里根本不需要被覆盖。在配置更改时重新创建活动时进行不同的布局。

相关问题