移动设备旋转时活动屏幕未旋转

15

我使用了@gnobal在https://dev59.com/P3I95IYBdhLWcg3wvgl9#2700683上发布的代码,它非常有效。但我的问题是,当我应用Theme.Transparent时,当我旋转手机时,活动不会进入横屏模式。

主题:

 <style name="Theme.Transparent" parent="android:Theme.Dialog">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
  </style>

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/layoutImagen"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    android:orientation="vertical"
    android:windowContentOverlay="@null"
    android:windowNoTitle="true"
    tools:context=".ImagenExamen_activity" >

<!--     android:background="#CC000000" -->
<!--     android:backgroundDimEnabled="true" -->

    <ImageView
        android:id="@+id/imageViewImagen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />

</LinearLayout>

活动:

import android.app.Activity;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;

import com.meapp.Utilities;

public class Imagen_activity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_imagen_examen);

        Bundle b = getIntent().getExtras();
        String imagen = b.getString("imagen_name");
        int id = getResources().getIdentifier(imagen, "drawable", getPackageName());

        ImageView imageView = (ImageView) findViewById(R.id.imageViewImagen);


        // Determinacion tamaño fuente
        BitmapFactory.Options bitmapOpt = new BitmapFactory.Options();
        bitmapOpt.inJustDecodeBounds = true;
        BitmapFactory.decodeResource(getResources(), id, bitmapOpt);

        int[] screen_dim = Utilites.verDimensionesPantalla(this);


                // más eficiente si se usa una potencia de 2
        imageView.setImageBitmap(Utilities
                .decodeSampledBitmapFromResource(getResources(), id,
                        screen_dim[0], screen_dim[1], true));



        imageView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                cerrarImagen();
            }
        }); 


    }

    public void cerrarImagen() {
        ((Activity) this).finish();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.imagen_examen_, menu);
        return true;
    }

}

为什么不能旋转?我已经试过将windowIsFloating改为false,并更改其他参数,但没有成功。


Luis Martib Romera:你找到为什么在上述定义的主题下方向停止工作的原因了吗?我也遇到了同样的问题,但想知道原因。 - Sagar Trehan
4个回答

27

你可以查看这个

             android:screenOrientation="sensor"
or 
             android:screenOrientation="user" 

将它们中的一个添加到您的清单文件 <activity............../> 中。 如果您希望避免重新创建活动,请不要忘记在清单文件中也将此添加到您的应用程序中:android:configChanges="keyboardHidden|orientation|screenSize"


谢谢K0sh,问题已解决。我不明白为什么在普通的活动中你不必激活那个属性,但使用这个新主题却需要。无论如何,再次感谢! - Chelu Martín
这对我不起作用:(不确定为什么,我正在使用Jellybean的平板硬件,并且当我找到这个答案时感到高兴,但由于某种原因,平板电脑仍然不会在我告诉它时使用传感器的方向(我还将android:windowIsTranslucentandroid:windowIsFloating设置为true)。 - Daniel Wilson

15
如果您将android:windowIsTranslucentandroid:windowIsFloating设置为true,则旋转通知将被禁用(只要您不使用android:screenOrientation="sensor"强制启用它们)。

1
这就是让开发者远离Android平台的原因。你需要花费数月时间来熟悉Android的所有怪癖。 - milosmns
这个问题在于,即使用户只设置了竖屏模式,屏幕也会旋转... - Bitcoin Cash - ADA enthusiast

0

我有一个主题与android:windowIsTransluent,并且旋转停止。为了打开它,我尝试添加screenOrientation="sensor"到应用程序、主题和第一个活动中进行实验。只为第一个活动添加旋转会将所有活动的旋转都打开。


0

我曾经遇到过同样的问题。 在尝试任何解决方案之前,请确保启用了旋转功能,然后检查您的主屏幕是否可以旋转。如果不能旋转,请重新启动手机,问题将得到解决!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接