Android - могу ли я увеличить textSize для виджета NumberPicker?

У нас есть виджет NumberPicker в версии 3.0, но кажется, что textSize для этого виджета не может быть изменен. Я что-то упускаю или это так? Очень хотелось бы увеличить размер шрифта, он довольно маленький при значении по умолчанию. Но я не вижу для него свойства textSize.

28
задан Willi Mentzel 12 July 2016 в 22:34
поделиться

3 ответа

Мне удалось сделать это, расширив NumberPicker по умолчанию. Не идеально, но это работает.

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"));
     }
   }

 }

Тогда просто укажите ссылку на этот класс в своем макете XML.

<com.yourpackage.NumberPicker
        android:id="@+id/number_picker"
        android:layout_width="43dp"
        android:layout_height="wrap_content" />
90
ответ дан 28 November 2019 в 02:16
поделиться

Переходя к API 23, решение, представленное aheuermann, похоже, имеет проблемы. В источнике для NumberPicker размер текста задается на основе дочернего элемента EditText при инициализации. Если вы попытаетесь изменить его позже, поле EditText станет большим, но все остальные числа, нарисованные непосредственно виджетом, все равно будут маленькими.

Решение, с которым я работаю, имеет тот недостаток, что его нужно создавать программно, а не с помощью компоновки, но в остальном оно, кажется, работает как задумано. Сначала добавьте следующее в ваш файл styles.xml:

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

Затем вы можете создать экземпляр NumberPicker с помощью

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

, предполагая, что это делается в Activity. Если нет, замените «это» тем контекстом, который у вас есть. Этот код эквивалентен настройке темы, которая переопределяет все размеры TextView в вашей деятельности, но применяет ее только к NumberPicker и его дочерним элементам.

2
ответ дан 28 November 2019 в 02:16
поделиться

Следующее работает для меня (в API 15 / 4.0.3)

примечание: решение aheuermann безопасно от потенциальных различий в реализации в макете NumberPicker на разных Android версии (то есть TextView не всегда может быть в дочерней позиции 1).

TextView tv1 = (TextView)_numberPicker.getChildAt(1);
tv1.TextSize = 10;
4
ответ дан 28 November 2019 в 02:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: