2013-12-20 17 views
5

I umgesetzt onConfigurationChnage (..) Wert Sichthöhe und -breite auf Ausrichtung Konfiguration chnageFalsche Ansicht Höhe/Breite bei Ausrichtung ändern?

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 

     DisplayMetrics displaymetrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
     int height = displaymetrics.heightPixels; 
     int width = displaymetrics.widthPixels; 

     Log.i(TAG, "onConfigurationChanged: "+newConfig.orientation+", "+height+", "+width + ", "+mTempeFrameLayout.getWidth()); 
    } 

aber immer antworten alten Wert zu lesen, wenn Ausrichtung es letzte Orientierung erhalten ändern (wahrscheinlich) Wert gab.

Bildschirm Breite/Höhe mit Displaymetrics kommt richtig, aber das gleiche funktioniert nicht für jede Ansicht.

Jeder hat eine Idee..wie kann der richtige Wert für die Orientierung bekommen?

+0

@ Sanket990 nicht funktioniert dear..but Nitesh Antwort Arbeit hier :) – CoDe

Antwort

12

getWidth() gibt die Breite zurück, wenn die Ansicht angelegt ist, was bedeutet, dass Sie warten müssen, bis sie auf den Bildschirm gezeichnet wird. onConfigurationChanged wird aufgerufen, bevor die Ansicht für die neue Konfiguration neu gezeichnet wird. Daher glaube ich nicht, dass Sie die neue Breite erst später abrufen können.

@Override 
public void onConfigurationChanged(Configuration newConfiguration) { 
    super.onConfigurationChanged(newConfiguration); 
    final View view = findViewById(R.id.scrollview); 

    ViewTreeObserver observer = view.getViewTreeObserver(); 
    observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

     @Override 
     public void onGlobalLayout() { 
      Log.v(TAG, 
        String.format("new width=%d; new height=%d", view.getWidth(), 
          view.getHeight())); 
      view.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
     } 
    }); 
} 
+0

tat es funktionierte

@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { configHome(); view.getViewTreeObserver().removeGlobalOnLayoutListener(this); } }); } } 

, weil die oben genannte Antwort nicht funktionierte verwenden musste .. ..? –

+0

Danke, es funktioniert :) – CoDe

0

ich für mich

Verwandte Themen