Подтвердить что ты не робот

Android - могу ли я увеличить размер текста для виджета NumberPicker?

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

4b9b3361

Ответ 1

Мы столкнулись с той же проблемой и закончили тем, что воссоздали NumberPicker локально. Здесь более подробный учебник здесь.

Ответ 2

Я смог выполнить это, расширив стандартный 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" />

Ответ 3

установите только этот стиль для вашего 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" />

и <item name="android:textColorPrimary">@android:color/white</item> изменить цвет текста: enter image description here

Ответ 4

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

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

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

Ответ 5

Я столкнулся с одной и той же проблемой, я хотел увеличить размер текста NumberPicker, но не смог найти способ сделать это как часть виджета. Все вышеприведенные ответы велики, но вместо этого я пошел со следующим решением, которое отвечало моим потребностям:

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

Это существенно увеличит весь виджет.

Ответ 6

Прыгая к 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. Если нет, замените "this" на любой доступный Контекст. Этот код делает эквивалент настройки темы, которая переопределяет все размеры TextView в вашей деятельности, но применит только к NumberPicker и его дочерним элементам.

Ответ 7

Мы можем настраивать представления внутри NumberPicker.
Он имеет три вида -
2 ImageButttons и 1 EditText.

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

Полная компоновка NumberPicker из исходного кода 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>

Ответ 8

FYI, если вы используете решение aheuermann (как и я), и вы также хотите реализовать прослушиватель для выбора числа, метод onValueChanged должен выглядеть следующим образом. Я думал, что поделюсь этим, так как мне понадобилось немного времени, чтобы понять это.

public void onValueChange(android.widget.NumberPicker picker, int oldVal, int newVal){
    //your awesome methods to perform on value changed
}