Android如何在设备旋转时保持 View 方向不变

标签 android android-layout

有几个堆栈溢出问题涉及将 Activity 保持在恒定方向,建议设置 android:screenOrientation (或 this )或到 deal with the configuration changes manually .

但是,如果想要为大多数 View 保留自动布局的好处,但要使一个 View 保持不变的方向,那么这些答案并不能解决问题。例如,我有一个内容主视图(位图)和可选的几个“工具栏”。当设备从纵向旋转到横向时,我希望工具栏自动重新布局。另一方面,主内容 View 有一个位图,它应该随设备旋转。这是我在 onDraw 中使用的一个简单代码:

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Bitmap bm = ... // code to get a bitmap
        if (bm != null) {
            canvas.drawBitmap(bm,0,0,mPaint);
        }
    }

这显然不能按预期工作,因为当设备方向发生变化时, View 会重新布局,并且其坐标系会在此方向上相对于物理设备旋转 90 度。对此进行补偿的一种方法是,如果设备方向已更改,则使用 Matrix 对象绘制旋转 90 度的位图。然而,为了使 View 输入点和位图上的点保持一致,输入坐标也必须更改。

因此,经过这么长的解释后,我的问题是:我能否保持 View ,使其相对于设备的坐标系在方向改变时不旋转。

这是一张图片,表达了我想要的和我目前得到的(还说明了 View 的 xy 坐标系)。

enter image description here

最佳答案

在 list xml 中的 Activity 中使用具有纵向值的屏幕方向属性

喜欢

 <activity
        android:name=".YourActivityName"
        android:screenOrientation="portrait" >
    </activity>

关于Android如何在设备旋转时保持 View 方向不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20771636/

相关文章:

android - ListView 项目长单击不适用于 ImageView(可点击)

java - 如何将 JPG URL 远程图像转换为位图?

Android 3.1 对话框大小不合适

java - 如何在周三下午 1 点(每周一次)在 Android 中重复闹钟

android - 禁用 Firebase 云消息传递的分析服务

android - 并排具有相同标高的两个 View

android - 如果在 OnCreateView 之外使用,findViewById 返回 null

android - FlatList 从列表底部上拉

java - 将 GetCheckedRadioButtonId() 与外部单选按钮组一起使用

android - 设置 ScrollView 内元素相对于屏幕的高度