Android学习笔记-Lesson 5: Flag Quiz Game App (2)

1, preferences

// set default values in the app's SharedPreferences
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);

// register listener for SharedPreferences changes
PreferenceManager.getDefaultSharedPreferences(this).
registerOnSharedPreferenceChangeListener(
preferenceChangeListener);

2, 设备尺寸相关,判断设备属于哪个level的设备

 // determine screen size 
      int screenSize = getResources().getConfiguration().screenLayout &
         Configuration.SCREENLAYOUT_SIZE_MASK;

      // if device is a tablet, set phoneDevice to false
      if (screenSize == Configuration.SCREENLAYOUT_SIZE_LARGE ||
         screenSize == Configuration.SCREENLAYOUT_SIZE_XLARGE )
         phoneDevice = false; // not a phone-sized device
         
      // if running on phone-sized device, allow only portrait orientation
      if (phoneDevice) 
         setRequestedOrientation(
            ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

3, 判断屏幕是横屏还是竖屏

 Display display = ((WindowManager) 
         getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
      Point screenSize = new Point(); // used to store screen size
      display.getRealSize(screenSize); // store size in screenSize
      
      // display the app's menu only in portrait orientation
      if (screenSize.x < screenSize.y) // x is width, y is height
      {
         getMenuInflater().inflate(R.menu.main, menu); // inflate the menu      
         return true;
      }
      else
         return false;

4, java.secure.SecureRandom 与 java.util.Random 的区别

    SecureRandom继承于Random,提供更为随机的序列。我们都知道随机数并不随机,SecureRandom就降低了根据前一个随机数猜测到后一个随机数的可能性,使得序列更加随机化。

5,Fragment的lifecycle:转自http://www.cnblogs.com/purediy/p/3276545.html

Android学习笔记-Lesson 5: Flag Quiz Game App (2)

Fragment与Activity生命周期对比图:

Android学习笔记-Lesson 5: Flag Quiz Game App (2)

    生命周期分析:

    1. 当一个fragment被创建的时候,它会经历以下状态.

    • onAttach()

    • onCreate()

    • onCreateView()

    • onActivityCreated()

    2. 当这个fragment对用户可见的时候,它会经历以下状态。

    • onStart()

    • onResume()

    3. 当这个fragment进入“后台模式”的时候,它会经历以下状态。

    • onPause()

    • onStop()

    4. 当这个fragment被销毁了(或者持有它的activity被销毁了),它会经历以下状态。

    • onPause()

    • onStop()

    • onDestroyView()

    • onDestroy() 

    • onDetach()

    5. 就像activitie一样,在以下的状态中,可以使用Bundle对象保存一个fragment的对象。

    • onCreate()

    • onCreateView()

    • onActivityCreated()

    6. fragments的大部分状态都和activitie很相似,但fragment有一些新的状态。

    • onAttached() —— 当fragment被加入到activity时调用(在这个方法中可以获得所在的activity)。

    • onCreateView() —— 当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout(界面)。

    • onActivityCreated() —— 当activity的onCreated()方法返回后调用此方法

    • onDestroyView() —— 当fragment中的视图被移除的时候,调用这个方法。

    • onDetach() —— 当fragment和activity分离的时候,调用这个方法。

      一旦activity进入resumed状态(也就是running状态),你就可以自由地添加和删除fragment了。因此,只有当activity在resumed状态时,fragment的生命周期才能独立的运转,其它时候是依赖于activity的生命周期变化的。

6, annimation

resource文件:incorrect_shake.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android"
   android:interpolator="@android:anim/decelerate_interpolator">

   <translate android:fromXDelta="0" android:toXDelta="-5%p" 
      android:duration="100"/>
   
   <translate android:fromXDelta="-5%p" android:toXDelta="5%p" 
      android:duration="100" android:startOffset="100"/>
   
   <translate android:fromXDelta="5%p" android:toXDelta="-5%p" 
      android:duration="100" android:startOffset="200"/>
</set>

Java Code:

private Animation shakeAnimation; // animation for incorrect guess

// load the shake animation that's used for incorrect answers
      shakeAnimation = AnimationUtils.loadAnimation(getActivity(), 
         R.anim.incorrect_shake); 
      shakeAnimation.setRepeatCount(3); // animation repeats 3 times 
      
XX.startAnimation(shakeAnimation); // XX is the component which wants to play shake


你可能感兴趣的:(Android学习笔记-Lesson 5: Flag Quiz Game App (2))