Android NumberPicker的基本用法及常見(jiàn)問(wèn)題匯總

前言

在項(xiàng)目中需要一個(gè)選擇人數(shù)的控件,于是想到了NumberPicker簿寂,這個(gè)控件相對(duì)不是那么熱門(mén),我也是第一次用宿亡,所以遇到了一些問(wèn)題常遂,這里做個(gè)小結(jié)。

正文

首先來(lái)看一下最終的效果:


NumberPicker.png

需求其實(shí)很簡(jiǎn)單她混,就是彈個(gè)Dialog烈钞,然后選數(shù)字,點(diǎn)確定坤按。Dialog和這幾個(gè)Button我就不多說(shuō)了毯欣,主要來(lái)講講怎么使用NumberPicker,主要包含以下幾點(diǎn):

  • 設(shè)置內(nèi)容
  • 設(shè)置循環(huán)狀態(tài)
  • 設(shè)置不可編輯
  • 設(shè)置監(jiān)聽(tīng)
  • 設(shè)置分割線(xiàn)顏色
  • 設(shè)置字體顏色和大小

首先設(shè)置內(nèi)容這塊臭脓,如果只設(shè)置了最大最小值酗钞,那么只顯示數(shù)字,如果想要顯示字符串,需要自己定義一個(gè)數(shù)組砚作,以上面的效果為例窘奏,由于顯示內(nèi)容中有一個(gè)“10+”,所以我們不能只單純顯示數(shù)字葫录,得自己定義一個(gè)數(shù)組:

    private String[] numbers = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "10+"};
    //設(shè)置需要顯示的內(nèi)容數(shù)組
    numberPicker.setDisplayedValues(numbers);
    //設(shè)置最大最小值
    numberPicker.setMinValue(1);
    numberPicker.setMaxValue(numbers.length);
    //設(shè)置默認(rèn)的位置
    numberPicker.setValue(1);

設(shè)置是否循環(huán)顯示着裹,注意setWrapSelectorWheel方法須在上面的代碼之后調(diào)用才會(huì)生效:

    //這里設(shè)置為不循環(huán)顯示,默認(rèn)值為true
    numberPicker.setWrapSelectorWheel(false);

NumberPicker默認(rèn)點(diǎn)擊是可以編輯的米同,就像這樣:

可編輯狀態(tài).png

所以我們需要加上一行代碼骇扇,來(lái)使得NumberPicker不可編輯:

    //設(shè)置不可編輯
    numberPicker.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);

這樣基本就能用了,現(xiàn)在我們需要對(duì)它設(shè)置監(jiān)聽(tīng)面粮,來(lái)拿到選擇結(jié)果:

    numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
        @Override
        public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
            //得到選擇結(jié)果
        }
    });

接下來(lái)的操作可能就稍微顯得麻煩一點(diǎn)了少孝,我們先來(lái)看看如何設(shè)置分割線(xiàn)的顏色,這里我們采用的是反射的方式:

    private void setNumberPickerDividerColor(NumberPicker numberPicker) {
        Field[] pickerFields = NumberPicker.class.getDeclaredFields();
        for (Field pf : pickerFields) {
            if (pf.getName().equals("mSelectionDivider")) {
                pf.setAccessible(true);
                try {
                    //設(shè)置分割線(xiàn)的顏色值
                    pf.set(numberPicker, new ColorDrawable(getResources().getColor(R.color.numberpicker_divider_color)));
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
                break;
            }
        }
    }

最后我們來(lái)看看如何修改字體顏色和大小熬苍,新建一個(gè)類(lèi)繼承NumberPicker:

public class TextConfigNumberPicker extends NumberPicker {

    public TextConfigNumberPicker(Context context) {
        super(context);
    }

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

    public TextConfigNumberPicker(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

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

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

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

    private void updateView(View view) {
        if (view instanceof EditText) {
            //設(shè)置文字的顏色和大小
            ((EditText) view).setTextColor(getResources().getColor(R.color.black));
            ((EditText) view).setTextSize(16);
        }
    }
}

結(jié)語(yǔ)

好了稍走,關(guān)于NumberPicker的基本用法和常見(jiàn)問(wèn)題就介紹到這里,希望對(duì)大家有所幫助柴底。如有問(wèn)題婿脸,歡迎指正。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末柄驻,一起剝皮案震驚了整個(gè)濱河市盖淡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凿歼,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冗恨,死亡現(xiàn)場(chǎng)離奇詭異答憔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)掀抹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)虐拓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人傲武,你說(shuō)我怎么就攤上這事蓉驹。” “怎么了揪利?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵态兴,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我疟位,道長(zhǎng)瞻润,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮绍撞,結(jié)果婚禮上正勒,老公的妹妹穿的比我還像新娘。我一直安慰自己傻铣,他們只是感情好章贞,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著非洲,像睡著了一般鸭限。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上怪蔑,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天里覆,我揣著相機(jī)與錄音,去河邊找鬼缆瓣。 笑死喧枷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的弓坞。 我是一名探鬼主播隧甚,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼渡冻!你這毒婦竟也來(lái)了戚扳?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤族吻,失蹤者是張志新(化名)和其女友劉穎帽借,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體超歌,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡砍艾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了巍举。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脆荷。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖懊悯,靈堂內(nèi)的尸體忽然破棺而出蜓谋,到底是詐尸還是另有隱情,我是刑警寧澤炭分,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布桃焕,位于F島的核電站,受9級(jí)特大地震影響欠窒,放射性物質(zhì)發(fā)生泄漏覆旭。R本人自食惡果不足惜退子,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望型将。 院中可真熱鬧寂祥,春花似錦、人聲如沸七兜。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)腕铸。三九已至惜犀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狠裹,已是汗流浹背虽界。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涛菠,地道東北人莉御。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像俗冻,于是被迫代替她去往敵國(guó)和親礁叔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線(xiàn)程迄薄,因...
    小菜c閱讀 6,440評(píng)論 0 17
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,262評(píng)論 25 707
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,784評(píng)論 22 665
  • HTML簡(jiǎn)介 1琅关、 什么是html? 超文本標(biāo)記語(yǔ)言讥蔽、html包含了標(biāo)簽與文本內(nèi)容涣易、html使用標(biāo)記標(biāo)簽來(lái)描述網(wǎng)頁(yè)...
    LaBaby_閱讀 315評(píng)論 0 3
  • 我的假期到了,也意味著我的工期開(kāi)始了冶伞。今年寒假都毒,我的假期大約一個(gè)半月。大多數(shù)人認(rèn)為回家后的生活談不上“衣來(lái)伸手碰缔,飯...
    思享窩閱讀 204評(píng)論 0 1