如何应对设备旋转问题

因为安卓手机有屏幕自动旋转的功能,而横屏与竖屏对APP的视图变化有很大的影响,我们能够通过不同的方式来使这个影响降到最低


设置固定住屏幕方向:

landspace:使屏幕永远保持横屏,手机正常方向逆时针旋转90度;

portrait:使屏幕永远保持竖屏,即手机的正常方向;

当不设置固定屏幕方向时:

此时就得考虑在代码中解决横屏与竖屏所产生的问题

背景:每一次切换方向都是一次Activity的销毁与重建,这个过程不可,也不能避免,否则布局不会发生变化

解决办法:①创建两种状态时的不同布局

                ②保存数据使得状态的改变不会造成数据的丢失

代码:

#acticit_main.xml#


MainActivity.java
package com.example.root.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import static android.view.View.*;
public class MainActivity extends AppCompatActivity {private static final String TAG = "MainActivity";private static final String KEY_INDEX = "index";private Button mTrueButton;private Button mFalseButton;private Button mNextButton;private Button mPREVButton;private TextView mQuestionTextView;private Question[] mQuestionBank = new Question[] {new Question(R.string.question_australia,true),new Question(R.string.question_oceans, true),new Question(R.string.question_mideast,  true),new Question(R.string.question_africa, true),new Question(R.string.question_americas, true),new Question(R.string.question_asia, true)};private int mCurrentIndex = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.d(TAG, "onCreate(Bundle) called");setContentView(R.layout.activit_main);if(savedInstanceState != null){mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, 0);}mQuestionTextView = (TextView) findViewById(R.id.question_text_view);mQuestionTextView.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){mCurrentIndex = (mCurrentIndex + 1) % mQuestionBank.length;updateQuestion();}});mTrueButton = (Button) findViewById(R.id.true_button);mTrueButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v){checkAnswer(true);}});mFalseButton = (Button) findViewById(R.id.false_button);mFalseButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v){checkAnswer(false);}});mNextButton = (Button) findViewById(R.id.next_button);mNextButton.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){mCurrentIndex = (mCurrentIndex + 1) % mQuestionBank.length;updateQuestion();}});mPREVButton = (Button) findViewById(R.id.prev_button);mPREVButton.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){mCurrentIndex = (mCurrentIndex - 1 + mQuestionBank.length) % mQuestionBank.length;updateQuestion();}});updateQuestion();}@Overrideprotected void onStart(){super.onStart();Log.d(TAG, "onStart() called");}@Overrideprotected void onResume(){super.onResume();Log.d(TAG, "onResume() called");}@Overrideprotected void onPause(){super.onPause();Log.d(TAG, "onPause() called");}@Overridepublic void onSaveInstanceState(Bundle savedInstanceState){super.onSaveInstanceState(savedInstanceState);Log.i(TAG, "onSaveInstanceState");savedInstanceState.putInt(KEY_INDEX, mCurrentIndex);}@Overrideprotected void onStop(){super.onStop();Log.d(TAG, "onStop() called");}@Overrideprotected void onDestroy(){super.onDestroy();Log.d(TAG, "onDestroy() called");}private void updateQuestion(){int question = mQuestionBank[mCurrentIndex].getTextResId();mQuestionTextView.setText(question);}private void checkAnswer(boolean userPressedTrue){boolean answerIsTrue = mQuestionBank[mCurrentIndex].isAnswerTrue();int messageResId = 0;if(userPressedTrue == answerIsTrue){messageResId = R.string.correct_toast;}else{messageResId = R.string.incorrect_toast;}Toast.makeText(this, messageResId, Toast.LENGTH_SHORT).show();}
}

结果截图:



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部