1. 程式人生 > >自定義Spinner樣式以及實現hint效果

自定義Spinner樣式以及實現hint效果

android中有個Spinner控制元件,也就是下拉控制元件。但是初始的樣式比較不好看,所以想著更改下樣式。這樣就不需要一直用EditText+popupwindow的方式來實現這種效果,會比較這種方式更簡單一些。我們來看下實現的效果:
這裡寫圖片描述

1、正如網上所說的需要準備一張.9圖。
正常的png圖片這裡寫圖片描述
製作成.9後的圖片這裡寫圖片描述
這裡寫圖片描述
這裡稍微提一下在android studio中製作點9圖的巨方便的方法,但是需要注意的有兩點:
1、複製圖片到drawable資料夾中(你放圖片的資料夾),選中這張圖片,右擊彈出選單,點選create 9-patch file…
2、雙擊產生的.9file圖片,Android studio 會自動使用內建的.9圖片製作工具開啟這張圖片
3、開始製作,在你需要拉伸的地方畫黑線
4、然後儲存,最後刪掉原來的圖片(如果不刪除肯定不行啊)
需要注意的是:as中對點9圖的要求比較苛刻,字尾一定要為.9.png還有就是你的原圖不能是背景透明的圖片。最好你可以點選show bad patches看下這樣是否能夠拉伸,看黑線。。。注意只要在左邊還有頂部畫黑線就可以了,右邊和底部不需要畫。
5、最後你得到了這個Spinner的背景了,給他的background屬性就可以了

貼下xml的程式碼:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom
="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.coofond.spinnerdemo.MainActivity">
<Spinner android:id
="@+id/spn_brand" android:layout_width="match_parent" android:layout_height="wrap_content" android:spinnerMode="dropdown" android:popupBackground="@android:color/white" android:background="@drawable/spbg" android:paddingLeft="20dp" />
</RelativeLayout>

二、然後講下Spinner的hint效果的實現
主要Spinner的介面卡,有個getcount的方法,如果我們返回getCount()-1會使得Spinner一直認為自己本來就少一條,所以除非你在程式碼裡去setSelection(adapter.getCount()-1),否則這個Spinner永遠不會自動顯示出最後那條。我們就是利用這個原理,將最後一條寫成我們想設的hint,就達到了目的。

上自定義的ArrayAdapter的程式碼:

package com.coofond.spinnerdemo;

import android.content.Context;
import android.widget.ArrayAdapter;

import java.util.List;

/**
 * 給下拉框的介面卡
 * Created by IBM on 2016/10/25.
 */

public class simpleArrayAdapter<T> extends ArrayAdapter {
    //構造方法
    public simpleArrayAdapter(Context context, int resource, List<T>  objects) {
        super(context, resource, objects);
    }
    //複寫這個方法,使返回的資料沒有最後一項
    @Override
    public int getCount() {
        // don't display last item. It is used as hint.
        int count = super.getCount();
        return count > 0 ? count - 1 : count;
    }

}

最後我們的MainActivity.java中的程式碼就比較方便了:

package com.coofond.spinnerdemo;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Spinner;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity {
    private Spinner mySpinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
    }

    private void initView() {
        mySpinner= (Spinner) findViewById(R.id.spn_brand);
    }
    private void initData(){
        //資料
        List<String> data_list = new ArrayList<String>();
        data_list.add("北京");
        data_list.add("上海");
        data_list.add("廣州");
        data_list.add("深圳");
        data_list.add("請選擇品牌");
        //介面卡
        simpleArrayAdapter arrAdapter = new simpleArrayAdapter<String>(this, R.layout.simple_spinner_item, data_list);
        //設定樣式
        arrAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        //載入介面卡
        mySpinner.setAdapter(arrAdapter);
        mySpinner.setSelection(data_list.size() - 1, true);
    }
}

總結:最後我們要知道的是這種效果比較容易實現,另外一種方法EditText+popupwindow也是可以實現的。但是我們這種方法也比較方便。主要就是hint和樣式這個兩個點,講的很詳細了。最後,have a nice day!

相關推薦

定義Spinner樣式以及實現hint效果

android中有個Spinner控制元件,也就是下拉控制元件。但是初始的樣式比較不好看,所以想著更改下樣式。這樣就不需要一直用EditText+popupwindow的方式來實現這種效果,會比較這種方式更簡單一些。我們來看下實現的效果: 1、正如網上所說

一個背景圖實現定義spinner樣式

如下介面:由一個spinner兩個EditText一個Button實現,為了保持介面的統一性,需要把預設的spinner樣式改成類似下面的樣式。 xml檔案佈局如下圖 這裡用一個LinerLayout 實現horizintal佈局,並使用了一個9.的圖

定義SeekBar(ProgressBar實現SeekBar效果)去除兩邊間距

眾所周知,SeekBar作為安卓的常用控制元件之一,用來進行顯示進度,但是SeekBar本身兩邊會留出空隙,不管怎麼設定,進度條本身都不會與父佈局貼近,但是需求又偏偏要貼近貼近而且刻度圖示又不能少呢?不妨用ProgressBar來做吧,記下來備用~~ public cla

QML 定義Button樣式實現按鈕三態切換

初學QML的時候,遇到了一些問題,參考這篇文章,實現了按鈕的正常、滑鼠經過和滑鼠按下的圖片切換。遇到了一些問題,比如背景色有白邊,設定圖片大小不生效。嘗試了幾種方法後,還是發現原來的方法比較好。記錄一下

Android--定義Button的樣式以及動態漸變效果

       之前開發使用過自定義樣式的Button,使用挺簡單的,但也很常用,因此總結一下。       1,使用drawable檔案自定義靜態的Button樣式 首先,自定義一個drawable檔

EXCEL如何新建定義單元格以及樣式怎麽設置

excel表格 視頻 怎麽 image 常見問題 htm 定義 proc 單元 雖然Excel中包含了很多內置的表格樣式,但有些並不太讓人滿意。此時可以自定義表格樣式。效果圖如下(常見問題)Excel單元格自定義格式的知識和技巧excel如何自定義套用表格格式怎麽新增並設置

利用Javascript的 函式過載 實現定義Alert樣式

{    document.write ('<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">');    document.write ('  <tr

定義CoordinatorLayout的Behavior實現知乎和簡書快速返回效果

Design lib裡面的CoordinatorLayout是一個非常強大的控制元件,它接管了child元件之間的互動。讓你滑動互動使用更加方便簡單,效果也更加強大,不需要向以前那樣自己處理一坨什麼亂七八槽的滑動 事件傳遞之類的噁心東西了。 比如常見的頂部工具

定義控制元件:QQ氣泡效果粘性控制元件的實現

學習目的 瞭解幾何圖形工具的用法 掌握畫不規則圖形的方法 應用場景:未讀提醒,效果圖: 繪製一幀的效果 畫一幀粘性控制元件的步驟分析 畫一個固定圓 畫一個拖拽圓 畫中間連線部分 將中間連線部分水平放置,四個角的座標定為固定值,

android定義控制元件自動換行效果實現

     第一篇部落格裡面有介紹一篇關於自動換行實現諸多自定義控制元件跟各種效果的博文,但是礙於當初技術能力有限,寫的jar包裡的程式碼亂七八糟,在最近忙完了手頭的工作,不經意間翻看了之前的程式碼,真是慘不忍睹,隨決定重新封裝。重新編寫的android-custom-vg前

安卓中實現定義對話方塊以及定義顯示位置

專案中有用到如下的對話方塊效果,本來是想用popwindow來實現的結果發現不能覆蓋原來的佈局,不知道是我瞭解的不夠還是本身就不行,發現彈出的對話方塊會與原來的佈局重疊 後面就用對話方塊來實現了,接下來講一下如何實現自定義對話方塊和自定義對話方塊的彈出位置

Android定義控制元件實戰——水流波動效果實現WaveView

   水流波動的波形都是三角波,曲線是正餘弦曲線,但是Android中沒有提供繪製正餘弦曲線的API,好在Path類有個繪製貝塞爾曲線的方法quadTo,繪製出來的是2階的貝塞爾曲線,要想實現波動效果,只能用它來繪製Path曲線。待會兒再講解2階的貝塞爾曲線是怎麼回事,先

Android 定義控制元件實戰——水流波動效果實現WaveView

   水流波動的波形都是三角波,曲線是正餘弦曲線,但是Android中沒有提供繪製正餘弦曲線的API,好在Path類有個繪製貝塞爾曲線的方法quadTo,繪製出來的是2階的貝塞爾曲線,要想實現波動效果,只能用它來繪製Path曲線。待會兒再講解2階的貝塞爾曲線是怎麼回事,先來看實現的效果: 這

Android定義View之ListView實現時間軸效果:我只是個送快遞的。

先上效果圖: 實現時間軸的原理 listview的基本使用,相信大家都很熟悉。先在layout下新建一個xml佈局檔案,對應一個子項的listView的顯示內容。在上面的圖我們可以看到,每一項都是 有3個 textview控制元件

Android 通過定義控制元件方式實現帶開關效果的左右切換選擇器。

通過自定義控制元件方式實現帶開關效果的左右切換選擇器。 1、先上效果圖 2、佈局檔案gender_select_button.xml 佈局檔案很簡單,左右各一個RelativeLayout,佈局裡再巢狀一個TextView,用來顯

echarts中國地圖+定義tooltip樣式+dispatchAction()方法實現聯動

嚴正宣告:南海是我國固有領土,此處只是隱藏!<!DOCTYPE html> <html lang="en" style="height: 100%"> <head> <meta charset="UTF-8">

DOM內容操作和定義樣式改變

abcdefg result 定義 tel class abcde inner 參數 fun 自定義 function 方法名或函數名(參數1,參數2,、、、) { 方法體; return返回值;(可不寫) } function a

ckeditor添加定義按鈕整合swfupload實現批量上傳圖片

下載 了解 nbsp 文件 mouseover 去掉 dial size pro ckeditor添加自定義按鈕整合swfupload實現批量上傳圖片給ckeditor添加自定義按鈕,由於ckeditor只能上傳一張圖片,如果要上傳多張圖片就要結合ckfinder,而ckf

[php]微信測試號調取acces_token,定義菜單以及被動響應消息

個人中心 res keyword environ 變量 pri exist ron 數據 1 <?php 2 /**自己寫的  */ 3 $wechatObj = new wechatCallbackapiTest(); 4 $wechatObj-&

動態代理中的定義註解樣式

interface pre 運行期 type import 生存 nbsp pub tar 動態代理中的自定義註解的樣式    @Target(ElementType.METHOD) 代表此註解使用對象是method@Retention(RetentionPolicy.RU