Android - могу ли я увеличить textSize для виджета NumberPicker? - PullRequest
28 голосов
/ 05 августа 2011

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

Ответы [ 7 ]

89 голосов
/ 23 августа 2012

Мне удалось это сделать, расширив 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" />
6 голосов
/ 28 февраля 2017

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

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

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

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

4 голосов
/ 31 июля 2014

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

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

TextView tv1 = (TextView)_numberPicker.getChildAt(1);
tv1.TextSize = 10;
2 голосов
/ 27 сентября 2016

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

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

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

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

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

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

2 голосов
/ 14 августа 2012

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

0 голосов
/ 17 августа 2016

Мы можем настроить вид внутри NumberPicker.
Это имеет три представления-
2 кнопки ImageText и 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>
...