Android(java)学习笔记96:如何改变spinner系统自带的字体和颜色

1.首先我们要知道spinner系统自带字体和颜色本质:

原生的Spring 控件是无法更改字体和颜色的...

从下面的代码可以看出...红色的标注显示使用的是Android默认的布局..

 1 Spinner s1 = (Spinner) findViewById(R.id.spinner1);
 2         ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
 3                 this, R.array.colors, android.R.layout.simple_spinner_item);
 4         adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 5         s1.setAdapter(adapter);
 6         s1.setOnItemSelectedListener(
 7                 new OnItemSelectedListener() {
 8                     public void onItemSelected(
 9                             AdapterView<?> parent, View view, int position, long id) {
10                         showToast("Spinner1: position=" + position + " id=" + id);
11                     }
12
13                     public void onNothingSelected(AdapterView<?> parent) {
14                         showToast("Spinner1: unselected");
15                     }

上面中的:

android.R.layout.simple_spinner_item //android.R.layout.simple_spinner_item是由Android提供的一种标准spinner的布局
android.R.layout.simple_spinner_dropdown_item //声明当控件打开时的外观:为系统提供的simple_spinner_dropdown_item   都是系统自带的

通过查找源码...看到android.R.layout.simple_spinner_dropdown_item.xml,如下:
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!--
 3 /* //device/apps/common/assets/res/any/layout/simple_spinner_item.xml
 4 **
 5 ** Copyright 2008, The Android Open Source Project
 6 **
 7 ** Licensed under the Apache License, Version 2.0 (the "License");
 8 ** you may not use this file except in compliance with the License.
 9 ** You may obtain a copy of the License at
10 **
11 **     http://www.apache.org/licenses/LICENSE-2.0
12 **
13 ** Unless required by applicable law or agreed to in writing, software
14 ** distributed under the License is distributed on an "AS IS" BASIS,
15 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 ** See the License for the specific language governing permissions and
17 ** limitations under the License.
18 */
19 -->
20 <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
21     android:id="@android:id/text1"
22     style="?android:attr/spinnerDropDownItemStyle"
23     android:singleLine="true"
24     android:layout_width="fill_parent"
25     android:layout_height="?android:attr/listPreferredItemHeight"
26     android:ellipsize="marquee" />

里面实际上是一个CheckedTextView,而CheckedTextView,又继承自TextView.所以我们可以自己定义一个只有TextView的XML文件...

里面可以随意设置TextView的属性..比如字体...颜色等等.... 然后替换adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);的xml...这样就能改变字体之类的属性了...

至此...相信大家都应该能明白了吧...


2.有了上面的逻辑思路,下面的东西就是要具体实现了:(1)我们在android工程文件中找到layout文件夹,在这个文件夹另外建立一个layout.xml文件如下:这里我命名为custom_spiner_text_item.xml

这里custom_spiner_text_item.xml文件内容如下:
 1 <?xml version="1.0" encoding="utf-8"?>
 2  <TextView xmlns:android="http://schemas.android.com/apk/res/android"
 3      android:id="@+id/textViewCustom"
 4      android:layout_width="match_parent"
 5      android:layout_height="wrap_content"
 6      android:ellipsize="marquee"
 7      android:singleLine="true"
 8      android:textAlignment="inherit"
 9      android:textColor="#222288"
10      android:textSize="20sp" />

这里我定义我想要的需要的属性,当然你也可以定义你想要的属性,勾画出你想需要的TextView

(2)这时候我们已经定义好了custom_spiner_text_item.xml,接下来当然是怎么用它,如下:

相信用过spinner这个控件的朋友不会陌生下面的代码语句:这里我是截取部分代码说明custom_spiner_text_item.xml的用法。

 1  List<ScanResult> localList = MainActivity.this.wifi.getScanResults();//用来获得手机扫描到的所有wifi的信息
 2           if (localList.size() < 1)//判断List中的元素的个数。localList.size() <1:表示List没有元素,元素的个数表示:搜索到无线网络个数
 3          {
 4            MainActivity.this.connectBtn.setEnabled(false);
 5             Toast.makeText(MainActivity.this.getApplicationContext(), "没有找到无线网络", 1).show();
 6           return;
 7           }
 8          Spinner localSpinner = (Spinner)MainActivity.this.findViewById(R.id.spinner1);
 9          ArrayList<String> localArrayList = new ArrayList<String>();
10          Iterator<ScanResult> localIterator = localList.iterator();
11        while (true)
12          {
13           if (!(localIterator.hasNext()))
14            {
15                //配置spinner控件展现样式,spinner只是承载多项数据,下面是以何种方式展现这些数据
16                ArrayAdapter<String> localArrayAdapter = new ArrayAdapter<String>(MainActivity.this.getApplicationContext(),

     android.R.layout.simple_spinner_item , localArrayList);
17             localArrayAdapter.setDropDownViewResource(R.layout.custom_spiner_text_item);
18
19             localSpinner.setAdapter(localArrayAdapter);
20             localSpinner.setPrompt("请选择搜索到网络:");
21             MainActivity.this.connectBtn.setEnabled(true);
22              return;
23            }           }

这样就可以了,R.layout.custom_spiner_text_item表示调用layout文件夹下的custom_spiner_text_item.xml资源

这样就达到我们的需求了,嘿嘿,是不是很简单!

时间: 2024-10-05 23:09:00

Android(java)学习笔记96:如何改变spinner系统自带的字体和颜色的相关文章

.Net学习笔记----2015-07-02(选择文件对话框、保存对话框、字体和颜色对话框)

private void button1_Click(object sender, EventArgs e) { //点击弹出对话框 OpenFileDialog ofd = new OpenFileDialog(); //设置对话框的标题 ofd.Title = "请选择要打开的文本文件哟o(∩_∩)o 哈哈"; //设置对话框可以多选 ofd.Multiselect = true; //设置对话框的初始目录 ofd.InitialDirectory = @"C:\User

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是第三方 SDK 基本很大概率都会使用外观模式.通过一个外观类使得整个子系统只有一个统一的高层的接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节.当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如网络模块.ImageLoader 模块等.其实我们在开发过程中可能已经使用过很多次外观模式,只是没有从理论层面去了解它. 转载请注明出处:http://bl

java/android 设计模式学习笔记(10)---建造者模式

这篇博客我们来介绍一下建造者模式(Builder Pattern),建造者模式又被称为生成器模式,是创造性模式之一,与工厂方法模式和抽象工厂模式不同,后两者的目的是为了实现多态性,而 Builder 模式的目的则是为了将对象的构建与展示分离.Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程.一个复杂的对象有大量的组成部分,比如汽车它有车轮.方向盘.发动机.以及各种各样的小零件,要将这些部件装配成一辆汽车,这个装配过

java/android 设计模式学习笔记(7)---装饰者模式

这篇将会介绍装饰者模式(Decorator Pattern),装饰者模式也称为包装模式(Wrapper Pattern),结构型模式之一,其使用一种对客户端透明的方式来动态的扩展对象的功能,同时它也是继承关系的一种替代方案之一,但比继承更加灵活.在现实生活中也可以看到很多装饰者模式的例子,或者可以大胆的说装饰者模式无处不在,就拿一件东西来说,可以给它披上无数层不一样的外壳,但是这件东西还是这件东西,外壳不过是用来扩展这个东西的功能而已,这就是装饰者模式,装饰者的这个角色也许各不相同但是被装饰的对

java/android 设计模式学习笔记(13)---享元模式

这篇我们来介绍一下享元模式(Flyweight Pattern),Flyweight 代表轻量级的意思,享元模式是对象池的一种实现.享元模式用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,缓存可共享的对象,来达到对象共享和避免创建过多对象的效果,这样一来就可以提升性能,避免内存移除和频繁 GC 等. 享元模式的一个经典使用案例是文本系统中图形显示所用的数据结构,一个文本系统能够显示的字符种类就是那么几十上百个,那么就定义这么些基础字符对象,存储每个字符的显示外形和其他的格式化数据

java/android 设计模式学习笔记(12)---组合模式

这篇我们来介绍一下组合模式(Composite Pattern),它也称为部分整体模式(Part-Whole Pattern),结构型模式之一.组合模式比较简单,它将一组相似的对象看作一个对象处理,并根据一个树状结构来组合对象,然后提供一个统一的方法去访问相应的对象,以此忽略掉对象与对象集合之间的差别.这个最典型的例子就是数据结构中的树了,如果一个节点有子节点,那么它就是枝干节点,如果没有子节点,那么它就是叶子节点,那么怎么把枝干节点和叶子节点统一当作一种对象处理呢?这就需要用到组合模式了. 转

java/android 设计模式学习笔记(6)---适配器模式

这篇来介绍一下适配器模式(Adapter Pattern),适配器模式在开发中使用的频率也是很高的,像 ListView 和 RecyclerView 的 Adapter 等都是使用的适配器模式.在我们的实际生活中也有很多类似于适配器的例子,比如香港的插座和大陆的插座就是两种格式的,为了能够成功适配,一般会在中间加上一个电源适配器,形如: 这样就能够将原来不符合的现有系统和目标系统通过适配器成功连接. 说到底,适配器模式是将原来不兼容的两个类融合在一起,它有点类似于粘合剂,将不同的东西通过一种转

java/android 设计模式学习笔记(2)---观察者模式

这篇来讲一下观察者模式,观察者模式在实际项目中使用的也是非常频繁的,它最常用的地方是GUI系统.订阅--发布系统等.因为这个模式的一个重要作用就是解耦,使得它们之间的依赖性更小,甚至做到毫无依赖.以GUI系统来说,应用的UI具有易变性,尤其是前期随着业务的改变或者产品的需求修改,应用界面也经常性变化,但是业务逻辑基本变化不大,此时,GUI系统需要一套机制来应对这种情况,使得UI层与具体的业务逻辑解耦,观察者模式此时就派上用场了. PS:对技术感兴趣的同鞋加群544645972一起交流. 设计模式

java/android 设计模式学习笔记(一)---单例模式

前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使用的时候也会有一些坑. PS:对技术感兴趣的同鞋加群544645972一起交流 设计模式总目录 java/android 设计模式学习笔记目录 特点 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式的使用很广泛,比如:线程池(threadpool).缓存(cache).对