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方法在這裏根本不需要被覆蓋。在配置更改時重新創建活動時進行不同的佈局。

相關問題