Я устанавливаю альбомную ориентацию для некоторых устройств с включенным во время выполнения внутри onCreate()
методом Activity
setRequestedOrientation(android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
У меня есть пользовательское представление, которое обновляется с помощью
private final Runnable mDraw = new Runnable() {
@Override
public void run() {
if (mMeasurementController != null) {
mMeasurementController.update();
}
invalidate();
mHandler.removeCallbacks(this);
mHandler.postDelayed(this, 1000 / 15);
}
};
onCreate () метод Activity
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
Потоков не задействовано, это View
, который выполняется в потоке пользовательского интерфейса, нет других методов, которые изменяютзначение mDecimalDigit
, и это происходит только в том случае, если onCreate () для планшетов вызывается только setRequestedOrientation(android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
, нигде не вызывается, в противном случае код работает нормально.
Почему это происходит?
Это представление внутри фрагмента, и оно надувается из файла XML.Методы, запускаемые после создания действия, выглядят следующим образом:
I/System.out: Activity onCreate() ActivityClinometer@df4b71
I/System.out: Fragment onCreateView()
I/System.out: changeDecimalFormat() mDecimalDigit: 3
I/System.out: Activity onStop()
I/System.out: Activity onDestroy()
I/System.out: Activity onCreate() ActivityClinometer@6065131
I/System.out: Fragment onCreateView()
I/System.out: Fragment onCreateView()
I/System.out: changeDecimalFormat() mDecimalDigit: 3
I/System.out: changeDecimalFormat() mDecimalDigit: 3
I/System.out: changeDecimalFormat() mDecimalDigit: 3
I/System.out: changeDecimalFormat() mDecimalDigit: 3