Android-puis-je augmenter la taille de texte pour le widget NumberPicker?
nous avons un widget NumberPicker en 3.0, mais il semble que la taille de texte pour ce widget ne peut pas être modifiée. Est-ce que je rate quelque chose ou est-ce l'affaire? J'aimerais vraiment augmenter la taille de la police, elle est très petite avec la valeur par défaut. Mais je ne peux pas voir une propriété textSize pour ça.
8 réponses
Nous avons rencontré le même problème et fini par recréer NumberPicker localement. Il y a un tutoriel plus détaillé ici.
j'ai été capable d'accomplir ceci en prolongeant le numéro par défaut. Pas l'idéal, mais ça fonctionne.
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"));
}
}
}
alors faites simplement référence à 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" />
La suite travaillé pour moi (dans l'API 15 / 4.0.3)
remarque: la solution d'aheuermann est sûre contre les éventuelles différences de mise en oeuvre dans le sur différentes versions D'Android (c'est-à-dire le TextView
peut ne pas toujours être à la position de l'enfant 1).
TextView tv1 = (TextView)_numberPicker.getChildAt(1);
tv1.TextSize = 10;
je faisais face au même problème, je voulais augmenter la taille du texte du numéroteur mais je n'ai pas pu trouver un moyen de le faire dans le cadre du Widget. Toutes les réponses ci-dessus sont excellentes, mais je suis allé avec la solution suivante, qui a répondu à mes besoins:
<NumberPicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleX="1.5"
android:scaleY="1.5"/>
cela grossit essentiellement le Widget entier.
sautant à L'API 23, la solution présentée par aheuermann semble avoir des problèmes. Dans la source de NumberPicker, la taille du texte est définie en fonction de L'enfant EditText lors de l'initialisation. Si vous essayez de le modifier plus tard, le champ EditText deviendra grand, mais tous les autres nombres tirés directement par le widget seront toujours petits.
la solution que je vais utiliser a l'inconvénient qu'elle doit être instanciée programmatiquement, au lieu de via layout, mais sinon, elle semble fonctionner comme destiné. Tout d'abord, ajoutez ce qui suit à vos styles.fichier xml:
<style name="NumberPickerText">
<item name="android:textSize">40dp</item>
</style>
alors, vous pouvez instancier le NumberPicker avec
ContextThemeWrapper cw = new ContextThemeWrapper(this, R.style.NumberPickerText);
NumberPicker np = new NumberPicker(cw);
en présumant que cela se fait dans le cadre d'une activité. Si ce N'est pas le cas, remplacez le "Ceci" par n'importe quel contexte disponible. Ce code fait l'équivalent de définir un thème qui l'emporte sur toutes les tailles de TextView dans votre activité, mais il ne l'applique qu'au lecteur de nombre et à ses enfants.
Mettez seulement ce sytle 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>
changement textcolor :
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>
pour votre information, Si vous utilisez aheuermann solution (comme je l'ai fait) et vous voulez aussi implémenter un écouteur pour le sélectionneur de nombres, la méthode onValueChanged devra ressembler à ceci. Je pensais que je voudrais partager ceci, puisqu'il m'a fallu un peu de temps pour celui-ci.
public void onValueChange(android.widget.NumberPicker picker, int oldVal, int newVal){
//your awesome methods to perform on value changed
}