Balas kepada peristiwa set sistem (Kelas konfigurasi)


Pengenalan kepada bahagian ini:

Kelas Konfigurasi yang diperkenalkan dalam bahagian ini digunakan untuk menerangkan maklumat konfigurasi peranti telefon mudah alih, seperti orientasi skrin. Kaedah sentuh skrin sentuh, dsb. Saya percaya rakan-rakan yang telah menyesuaikan ROM harus tahu bahawa kita boleh: frameworks/base/core/java/android/content/res/Configuration.java Cari kelas ini, dan kemudian tukar tetapan yang berkaitan, seperti melaraskan saiz fon lalai! Jika anda berminat, anda boleh mengetahuinya sendiri! Penggunaan kelas Konfigurasi dijelaskan dalam bahagian ini dalam pembangunan Android kami~ Dokumentasi API: Konfigurasi


1 Senarai kaedah yang disediakan oleh Konfigurasi

  • densityDpi: Ketumpatan skrin
  • <. 🎜>
  • fontScale: Faktor penskalaan fon yang ditetapkan oleh pengguna semasa
  • hardKeyboardHidden: Menentukan sama ada papan kekunci keras kelihatan terdapat dua nilai pilihan: HARDKEYBOARDHIDDEN_NO , HARDKEYBOARDHIDDEN_YES, Mereka adalah perenambelasan 0 dan 1 masing-masing
  • papan kekunci: Dapatkan jenis papan kekunci yang berkaitan semasa: nilai pulangan atribut ini: KEYBOARD_12KEY (papan kekunci kecil dengan hanya 12 kekunci), KEYBOARD_NOKEYSB , KEYBOARD_QWERTY (papan kekunci biasa)
  • keyboardHidden: Atribut ini mengembalikan nilai boolean untuk mengenal pasti sama ada papan kekunci semasa tersedia. Sifat ini bukan sahaja menentukan papan kekunci perkakasan sistem, tetapi juga menentukan papan kekunci lembut sistem (terletak pada skrin).
  • tempat: Dapatkan tempat semasa pengguna
  • mcc: Dapatkan kod negara bagi isyarat mudah alih
  • mnc : Dapatkan kod rangkaian isyarat mudah alih ps: Kod negara dan kod rangkaian bersama-sama menentukan operator rangkaian telefon mudah alih semasa
  • navigasi: Tentukan jenis peranti navigasi pada sistem. Nilai pulangan atribut ini: NAVIGATION_NONAV (tiada navigasi), NAVIGATION_DPAD (navigasi DPAD) NAVIGATION_TRACKBALL (navigasi trackball), NAVIGATION_WHEEL (navigasi roda)
  • orientation: Dapatkan arah skrin sistem. Nilai pulangan atribut ini: ORIENTATION_LANDSCAPE (skrin mendatar), ORIENTATION_PORTRAIT (skrin menegak)
  • screenHeightDp, screenWidthDp: Ketinggian dan lebar skrin yang tersedia ditunjukkan oleh dp
  • skrin sentuh: Dapatkan mod sentuh skrin sentuh sistem. Nilai pulangan atribut ini: TOUCHSCREEN_NOTOUCH (tiada skrin sentuh), TOUCHSCREEN_STYLUS (skrin sentuh stylus), TOUCHSCREEN_FINGER (skrin sentuh yang menerima jari)

2. Tulis contoh mudah untuk menguji :

Menjalankan tangkapan skrin:

1.png

Pelaksanaan kod:

kelas awam MainActivity melanjutkan AppCompatActivity {

    @Override
    dilindungi kosong onCreate(Bundle savedInstanceState) {<🎜 >               super    setContentView(R.layout. activity_main);
        TextView txtResult = (TextView) findViewById(R.id.txtResult);
        StringBuffer status = new StringBuffer();<🎜 > 矎 珳廏ation对象
        Konfigurasi cfg = getResources ().getConfiguration();
        //②想查什么查什么
        status.append("densityDpi:" + cfg.densityDpi "  "ap pende");<🎜 + cfg.fontScale + "n");
        status.append("hardKeyboardHidden:" + cfg.hardKeyboardHidden + "n");
        status.append("keyboard:" +  "keyboard:" + );
        status.append("keyboardHidden:" + cfg.keyboardHidden + "n");
        status.append("locale:" + cfg.locale + "n">   + "n">);<          status. ("mcc:" + cfg.mcc + "n");
        status.append("mnc:" + cfg.mnc + "n");
        status.append("navigation:" + cfg. navigasi + "n");
        status.append("navigationHidden:" + cfg.navigationHidden + "n");
        status.append("orientation:" + cfg."orientation); + " 🎜>        status.append("screenHeightDp:" + cfg.screenHeightDp + "n");
        status.append("screenWidthDp:" + cfg.screenWidthDp 
         status.append("screenWidthDp:" + cfg.screenWidthDp <🎜"n">);        status.append("screenLayout:" + cfg.screenLayout + "n");
        status.append("smallestScreenWidthDp:" + cfg.densityDpi + "n");
 " touch.  append  + cfg.densityDpi + "n");
        status.append("uiMode:" + cfg.densityDpi + "n");
       txtResult.setText(status. to  String()); 🎜>}


3. Tulis semula onConfigurationChanged untuk bertindak balas kepada perubahan tetapan sistem

Kaedah ini digunakan untuk memantau perubahan dalam tetapan sistem. Ia adalah kaedah pemprosesan masa berasaskan panggilan balik perubahan, akan dicetuskan secara automatik; Tetapi sila ambil perhatian bahawa jika anda menggunakan kaedah berikut untuk memantau, atribut targetSdkVersion hanya boleh ditetapkan kepada maksimum 12. Jika lebih tinggi daripada 12, kaedah itu tidak akan dicetuskan! Berikut ialah contoh bertukar antara skrin mendatar dan menegak untuk rujukan anda Untuk maklumat lain, anda boleh Google~

Contoh kod: Butang mudah, klik untuk bertukar antara. skrin mendatar dan menegak, dan kemudian Petua Roti Bakar

Menjalankan pemaparan:

2.jpg3.jpg

Kod pelaksanaan:

kelas awam MainActivity melanjutkan Aktiviti {  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) { >       supersaved  
        setContentView(R.layout.activity_main);  
          
         Butang btn = (Butang) findViewById(R.id.btncahange);  
        btn.setOnClickListener(new OnClickListener() {  
              
            @ Override   <🎜 >                                                                        id 🎜>                Configuration config = getResources().getConfiguration();  
                //如果是横屏的话切换成竖屏  
                 if(config.orientation == Konfigurasi.ORIENTATION_LANDSKAP)  
                                                                                        MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
                }  
               如果竖屏的话切换成横屏   
                 if(config.orientation = Configuration.ORIENTATION_PORTRAIT)  
                                                                  MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);  
                   
            }  
}); > Skrin rentetan = newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ?"Skrin mendatar":"Skrin menegak"; + skrin, Toast.LENGTH_SHORT).show();
}
}


Selain itu, anda perlu menambah kandungan berikut pada AndroidManifest.xml:


Kebenaran:
< uses-permission android:name= "android.permission.CHANGE_CONFIGURATION" />
Tambahkan dalam teg aktiviti:
android:configChanges="orientation"

Tukar targetSdkVersion kepada 12 atau ke atas, 12 juga boleh diterima

Ringkasan bahagian ini: Bahagian ini menerangkan kepada anda: kelas Konfigurasi dan onConfigurationChanged bertindak balas kepada sistem perubahan tetapan Anda hanya perlu mempunyai pemahaman umum. Kami akan menggunakannya kemudian dan pergi lebih mendalam~