289 votes

Android: définir le style d'affichage par programme

Voici XML:

 <RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/LightStyle"
    android:layout_width="fill_parent"
    android:layout_height="55dip"
    android:clickable="true"
    android:orientation="horizontal" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" />

</RelativeLayout>
 

Comment définir le style de param par programme? Merci d'avance.

274voto

Blundell Points 28342

Techniquement, vous pouvez appliquer des styles par programmation, avec des vues personnalisées de toute façon:

 private MyRelativeLayout extends RelativeLayout {
  public MyRelativeLayout(Context context) {
     super(context, null, R.style.LightStyle);
  }
}
 

Le constructeur à un argument est celui utilisé lorsque vous instanciez des vues par programme.

Alors chaînez ce constructeur au super qui prend un paramètre de style.

  RelativeLayout someLayout = new MyRelativeLayout(context);
 

Ou comme @Dori l'a simplement souligné:

  RelativeLayout someLayout = new RelativeLayout(context, null, R.style.LightStyle);
 

93voto

Korhan Ozturk Points 4936

Vous ne pouvez pas encore définir le style d'une vue par programme, mais vous pouvez trouver ce fil utile.

6voto

FOMDeveloper Points 23

Vous pouvez appliquer un style à votre activité en faisant:

 super.setTheme( R.style.MyAppTheme );
 

ou Android par défaut:

 super.setTheme( android.R.style.Theme );
 

dans votre activité, avant setContentView() .

-1voto

user3918502 Points 1

J'ai utilisé les vues définies dans XML dans mon groupe de vues composite, les ai gonflées et ajoutées à Viewgroup. De cette façon, je ne peux pas changer de style de façon dynamique, mais je peux effectuer certaines personnalisations de style. Mon composite:

 public class CalendarView extends LinearLayout {

private GridView mCalendarGrid;
private LinearLayout mActiveCalendars;

private CalendarAdapter calendarAdapter;

public CalendarView(Context context) {
    super(context);

}

public CalendarView(Context context, AttributeSet attrs) {
    super(context, attrs);

}

@Override
protected void onFinishInflate() {
    super.onFinishInflate();
    init();
}

private void init() {
    mCalendarGrid = (GridView) findViewById(R.id.calendarContents);
    mCalendarGrid.setNumColumns(CalendarAdapter.NUM_COLS);

    calendarAdapter = new CalendarAdapter(getContext());
    mCalendarGrid.setAdapter(calendarAdapter);
    mActiveCalendars = (LinearLayout) findViewById(R.id.calendarFooter);
}
 

}

et ma vue en xml où je peux assigner des styles:

 <com.mfitbs.android.calendar.CalendarView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/calendar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
>

<GridView
    android:id="@+id/calendarContents"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<LinearLayout
    android:id="@+id/calendarFooter"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    />
 

-6voto

rfsbraz Points 678

Vous pouvez créer le xml contenant la mise en page avec le style souhaité, puis modifier la ressource d'arrière-plan de votre vue, comme ceci .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X