2016-02-22 2 views
1

J'essaye de créer une barre de notation par programmation.Barre de notation android par programmation ne dessine pas correctement

Si j'utilise tout XML fonctionne parfaitement

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/derp"> 


<RatingBar 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:numStars="5" 
    android:layout_centerHorizontal="true" 
    /> 

Et le résultat est un bar de notation normale, parfaitement fonctionnelle avec des étoiles rouges (ma couleur d'accent).

Mais si j'essaie de faire ce programme avec ceci:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    LinearLayout l = new LinearLayout(getApplicationContext()); 
    l.setOrientation(LinearLayout.VERTICAL); 
    l.setLayoutParams(new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.MATCH_PARENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT)); 

    RatingBar ratingBar = new RatingBar(getApplicationContext()); 

    ratingBar.setMax(5); 
    ratingBar.setStepSize(1); 
    ratingBar.setNumStars(0); 

    l.addView(ratingBar); 
    ((RelativeLayout)findViewById(R.id.derp)).addView(l); 
} 

Le résultat est complètement différent. L'arrière-plan de l'étoile non sélectionnée est invisible, donc il ressemble à ceci.

Prog emprty

La barre d'évaluation est là, si vous commencez à interagir avec elle affiche correctement en tant que tels

Prog interacting

et dès que je retire mon doigt, il revient à un désélectionné invisible étoile, mais l'étoile que j'ai sélectionnée reste correctement mise en évidence.

La couleur des étoiles est également différente de celle des couleurs xml. Le constructeur de contexte de barre d'évaluation utilise cependant ce qui semble être le style par défaut. Cela a commencé à se produire tout à coup dans mon application principale et je ne peux pas vraiment comprendre pourquoi. J'ai essayé de créer une application de test vide et le problème persiste.

Est-ce que quelqu'un sait quelle pourrait être la cause?

Répondre

1

Le applicationContext ne doit généralement pas être utilisé pour gonfler une vue car votre vue est alors gonflée avec le thème du système, et non avec le thème défini dans votre application.

Essayez d'utiliser votre contexte d'activité.

RatingBar ratingBar = new RatingBar(MainActivity.this); 

Pour en savoir plus sur les différentes capacités de context il y a un very good article written by Dave Smith