Activité récente sur le site

Android‎ > ‎

Utilisation de thèmes externes.

Avec Android, il est facile d'utiliser une activité d'une autre application. Il suffit de connaitre l'action à déclencher et d'utiliser startActivity(intent).
Cela déclenche l'affichage de l'activité d'une autre application, mais utilise alors la feuille de style de cette dernière.
Comment demander l'exécution d'une activité tous en maîtrisant la feuille de style ?

Nous proposons un petit code permetant de faire cela. Il suffit d'ajouter dans l'intent, si on le souhaite, deux Extras. Le premier avec le nom de l'application ou puiser la feuille de style, et le deuxième avec la référence du style à appliquer.

class MyActivity extends Activity
{
  private Resources.Theme mTheme = null;
  private int mThemeResource;
  private Resources mResources;

  @Override
  public Resources.Theme getTheme() 
  {
    if (mTheme == null) 
    {
      if (mThemeResource == 0) 
      {
        mTheme=super.getTheme();
        return mTheme;
      }
      mTheme = mResources.newTheme();
      mTheme.applyStyle(mThemeResource, true);
    }
    return mTheme;
  }
  @Override
  public void setTheme(int resid)
  {
    mThemeResource = resid;
  }

  public static final String EXTRA_THEME_APPNAME="theme.app";
  public static final String EXTRA_THEME_ID="theme.id";
  public static final String ACTION_CONNECT="org.remoteandroid.action.Connect";
  @Override
  protected void onCreate(Bundle savedInstanceState)
  {
    mResources=getResources();
    Intent intent=getIntent();
    String themeApp=intent.getStringExtra(EXTRA_THEME_APPNAME);
    int themeId=intent.getIntExtra(EXTRA_THEME_ID,0);
    if (themeApp!=null && themeId!=0)
    {
      try
      {
mResources=getPackageManager().getResourcesForApplication(themeAPp);
setTheme(themeId);
      }
      catch (NameNotFoundException e)
      {
if (E) Log.e(TAG_CONNECT,"Application "+themeApp+" not found for use the theme "+themeId+".");
      }
    }
    super.onCreate(savedInstanceState);
    //...
   }
}
Pour déclencher l'activité avec un style sur mesure :
{
public static final String EXTRA_THEME_APPNAME="theme.app";
public static final String EXTRA_THEME_ID="theme.id";
public static final String ACTION_CONNECT="org.remoteandroid.action.Connect";
    /** Called when the activity is first created. */
    @Override
    public void onClick() 
    {
        Intent intent=new Intent(ACTION_CONNECT);
        intent.putExtra(EXTRA_THEME_APPNAME, getApplicationInfo().packageName);
        intent.putExtra(EXTRA_THEME_ID,R.style.Theme_MyDialog);
        startActivity(intent);
    }
}

Il est alors facile de demander un style Blanc, Noir, Boite de dialogue, etc.