1

我很难强迫我的应用在 Google TV 上使用纵向模式。我知道这在技术上不受支持,但我觉得我应该能够以某种方式手动执行此操作,尤其是看到 Google Play 上的某些应用程序成功地在系统范围内强制执行此行为(例如: https: //play.google.com/store/apps /details?id=com.coinsoft.android.orientcontrolhttps://play.google.com/store/apps/details?id=nl.fameit.rotate&hl=en)。

在我的活动中,我正在做:

public void onStart() {
    View root = findViewById(android.R.id.content);     
    Animator anim = AnimatorInflater.loadAnimator(this, R.anim.rotate_90);                  
    anim.setTarget(root);
    anim.start();
}

我的rotate_90.xml:

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="0"
    android:propertyName="rotation"
    android:repeatCount="0"
    android:valueTo="90"
    android:valueType="floatType" />

这似乎有效,但当然不能完全符合我的要求。视图已旋转,但最左侧的所有项目现在都在屏幕外。有没有办法动态调整根布局的大小以适应纵向模式的屏幕?

4

2 回答 2

2

您是否有理由试图强制您的应用程序以设备不支持的方向运行?如果您无论如何都是从头开始编写应用程序(听起来很像),为什么不支持正确的屏幕方向呢?

于 2012-11-01T20:50:34.723 回答
1

当然,在发布之后,我想出了一些似乎可行的方法:

    View root = findViewById(android.R.id.content);


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

    root.getLayoutParams().height = width;
    root.getLayoutParams().width = height;
    root.requestLayout();

    root.setPivotX(height);
    root.setPivotY(height);

    Animator anim = AnimatorInflater.loadAnimator(this, R.anim.rotate_90);      
    anim.setTarget(root);
    anim.start();

任何更好的答案将不胜感激,但我认为这没有任何不利之处。

于 2012-10-31T19:50:50.143 回答