Répondre aux événements définis par le système (classe de configuration)


Introduction à cette section :

La classe Configuration introduite dans cette section est utilisée pour décrire les informations de configuration des appareils de téléphonie mobile, telles que l'orientation de l'écran. La méthode tactile de l'écran tactile, etc. Je pense que les amis qui ont personnalisé la ROM devraient savoir que nous pouvons : frameworks/base/core/java/android/content/res/Configuration.java Recherchez cette classe, puis modifiez les paramètres pertinents, tels que l'ajustement de la taille de police par défaut ! Si vous êtes intéressé, vous pouvez le découvrir par vous-même ! L'utilisation de la classe Configuration expliquée dans cette section dans notre développement Android~ Documentation API : Configuration


1. Liste des méthodes fournies par Configuration

  • densityDpi : Densité d'écran
  • fontScale : Le facteur de mise à l'échelle de la police défini par l'utilisateur actuel
  • hardKeyboardHidden : Détermine si le clavier physique est visible. Il existe deux valeurs facultatives : HARDKEYBOARDHIDDEN_NO. , HARDKEYBOARDHIDDEN_YES, Ils sont respectivement hexadécimaux 0 et 1
  • clavier : Récupère le type de clavier actuellement associé : la valeur de retour de cet attribut : KEYBOARD_12KEY (un petit clavier avec seulement 12 touches), KEYBOARD_NOKEYS , KEYBOARD_QWERTY (clavier normal)
  • keyboardHidden : Cet attribut renvoie une valeur booléenne pour identifier si le clavier actuel est disponible. Cette propriété détermine non seulement le clavier matériel du système, mais détermine également le clavier logiciel du système (situé sur l'écran).
  • locale : obtenez la langue locale actuelle de l'utilisateur
  • mcc : obtenez l'indicatif du pays du signal mobile
  • mnc  : Obtenez le code réseau du signal mobile
    ps : L'indicatif du pays et l'indicatif réseau déterminent conjointement l'opérateur actuel du réseau de téléphonie mobile
  • navigation : Déterminez le type de appareil de navigation sur le système. La valeur de retour de cet attribut : NAVIGATION_NONAV (pas de navigation), NAVIGATION_DPAD (navigation DPAD) NAVIGATION_TRACKBALL (navigation trackball), NAVIGATION_WHEEL (navigation par roue)
  • orientation : obtenez la direction de l'écran du système. La valeur de retour de cet attribut : ORIENTATION_LANDSCAPE (écran horizontal), ORIENTATION_PORTRAIT (écran vertical)
  • screenHeightDp, screenWidthDp : La hauteur et la largeur disponibles de l'écran sont représentées par dp
  • écran tactile : obtenez le mode tactile de l'écran tactile du système. La valeur de retour de cet attribut : TOUCHSCREEN_NOTOUCH (pas d'écran tactile), TOUCHSCREEN_STYLUS (écran tactile stylet), TOUCHSCREEN_FINGER (écran tactile qui reçoit les doigts)

2. Écrivez un exemple simple à tester :

Capture d'écran en cours d'exécution :

1.png

Implémentation du code :

classe publique MainActivity étend App CompatActivity {

    @Override
    protected  void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout. Activity_main);
        TextView txtResult = (TextView) findViewById(R.id.txtResult);
        StringBuffer status = new StringBuffer();
        //①获取系统的Configuration对象
        Configuration cfg = getResources ().getConfiguration();
        //②想查什么查什么
        status.append("densityDpi:" + cfg.densityDpi + "n");
        status.append("fontScale:" + cfg.fontScale + "n");
        status.append("hardKeyboardHidden:" + cfg.hardKeyboardHidden + "n");
        status.append("keyboard:" + cfg.keyboard + "n" );
        status.append("keyboardHidden:" + cfg.keyboardHidden + "n");
        status.append("locale:" + cfg.locale + "n");
        status.append ("mcc:" + cfg.mcc + "n");
        status.append("mnc:" + cfg.mnc + "n");
        status.append("navigation:" + cfg. navigation + "n");
        status.append("navigationHidden:" + cfg.navigationHidden + "n");
        status.append("orientation:" + cfg.orientation + "n");
        status.append("screenHeightDp:" + cfg.screenHeightDp + "n");
        status.append("screenWidthDp:" + cfg.screenWidthDp + "n");
        status.append("screenLayout:" + cfg.screenLayout + "n");
        status.append("smallestScreenWidthDp:" + cfg.densityDpi + "n");
        status.append("touchscreen:" + cfg.densityDpi + "n");
        status.append("uiMode:" + cfg.densityDpi + "n");
        txtResult.setText(status.toString());
    }
}

3. Réécrivez onConfigurationChanged pour répondre aux modifications des paramètres du système

Cette méthode est utilisée pour surveiller les modifications des paramètres du système. Il s'agit d'une méthode de traitement du temps basée sur le rappel lorsque les paramètres du système. changement, sera déclenché automatiquement ; Mais veuillez noter que si vous utilisez la méthode suivante pour surveiller, l'attribut targetSdkVersion ne peut être défini qu'à un maximum de 12. S'il est supérieur à 12, la méthode ne sera pas déclenchée ! Voici un exemple de basculement entre les écrans horizontaux et verticaux pour votre référence. Pour d'autres informations, vous pouvez le rechercher sur Google~

Exemple de code : Un simple bouton, cliquez pour basculer entre les écrans horizontaux et verticaux. écrans horizontaux et verticaux, puis Toast Tips

Exécution du rendu :

2.jpg3.jpg

Code d'implémentation :

classe publique MainActivity étend l'activité {  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
         
        Bouton btn = (Bouton) findViewById(R.id.btncahange);  
        btn.setOnClickListener(new OnClickListener() {  
              
            @Override   
            public void onClick(View v) {  
                Configuration config = getResources().getConfiguration();  
                //如果是横屏的话切换成竖屏  
                if(config.orientation == Configuration.ORIENTATION_LANDSCAPE)  
                 {  
                    MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
               }  
                //如果竖屏的话切换成横屏  
                if(config.orientation == Configuration.ORIENTATION_PORTRAIT)  
                 {  
                     MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);  
               }  
            }  
}); > String screen = newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ?"Horizontal screen":"Écran vertical";
Toast.makeText(MainActivity.this, "L'orientation de l'écran du système a changé n L'orientation modifiée est" + screen, Toast.LENGTH_SHORT).show();
}
}


De plus, vous devez ajouter le contenu suivant à AndroidManifest.xml :


Autorisation :
<uses-permission android:name= "android.permission.CHANGE_CONFIGURATION" />
Ajouter la balise d'activité < >Changez targetSdkVersion en 12 ou plus, 12 est également acceptable

Résumé de cette section : Cette section vous explique : la classe Configuration et onConfigurationChanged répondent au système les modifications de paramètres. Il vous suffit d’avoir une compréhension générale. Nous l'utiliserons plus tard et approfondirons~