web-dev-qa-db-fra.com

Android - puis-je augmenter la taille du texte du widget Sélecteur de numéros?

Nous avons un widget NumberPicker dans la version 3.0, mais il semble que le textSize pour ce widget ne puisse pas être modifié. Est-ce que je manque quelque chose ou est-ce le cas? J'aimerais vraiment augmenter la taille de la police, c'est assez petit avec la valeur par défaut. Mais je ne peux pas voir une propriété textSize pour cela.

26

Nous avons rencontré le même problème et avons fini par recréer NumberPicker localement. Il y a un tutoriel plus approfondi ici .

3
Ginger McMurray

J'ai pu accomplir cela en étendant le NumberPicker par défaut. Pas idéal, mais ça marche.

public class NumberPicker extends Android.widget.NumberPicker {

   public NumberPicker(Context context, AttributeSet attrs) {
     super(context, attrs);
   }

   @Override
   public void addView(View child) {
     super.addView(child);
     updateView(child);
   }

   @Override
   public void addView(View child, int index, Android.view.ViewGroup.LayoutParams params) {
     super.addView(child, index, params);
     updateView(child);
   }

   @Override
   public void addView(View child, Android.view.ViewGroup.LayoutParams params) {
     super.addView(child, params);
     updateView(child);
   }

   private void updateView(View view) {
     if(view instanceof EditText){
       ((EditText) view).setTextSize(25);
       ((EditText) view).setTextColor(Color.parseColor("#333333"));
     }
   }

 }

Ensuite, il vous suffit de référencer cette classe dans votre mise en page XML.

<com.yourpackage.NumberPicker
        Android:id="@+id/number_picker"
        Android:layout_width="43dp"
        Android:layout_height="wrap_content" />
85
aheuermann

Je faisais face au même problème, je voulais augmenter la taille du texte de NumberPicker mais je ne trouvais pas le moyen de le faire dans le cadre du widget. Toutes les réponses ci-dessus sont excellentes, mais au lieu de cela, j'ai opté pour la solution suivante, qui répondait à mes besoins:

<NumberPicker
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:scaleX="1.5"
    Android:scaleY="1.5"/>

Ceci grossit essentiellement le widget entier.

4
Shah

Ce qui suit a fonctionné pour moi (dans API 15/4.0.3) 

note: La solution de aheuermann est sans danger pour les différences d'implémentation de la disposition de NumberPicker dans différentes versions Android (en d'autres termes, TextView peut ne pas toujours être à la position 1).

TextView tv1 = (TextView)_numberPicker.getChildAt(1);
tv1.TextSize = 10;
4
samis

définissez uniquement ce style pour votre NumberPicker:

   <style name="AppTheme.Picker" parent="Theme.AppCompat.Light.NoActionBar" >
    <item name="Android:textColorPrimary">@Android:color/white</item>
    <item name="Android:textSize">20dp</item>
</style>

<NumberPicker
        Android:theme="@style/AppTheme.Picker"
        Android:id="@+id/yearNumberPicker"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content" />

et <item name="Android:textColorPrimary">@Android:color/white</item> change textcolor:  enter image description here

4
ArMo 372

En passant à API 23, la solution présentée par aheuermann semble poser problème. Dans la source de NumberPicker, la taille du texte est définie en fonction de l’enfant EditText à l’initialisation. Si vous essayez de le changer plus tard, le champ EditText deviendra grand, mais tous les autres nombres dessinés directement par le widget seront toujours petits.

La solution que je vais utiliser présente l’inconvénient d’être instanciée par programme plutôt que via layout, mais sinon, elle semble fonctionner comme prévu. Tout d’abord, ajoutez ce qui suit à votre fichier styles.xml:

<style name="NumberPickerText">
    <item name="Android:textSize">40dp</item>
</style>

Ensuite, vous pouvez instancier NumberPicker avec

    ContextThemeWrapper cw = new ContextThemeWrapper(this, R.style.NumberPickerText);
    NumberPicker np = new NumberPicker(cw);

en supposant que cela se fasse dans une activité. Sinon, remplacez le "this" par le contexte disponible. Ce code équivaut à définir un thème qui remplace toutes les tailles de TextView au sein de votre activité, mais ne l’applique qu’à NumberPicker et à ses enfants.

3
John Starbird

Nous pouvons personnaliser les vues dans NumberPicker.
Il a trois points de vue -
2 ImageButttons et 1 EditText.

    if(numberPicker.getChildAt(1) instanceOf EditText)
    {
        EditText edt=(EditText)numberPicker.getChildAt(1);
        //do customizations here
    } 

Mise en page complète de NumberPicker à partir du code source Android

<?xml version="1.0" encoding="utf-8"?>
<!--
**
** Copyright 2008, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
**     http://www.Apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->

<merge xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <ImageButton Android:id="@+id/increment"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:background="@Android:drawable/numberpicker_up_btn"
        Android:paddingTop="22dip"
        Android:paddingBottom="22dip"
        Android:contentDescription="@string/number_picker_increment_button" />

    <EditText
        Android:id="@+id/numberpicker_input"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:textAppearance="@style/TextAppearance.Large.Inverse.NumberPickerInputText"
        Android:gravity="center"
        Android:singleLine="true"
        Android:background="@drawable/numberpicker_input" />

    <ImageButton Android:id="@+id/decrement"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:background="@Android:drawable/numberpicker_down_btn"
        Android:paddingTop="22dip"
        Android:paddingBottom="22dip"
        Android:contentDescription="@string/number_picker_decrement_button" />

</merge>
0
Harish Gyanani