Quali sono i passaggi per creare un metodo di input personalizzato in Android?
The method getBaseContext() is only relevant when you have a ContextWrapper.
Android provides a ContextWrapper class that is created around an existing Context using:
- ContextWrapper wrapper = new ContextWrapper(context);
The benefit of using a ContextWrapper is that it lets you “modify behavior without changing the original Context”. For example, if you have an activity called myActivity then can create a View with a different theme than myActivity:
- ContextWrapper customTheme = new ContextWrapper(myActivity) {
- @Override
- public Resources.Theme getTheme() {
- return someTheme;
- }
- }
- View myView = new MyView(customTheme);
ContextWrapper is really powerful because it lets you override most functions provided by Context including code to access resources (e.g. openFileInput(), getString()), interagire con altri componenti (ad esempio sendBroadcast(), registerReceiver()), richiedere permessi (ad esempio checkCallingOrSelfPermission()) e risolvere posizioni del file system (ad esempio getFilesDir()). ContextWrapper è davvero utile per lavorare intorno a problemi specifici di dispositivi/versioni o per applicare personalizzazioni una tantum a componenti come le viste che richiedono un contesto.
Il metodo getBaseContext() può essere usato per accedere al contesto "base" che il ContextWrapper avvolge. You might need to access the “base” context if you need to, for example, check whether it’s a Service, Activity or Application:
- public class CustomToast {
- public void makeText(Context context, int resId, int duration) {
- while (context instanceof ContextWrapper) {
- context = context.baseContext();
- }
- if (context instanceof Service)) {
- throw new RuntimeException("Cannot call this from a service");
- }
- ...
- }
- }
Or if you need to call the “unwrapped” version of a method:
- class MyCustomWrapper extends ContextWrapper {
- @Override
- public Drawable getWallpaper() {
- if (BuildInfo.DEBUG) {
- return debugBackground;
- } else {
- return getBaseContext().getWallpaper();
- }
- }
- }
Articoli simili
- Qual è la migliore app per il metodo di input su piattaforme mobili come iOS e Android? Perché?
- SwiftKey è un metodo di input più veloce di Swype/SlideIT?
- Possiamo collegare Android Auto in modalità wireless in India? Se sì, quali sono i passaggi?
- Quali sono alcuni passaggi essenziali per modificare una foto scattata con un telefono per darle un aspetto professionale?