由于设置了横向方向,因此非常奇怪的错误

时间:2018-10-08 11:44:03

标签: android android-view android-custom-view android-orientation

我正在onCreate()的{​​{1}}方法内在运行时为某些设备设置横向方向 Activity

我有一个自定义视图,可以用

进行自我更新
setRequestedOrientation(android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

活动的onCreate()方法

private final Runnable mDraw = new Runnable() {
    @Override
    public void run() {
        if (mMeasurementController != null) {
            mMeasurementController.update();
        }
        invalidate();

        mHandler.removeCallbacks(this);
        mHandler.postDelayed(this, 1000 / 15);
    }
};

并用按钮触摸,我更改十进制数字以使用选定的十进制格式显示值

   protected void onCreate(Bundle savedInstanceState) {

        if (DisplayUtils.isTablet(ActivityClinometer.this)) {
            setRequestedOrientation(android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }


        super.onCreate(savedInstanceState);


        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);



        setContentView(R.layout.activity_clinometer);
        RelativeLayout layoutContainer = (RelativeLayout) findViewById(R.id.layout_main_container);


        // Add Fragment
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.add(R.id.layout_main_framelayout, new FragmentClinometer()).commit();

        // Set NavigationView with Header and Menu
        bindViews();

        System.out.println("Activity onCreate() " + this);

    }

当方向更改代码为,但如果设置了方向,则我首先获得新值,然后获得旧值,因此显示不会改变。

protected void changeDecimalFormat(int decimalDigit) {
    mDecimalDigit = decimalDigit;


    switch (decimalDigit) {
        case 0:
            mDecimalFormat.setMaximumFractionDigits(0);
            mDecimalFormat.setMinimumFractionDigits(0);

            mPaintText.setTextSize(realPx(150));


            break;

        case 1:
            mDecimalFormat.setMaximumFractionDigits(1);
            mDecimalFormat.setMinimumFractionDigits(1);

            mPaintText.setTextSize(realPx(120));

            break;

        case 2:

            mDecimalFormat.setMaximumFractionDigits(2);
            mDecimalFormat.setMinimumFractionDigits(2);

            mPaintText.setTextSize(realPx(110));
            break;


        case 3:

            mDecimalFormat.setMaximumFractionDigits(3);
            mDecimalFormat.setMinimumFractionDigits(3);

            mPaintText.setTextSize(realPx(100));


            break;
    }

不涉及线程,这是一个I/System.out: drawText() digit: mDecimalDigit: 3 I/System.out: drawText() digit: mDecimalDigit: 3 I/System.out: changeDecimalFormat() mDecimalDigit: 2 **I touch the button and change decimal digits to 2** I/System.out: drawText() digit: mDecimalDigit: 3 I/System.out: drawText() digit: mDecimalDigit: 2 I/System.out: drawText() digit: mDecimalDigit: 3 I/System.out: drawText() digit: mDecimalDigit: 2 I/System.out: drawText() digit: mDecimalDigit: 2 I/System.out: drawText() digit: mDecimalDigit: 3 I/System.out: drawText() digit: mDecimalDigit: 2 在UI线程上运行,没有其他方法可以更改View的值,并且只有在 mDecimalDigit在平板电脑上称为onCreate(),在其他任何地方都不会调用,否则代码可以正常工作。

为什么会这样?

此视图在片段内部,并且从xml文件中放大。创建Activity后运行的方法如下

setRequestedOrientation(android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

0 个答案:

没有答案