apidemos ->views/lists/Activate items 学习

来源:互联网 发布:手机金属探测仪软件 编辑:程序博客网 时间:2024/06/18 16:50

看apidemos的 activate items 很简单,就是继承ListActivity, 然后给使用了 api 11中一个系统样式的textView.

然而在 API level 11 之前运行会报错.如果在11之前实现 Activateitems给出的效果,那必然要给textView 的background属性设置一个press等状态的xml来,drawable其选中的背景.

然而apidemos 给出的很简单的实现:

android:background="?android:attr/activatedBackgroundIndicator"?

接下来就看看这段代码是如何实现的.

官方注释是这样的

public static final int activatedBackgroundIndicator

Added in API level 11

Drawable used as a background for activated items.

Must be a reference to another resource, in the form "@[+][package:]type:name" or to a theme attribute in the form "?[package:][type:]name".

Constant Value: 16843517 (0x010102fd)

首先, 我们找到sdk/platforms/android-17/data/res/values/attrs.xml打开该文件,可以看到这样的描述

<attr name="activatedBackgroundIndicator" format="reference" />

在打开 

sdk/platforms/android-17/data/res/values/themes.xml

可以查找到: 

<item name="activatedBackgroundIndicator">@android:drawable/activated_background</item><item name="activatedBackgroundIndicator">@android:drawable/activated_background_light</item><item name="activatedBackgroundIndicator">@android:drawable/activated_background_holo_dark</item><item name="activatedBackgroundIndicator">@android:drawable/activated_background_holo_light</item>
接着,打开
sdk/platforms/android-17/data/res/drawable/activated_background.xml

打开文件

<selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_activated="true" android:drawable="@android:drawable/list_selector_background_selected" />    <item android:drawable="@color/transparent" /></selector>

我们可以从drawable-hdpi文件夹下找到"list_selector_background_selected",它是9 patch png 格式的.  

关于state可以参考官方链接

把相关的资源文件和色值等拷贝下来,用我说的老版本的方法可实现api level 11的效果.

下面是仿效果的demo部分代码

Main.java

import android.app.ListActivity;import android.os.Bundle;import android.view.View;import android.widget.ArrayAdapter;import android.widget.ListView; public class Main extends ListActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setListAdapter(new ArrayAdapter<String>(this, R.layout.main, mStrings));         // Tell the list view to show one checked/activated item at a time.        getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);        // Start with first item activated.        // Make the newly clicked item the currently selected one.        getListView().setItemChecked(0, true);    }     @Override    protected void onListItemClick(ListView l, View v, int position, long id) {        // Make the newly clicked item the currently selected one.        getListView().setItemChecked(position, true);    }     public static final String[] mStrings = { "Abbaye de Belloc",            "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi",            "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu",            "Airag", "Airedale", "Aisy Cendre", "Allgauer Emmentaler",            "Alverca", "Ambert", "American Cheese", "Ami du Chambertin",            "Anejo Enchilado", "Anneau du Vic-Bilh", "Anthoriro", "Appenzell",            "Aragon", "Ardi Gasna", "Ardrahan", "Armenian String",            "Aromes au Gene de Marc", "Asadero", "Asiago", "Aubisque Pyrenees",            "Autun", "Avaxtskyr", "Baby Swiss", "Babybel",            "Baguette Laonnaise", "Bakers", "Baladi", "Balaton", "Bandal",            "Banon", "Barry's Bay Cheddar", "Basing", "Basket Cheese",            "Bath Cheese", "Bavarian Bergkase", "Baylough", "Beaufort",            "Beauvoorde", "Beenleigh Blue", "Beer Cheese", "Bel Paese",            "Bergader", "Bergere Bleue", "Berkswell", "Beyaz Peynir",            "Bierkase", "Bishop Kennedy", "Blarney", "Bleu d'Auvergne",            "Bleu de Gex", "Bleu de Laqueuille", "Bleu de Septmoncel",            "Bleu Des Causses", "Blue", "Blue Castello", "Blue Rathgore",            "Blue Vein (Australian)", "Blue Vein Cheeses", "Bocconcini",            "Bocconcini (Australian)", "Boeren Leidenkaas", "Bonchester",            "Bosworth", "Bougon", "Boule Du Roves", "Boulette d'Avesnes",            "Boursault", "Boursin", "Bouyssou", "Bra", "Braudostur",                   "Meyer Vintage Gouda", "Mihalic Peynir", "Milleens", "Mimolette",            "Mine-Gabhar", "Mini Baby Bells", "Mixte", "Molbo",            "Monastery Cheeses", "Mondseer", "Mont D'or Lyonnais", "Montasio",            "Monterey Jack", "Monterey Jack Dry", "Morbier",            "Morbier Cru de Montagne", "Mothais a la Feuille", "Mozzarella",            "Mozzarella (Australian)", "Mozzarella di Bufala",            "Mozzarella Fresh, in water", "Mozzarella Rolls", "Munster",            "Murol", "Mycella", "Myzithra", "Naboulsi", "Nantais",            "Neufchatel", "Neufchatel (Australian)", "Niolo", "Nokkelost",            "Northumberland", "Oaxaca", "Olde York", "Olivet au Foin",            "Olivet Bleu", "Olivet Cendre", "Orkney Extra Mature Cheddar",            "Orla", "Oschtjepka", "Ossau Fermier", "Ossau-Iraty", "Oszczypek",            "Oxford Blue", "P'tit Berrichon", "Palet de Babligny", "Paneer",            "Panela", "Pannerone", "Pant ys Gawn", "Parmesan (Parmigiano)",            "Parmigiano Reggiano", "Pas de l'Escalette", "Passendale",            "Pasteurized Processed", "Pate de Fromage", "Patefine Fort",            "Pave d'Affinois", "Pave d'Auge", "Pave de Chirac",            "Pave du Berry", "Pecorino", "Pecorino in Walnut Leaves",            "Pecorino Romano", "Peekskill Pyramid", "Pelardon des Cevennes",            "Pelardon des Corbieres", "Penamellera", "Penbryn", "Pencarreg",            "Perail de Brebis", "Petit Morin", "Petit Pardou", "Petit-Suisse",            "Picodon de Chevre", "Picos de Europa", "Piora",            "Pithtviers au Foin", "Plateau de Herve", "Plymouth Cheese",            "Podhalanski", "Poivre d'Ane", "Polkolbin", "Pont l'Eveque",            "Port Nicholson", "Port-Salut", "Postel", "Pouligny-Saint-Pierre",            "Pourly", "Prastost", "Pressato", "Prince-Jean",            "Processed Cheddar", "Provolone", "Provolone (Australian)",            "Pyengana Cheddar", "Pyramide", "Quark", "Quark (Australian)",            "Quartirolo Lombardo", "Quatre-Vents", "Quercy Petit",            "Queso Blanco", "Queso Blanco con Frutas --Pina y Mango",            "Queso de Murcia", "Queso del Montsec", "Queso del Tietar",            "Queso Fresco", "Queso Fresco (Adobera)", "Queso Iberico",            "Queso Jalapeno", "Queso Majorero", "Queso Media Luna",            "Queso Para Frier", "Queso Quesadilla", "Rabacal", "Raclette",            "Ragusano", "Raschera", "Reblochon", "Red Leicester",            "Regal de la Dombes", "Reggianito", "Remedou", "Requeson",            "Richelieu", "Ricotta", "Ricotta (Australian)", "Ricotta Salata",            "Ridder", "Rigotte", "Rocamadour", "Rollot", "Romano",            "Romans Part Dieu", "Roncal", "Roquefort", "Roule",            "Rouleau De Beaulieu", "Royalp Tilsit", "Rubens", "Rustinu",            "Saaland Pfarr", "Saanenkaese", "Saga", "Sage Derby",            "Sainte Maure", "Saint-Marcellin", "Saint-Nectaire",            "Saint-Paulin", "Salers", "Samso", "San Simon", "Sancerre",            "Sap Sago", "Sardo", "Sardo Egyptian", "Sbrinz", "Scamorza",            "Schabzieger", "Schloss", "Selles sur Cher", "Selva", "Serat",            "Seriously Strong Cheddar", "Serra da Estrela", "Sharpam",            "Shelburne Cheddar", "Shropshire Blue", "Siraz", "Sirene",            "Smoked Gouda", "Somerset Brie", "Sonoma Jack",            "Sottocenare al Tartufo", "Soumaintrain", "Sourire Lozerien",            "Spenwood", "Sraffordshire Organic", "St. Agur Blue Cheese",            "Stilton", "Stinking Bishop", "String", "Sussex Slipcote",            "Sveciaost", "Swaledale", "Sweet Style Swiss", "Swiss",                   "Zanetti Grana Padano", "Zanetti Parmigiano Reggiano" };}

选中样式avtivate_background.xml

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:drawable="@drawable/btn_default_pressed_holo_light" android:state_activated="true"/>    <item android:drawable="@color/transparent"/></selector>

main.xml 该文件只需一个textview组件即可 

<TextView xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/textView1"    android:layout_width="match_parent"    android:layout_height="24dp"     android:gravity="center_vertical"      android:background="@drawable/avtivate_background"/>


1 0