Android: Drehen Sie das gesamte Layout

Ich muss in der Lage sein, ganze Layouts on the fly (auf Knopfdruck) zu drehen.

Ich bin in der Lage, die Layouts mit zB zu drehen. layout.setRotation(270.0f) . Das Problem ist, nach der Rotation, die Layout- height und width sind nicht übereinstimmen ihre Eltern .

  • AsyncTask; DoInbackground () nicht nach Aufruf der Methode onPreExecute () aufgerufen
  • RxJavaCallAdapterFactory kann nicht in Factory konvertiert werden
  • Chat App mit Firebase: Benachrichtigung erhalten, wenn neue Nachricht empfangen wird - Android
  • Zeichnen Sie eine glatte Linie
  • Deaktivieren Sie Pinch Zoom in WebView?
  • Clear SingleChoice ListView auswählen
  • Ich habe versucht, umzukehren height und width wie so,

     RelativeLayout layout = (RelativeLayout)findViewById(R.id.rootLayout); LayoutParams layoutParams = layout.getLayoutParams(); int height = layout.getHeight(); int width = layout.getWidth(); layoutParams.height = width; layoutParams.width = height; 

    Was gar nichts macht

    Ich arbeite mit sdk 14 .

    Das erste Bild unten ist die App, wie es beginnt. Die zweite, nach einer drehung Ich möchte den schwarzen "Raum" füllen. Jede Hilfe wäre willkommen.

    Die Bilder unten zeigen nur eine Schaltfläche im Layout. Allerdings ist das Layout in Wirklichkeit viel komplexer. Was ich zu erreichen versuche, ist eine "Landschaftsansicht".

    Beim StartNach der drehung

    Bearbeiten: Geänderte Bilder und weitere Beschreibungen.

  • Übertragen von Daten zwischen iOS und Android über Bluetooth?
  • Phonegap Build App mit Crosswalk Absturz auf Android
  • Loader und LoaderManager - wie kann man feststellen, ob ein aktueller Loader aktiv ist und läuft?
  • Wie man Androide Quelle in IntelliJ 10 anhängt?
  • Android AppBarLayout schiebt ViewPager herunter
  • Zeichne Multi-Objekt-Diagramm in Fragment
  • 8 Solutions collect form web for “Android: Drehen Sie das gesamte Layout”

    Nicht sicher, warum das nützlich ist, aber es ist ein schönes Puzzle. Hier ist etwas, das für mich arbeitet:

    Auf drehen klicken, dies tun:

     RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.main); int w = mainLayout.getWidth(); int h = mainLayout.getHeight(); mainLayout.setRotation(270.0f); mainLayout.setTranslationX((w - h) / 2); mainLayout.setTranslationY((h - w) / 2); ViewGroup.LayoutParams lp = (ViewGroup.LayoutParams) mainLayout.getLayoutParams(); lp.height = w; lp.width = h; mainLayout.requestLayout(); 

    Und das Layout:

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:id="@+id/main" android:layout_height="match_parent" android:background="#ffcc88" tools:context=".TestRotateActivity" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Test" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" /> <Button android:id="@+id/rotate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Rotate" android:layout_centerInParent="true" /> </RelativeLayout> 

    Versuchen Sie diesen Code:

     btnRotate.setOnClickListener(new OnClickListener() { @SuppressLint("NewApi") @Override public void onClick(View v) { int orientation = getResources().getConfiguration().orientation; switch(orientation) { case Configuration.ORIENTATION_LANDSCAPE: llparent.setRotation(270.0f); RelativeLayout.LayoutParams layoutParams_LandsScape = new RelativeLayout.LayoutParams( rlRoot.getHeight(), rlRoot.getWidth()); layoutParams_LandsScape.setMargins( rlRoot.getTop(), rlRoot.getRight(), rlRoot.getBottom(), rlRoot.getLeft()); layoutParams_LandsScape.addRule(RelativeLayout.CENTER_IN_PARENT); llparent.setLayoutParams(layoutParams_LandsScape); break; case Configuration.ORIENTATION_PORTRAIT: llparent.setRotation(270.0f); RelativeLayout.LayoutParams layoutParams_Portrait = new RelativeLayout.LayoutParams( rlRoot.getHeight(), rlRoot.getWidth()); layoutParams_Portrait.setMargins( 0, 0, rlRoot.getBottom(), rlRoot.getLeft()); layoutParams_Portrait.addRule(RelativeLayout.CENTER_IN_PARENT); llparent.setLayoutParams(layoutParams_Portrait); break; } } }); } 

    Und XML:

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".RotateAnim"> <RelativeLayout android:id="@+id/rlroot" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#090"> <LinearLayout android:id="@+id/llParent" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#900" android:gravity="center" android:orientation="vertical"> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:text="Button"/> </LinearLayout> </RelativeLayout> </RelativeLayout> 

    Wenn Sie den Bildschirm buchstäblich drehen möchten, können Sie eine Bildschirmausrichtung erzwingen . Ansonsten gibt es keinen einfachen Weg zu tun, was du versuchst zu tun, als View.setRotation(float) wird immer die View in seiner "echten" Grenzen und dann drehen sie! Was ich vorschlug, ist sorgfältig zu prüfen, welche Elemente des Layouts gedreht werden sollen und dann diese speziell zu drehen.

    Die einzige wahre "automatische" Art, es zu erreichen, wäre, ein individuelles Layout zu schaffen, das im Wesentlichen Maßnahmen, Layouts und zieht Kinder gedreht … Ehrlich gesagt würde ich nur dorthin gehen, wenn ich wirklich wirklich brauche und es ist wahrscheinlich mehr Mühe, als es wert ist Nein

    Ich schlage vor, dass Sie nur den Knopf drehen, anstatt das ganze Layout zu drehen

     btn_rotate.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { rotation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.rotate); rotation.setFillAfter(true); btn_rotate.startAnimation(rotation); } }); 

    Rotate.xml

     <set> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="0" android:fromDegrees="270" android:pivotX="50%" android:pivotY="50%" android:startOffset="0" android:toDegrees="270" /> </set> 

    Einfache und knifflige Möglichkeit, die Bildschirmausrichtung entlang des Button-Klicks zu machen .. mit einem Beispiel ..

    Hier verwende ich die sharedPreference (Im Einstellung eines booleschen Wertes basierend auf Orientierung)

    Methode für die Schaltfläche onClick.

     public void rotate(View v) { edt = prefs.edit(); if (!prefs.getBoolean("screen_protrait", true)) { edt.putBoolean("screen_protrait", true); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } else { edt.putBoolean("screen_protrait", false); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } edt.commit(); } 

    In xml setzen Sie eine onClick-Methode für die Schaltfläche "Drehen"

      <Button android:id="@+id/bt_rotate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:onClick="rotate" android:text="Rotate" /> 

    Letztes, ist in onCreate von Aktivität, die Sie die Prefernce von Application..as setzen möchten

      prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 

    Halten Sie Codierung .. Sie können Ihr Ziel erreichen … Lassen Sie mich wissen, wenn es mit Ihrem Szenario arbeitet.

    Versuchen Sie, Ihre Layout-Params an match_parent nach der Umdrehung zu setzen:

     layout.setRotation(270.0f) 

    und dann

     RelativeLayout layout = (RelativeLayout) findViewById(R.id.rootLayout); layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 

    EDIT: get die parentView View parent = layout.getParent(); Und legen Sie die Breite und Höhe der übergeordneten Ansicht auf Ihr Layout, wie Sie es benötigen – in der Breite zu der Höhe und umgekehrt.

    Versuchen Sie diesen Code:
    (RelativeLayoutOuterFrame) Es ist der Name deines Layouts, in dem du dich drehen möchtest.

    Eigentlich drehen wir nicht das Layout. Wir ändern nur die Höhe ein Breitenwert.

      int w = RelativeLayoutOuterFrame.getWidth(); int h = RelativeLayoutOuterFrame.getHeight(); ViewGroup.LayoutParams lp = (ViewGroup.LayoutParams) RelativeLayoutOuterFrame.getLayoutParams(); lp.height = w; lp.width = h; RelativeLayoutOuterFrame.setGravity(RelativeLayout.CENTER_IN_PARENT); RelativeLayoutOuterFrame.setGravity(RelativeLayout.CENTER_HORIZONTAL); RelativeLayoutOuterFrame.requestLayout(); 

    Android: alternatives Layout xml für den Landschaftsmodus

    Wie ich mich erinnern kann, solltest du ein neues Layout für die horizontale Ansicht definieren. Ich denke, dieser Link kann dir helfen

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.