android3.0新特性UI

Android3.0新增UI控件

AdapterViewAnimator控件

AdapterViewAnimator(堆View),已知子类有AdapterViewFlipper,StackView,是一系列View的集合,这些View叠加一起,并且View之间可以进行切换,并且在多个View切换过程体现渐隐渐现的动画效果。通过AdapterViewAnimator.setAdapter()方法设置一组要显示的View,通过AdapterViewAnimator.showPrevious()方法移动到前一个View,通过AdapterViewAnimator.showNext()移动到下一个View,示例代码如下:

效果图:

Src/com.lenovo.cn/AdapterViewAnimatorActivity.java

res/layout/adapterviewanimator_layout.xml

AdapterViewFlipper控件

AdapterViewFilpper(堆View),是AdapterViewAnimator的子类,是一系列View的集合,这些View叠加一起,并且View之间可以进行切换,并且在多个View切换过程体现渐隐渐现的动画效果。通过AdapterViewFilpper.setAdapter()方法设置一组要显示的View,通过AdapterViewFilpper.showPrevious()方法移动到前一个View,通过AdapterViewFilpper.showNext()移动到下一个View,示例代码如下:

效果图:

Src/com.lenovo.cn/AdapterViewFlipperActivity.java

package com.lenovo.cn;

import android.app.Activity;

import android.graphics.Color;

import android.os.Bundle;

import android.view.View;

importandroid.view.View.OnClickListener;

import android.widget.AdapterViewFlipper;

import android.widget.Button;

public classAdapterViewFlipperActivity extendsActivity {

private int [] mColors = {Color.BLUE,Color.CYAN, Color.GRAY, Color.GREEN, Color.RED};

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.adapterviewflipper_layout);

final AdapterViewFlipperadapterViewFlipper = (AdapterViewFlipper) findViewById(R.id.mAdapterViewFlipper);

ColorAdapter colorAdapter = newColorAdapter(this, mColors);

adapterViewFlipper.setAdapter(colorAdapter);

final Button previousButon =(Button) findViewById(R.id.previousButton);

previousButon.setOnClickListener(newOnClickListener() {

public void onClick(Viewview) {

adapterViewFlipper.showPrevious();

}

});

final Button nextButton =(Button) findViewById(R.id.nextButton);

nextButton.setOnClickListener(newOnClickListener() {

public void onClick(Viewview) {

adapterViewFlipper.showNext();

}

});

}

}

res/layout/adapterviewflipper_layout.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"

android:orientation = "horizontal"

android:layout_width = "fill_parent"

android:layout_height = "fill_parent"

>

<AdapterViewFlipper

android:id = "@+id/mAdapterViewFlipper"

android:layout_width = "fill_parent"

android:layout_height = "wrap_content"

android:loopViews = "true"

/>

<LinearLayout

android:orientation = "vertical"

android:layout_width = "wrap_content"

android:layout_height = "wrap_content"

>

<Button

android:id = "@+id/previousButton"

android:layout_width = "wrap_content"

android:layout_height = "wrap_content"

android:text = "@string/before"

/>

<Button

android:id = "@+id/nextButton"

android:layout_width = "wrap_content"

android:layout_height = "wrap_content"

android:text = "@string/next"

/>

</LinearLayout>

</LinearLayout>

ListPopupWindow控件

  锚于宿主视图,并显示如一个建议,当输入到一个列表中的选项的EditText查看列表。

CalendarView控件

CalendarView是一个日历控件,作为显示和选择日期。日期范围的及日历样式是可配置的。用户可以选择一个日期,也可以触摸滚动日历。可在xml布局中添加此控件,可通过CalendarView.setOnDateChangeListener()方法为此控件的每一格设置点击事件。示例代码如下:
效果图:


Src/com.lenovo.cn/CalendarViewActivity.java

package com.lenovo.cn;

import android.app.Activity;

import android.os.Bundle;

importandroid.widget.CalendarView;

importandroid.widget.CalendarView.OnDateChangeListener;

import android.widget.Toast;

publicclass CalendarViewActivityextends Activity{

@Override

protectedvoid onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.calendarview_layout);

CalendarViewcalendarView = (CalendarView) findViewById(R.id.calendarView);

calendarView.setOnDateChangeListener(new OnDateChangeListener() {

@Override

publicvoid onSelectedDayChange(CalendarView view,int year,int month,int dayOfMonth) {

Toast.makeText(CalendarViewActivity.this, getString(R.string.select) + year+getString(R.string.year) + month +getString(R.string.month) + dayOfMonth +getString(R.string.day), Toast.LENGTH_SHORT).show();

}

});

}

}
res/layout/calendarview_layout.xml

<?xml version="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"android:orientation="vertical"

android:layout_height="fill_parent">

<CalendarViewandroid:layout_width="700dip"

android:layout_height="750dip"

android:id="@+id/calendarView"

/>

</LinearLayout>

NumberPicker控件

  这控件可用于设置时间的控件,允许用户选择一个数字,从一个预定范围。该部件提供了一个输入字段和向上和向下选择一个数字按钮。可按这两个按钮选择一个值填入显示框中,显示框还允许用户触摸滚动,这时会显示上个与下个的值,可以选择当前值来显示。此类中提供了NumberPicker.setLeft()方法设置最小值,NumberPicker.setMaxValue()设置最大值,可用NumberPicker.setOnValueChangedListener()方法监听更改值事件,只需new OnValueChangeListener对象,并重写里面onValueChange()方法即可,示例代码如下:

效果图:

Src/com.lenovo.cn/NumberPickerActivity.java

package com.lenovo.cn;

import android.app.Activity;

import android.os.Bundle;

import android.widget.NumberPicker;

importandroid.widget.NumberPicker.OnValueChangeListener;

import android.widget.Toast;

public classNumberPickerActivity extendsActivity {

NumberPickermNumberPicker1 = null;

NumberPickermNumberPicker2 = null;

NumberPickermNumberPicker3 = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.numberpicker_layout);

mNumberPicker1 = (NumberPicker)findViewById(R.id.numberPicker1);

mNumberPicker1.setLeft(0);

mNumberPicker1.setMaxValue(24);

mNumberPicker1.setOnValueChangedListener(new OnValueChangeListener() {

@Override

public void onValueChange(NumberPicker picker, int oldVal, int newVal){

Toast.makeText(NumberPickerActivity.this,picker.getValue()+getString(R.string.hours), Toast.LENGTH_SHORT).show();

}

});

mNumberPicker2 = (NumberPicker)findViewById(R.id.numberPicker2);

mNumberPicker2.setLeft(0);

mNumberPicker2.setMaxValue(60);

mNumberPicker2.setOnValueChangedListener(new OnValueChangeListener() {

@Override

public void onValueChange(NumberPicker picker, int oldVal, int newVal){

Toast.makeText(NumberPickerActivity.this,picker.getValue()+getString(R.string.minutes), Toast.LENGTH_SHORT).show();

}

});

mNumberPicker3 = (NumberPicker)findViewById(R.id.numberPicker3);

mNumberPicker3.setLeft(0);

mNumberPicker3.setMaxValue(60);

mNumberPicker3.setOnValueChangedListener(new OnValueChangeListener() {

@Override

public void onValueChange(NumberPicker picker, int oldVal, int newVal){

Toast.makeText(NumberPickerActivity.this,picker.getValue()+getString(R.string.second), Toast.LENGTH_SHORT).show();

}

});

}

}

res/layout/numberpicker_layout.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

<TextView android:text="@string/hourset"

android:layout_width="80dip"

android:layout_height="wrap_content"

android:gravity="center_horizontal"/>

<LinearLayout

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

<NumberPicker android:id="@+id/numberPicker1"

android:layout_width="80dip"

android:layout_height="wrap_content"

android:focusable="true"

android:focusableInTouchMode="true"/>

<TextView android:text="@string/hours"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

<NumberPicker android:id="@+id/numberPicker2"

android:layout_width="80dip"

android:layout_height="wrap_content"

android:focusable="true"

android:focusableInTouchMode="true"/>

<TextView android:text="@string/minutes"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

<NumberPicker android:id="@+id/numberPicker3"

android:layout_width="80dip"

android:layout_height="wrap_content"

android:focusable="true"

android:focusableInTouchMode="true"/>

<TextView android:text="@string/second"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

</LinearLayout>

</LinearLayout>

StackView控件

StackView(堆View),是AdapterViewAnimator的子类,一系列View的集合,这些View以层叠样式显示,并且View之间可以进行切换(切换方式有两种:(1)拖动StackView组件中的某一个View,(2)通过代码控制),这样每一个View都有机会显示给用户,供用户使用,并且在多个View切换过程中可以添加动画效果。通过StackView.setAdapter()方法设置一组要显示的View,通过StackView.showPrevious()方法移动到前一个View,通过StackView.showNext()移动到下一个View示例代码如下:

效果图:

Src/com.lenovo.cn/StackViewActivity.java

package com.lenovo.cn;

import android.app.Activity;

import android.graphics.Color;

import android.os.Bundle;

import android.view.View;

importandroid.view.View.OnClickListener;

import android.widget.Button;

import android.widget.StackView;

public classStackViewActivity extends Activity {

private int [] mColors = {Color.BLUE,Color.CYAN, Color.GRAY, Color.GREEN, Color.RED};

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.stackview_layout);

final StackView stackView = (StackView) findViewById(R.id.mStackView);

ColorAdapter colorAdapter = newColorAdapter(this, mColors);

stackView.setAdapter(colorAdapter);

final Button previousButon =(Button) findViewById(R.id.previousButton);

previousButon.setOnClickListener(newOnClickListener() {

public void onClick(Viewview) {

stackView.showPrevious();

}

});

final Button nextButton =(Button) findViewById(R.id.nextButton);

nextButton.setOnClickListener(newOnClickListener() {

public void onClick(Viewview) {

stackView.showNext();

}

});

}

}

Src/com.lenovo.cn/ColorAdapter.java

package com.lenovo.cn;

import android.content.Context;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.LinearLayout;

public classColorAdapter extends BaseAdapter {

private ContextmContext;

private int [] mColors;

public ColorAdapter(Contextcontext, int [] colors) {

mContext = context;

mColors = colors;

}

public int getCount() {

return mColors == null ? 0 : mColors.length;

}

public Object getItem(int position) {

return mColors == null ?null : mColors[position];

}

public long getItemId(intposition) {

return position;

}

public View getView(int position, View cacheView, ViewGroupparent) {

LinearLayout.LayoutParams colorLayoutParams = new LinearLayout.LayoutParams(100, 100);

LinearLayout colorLayout = newLinearLayout(mContext);

colorLayout.setBackgroundColor(mColors[position]);

colorLayout.setLayoutParams(colorLayoutParams);

return colorLayout;

}

}

res/layout/stackview_layout.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"

android:orientation = "horizontal"

android:layout_width = "fill_parent"

android:layout_height = "fill_parent"

>

<StackView

android:id = "@+id/mStackView"

android:layout_width = "fill_parent"

android:layout_height = "wrap_content"

android:loopViews = "true"

/>

<LinearLayout

android:orientation = "vertical"

android:layout_width = "wrap_content"

android:layout_height = "wrap_content"

>

<Button

android:id = "@+id/previousButton"

android:layout_width = "wrap_content"

android:layout_height = "wrap_content"

android:text = "@string/before"

/>

<Button

android:id = "@+id/nextButton"

android:layout_width = "wrap_content"

android:layout_height = "wrap_content"

android:text = "@string/next"

/>

</LinearLayout>

</LinearLayout>

PopupMenu控件

  PopupMenu是个下拉菜单控件,可增加多条下拉菜单以及给每条下拉菜单增加子菜单。

可通过new PopupMenu(context, view)创建一个下拉菜单,view为点击的控件,点此view时显示菜单,通过PopupMenu.getMenuInflater().inflate(R.menu.popup, PopupMenu.getMenu())方式为下接菜单设置主菜单项及子菜单项,R.menu.popup为下拉菜单资源文件,getMenu用于取得与此相关的弹出菜单对象,整个方法的作用就是将资源文件中的菜单项加入弹出菜单中,通过PopupMenu.setOnMenuItemClickListener()方法为每个弹出菜单项设定点击事件。示例代码如下:

效果图:

Src/com.lenovo.cn/PopupMenuActivity.java

package com.lenovo.cn;

import android.app.Activity;

import android.os.Bundle;

import android.view.MenuItem;

import android.view.View;

import android.widget.PopupMenu;

import android.widget.Toast;

public classPopupMenuActivity extends Activity {

PopupMenupopup = null;

@Override

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.popupmenu_layout);

}

public void onPopupButtonClick(View button) {

popup = new PopupMenu(this, button);

popup.getMenuInflater().inflate(R.menu.popup, popup.getMenu());

popup.setOnMenuItemClickListener(newPopupMenu.OnMenuItemClickListener() {

public booleanonMenuItemClick(MenuItem item) {

if(item.getTitle().equals(getString(R.string.exit))){

popup.dismiss();

}else{

Toast.makeText(PopupMenuActivity.this, getString(R.string.click) + item.getTitle(),Toast.LENGTH_SHORT).show();

}

return true;

}

});

popup.show();

}

}

res/menu/popup.xml

<?xml version="1.0"encoding="utf-8"?>

<menuxmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@+id/search"

android:icon="@android:drawable/ic_menu_search"

android:title="@string/popup_menu_search"/>

<item android:id="@+id/add"

android:icon="@android:drawable/ic_menu_add"

android:title="@string/popup_menu_add" />

<item android:id="@+id/edit"

android:icon="@android:drawable/ic_menu_edit"

android:title="@string/popup_menu_edit">

<menu>

<itemandroid:id="@+id/share"

android:icon="@android:drawable/ic_menu_share"

android:title="@string/popup_menu_share" />

</menu>

</item>

<item android:id="@+id/edit"

android:icon="@android:drawable/ic_menu_edit"

android:title="@string/popup_menu_edit"/>

</menu>

res/layout/popupmenu_layout.xml

<?xml version="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

<Button android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:onClick="onPopupButtonClick"

android:text="@string/popup_menu_button" />

</LinearLayout>

SearchView控件

  SearchView是一个搜索框控件,可增加一个ListView实现自动补全功能,通过Adapter给此控件加入自动补全列表,可根据输入的字段进行搜索,SearchView.setOnQueryTextListener()监听事件,其中onQueryTextChange()方法监听输入事件,onQueryTextSubmit()方法监听回车或搜索按钮事件。SearchView.setSubmitButtonEnabled()方法用于显示一个执行搜索功能的按钮,点此按钮时会触发onQueryTextSubmit()方法。SearchView.setQueryHint()方法用于控件默认显示的文本,示例代码如下:

效果图:

Src/com.lenovo.cn/SearchViewActivity.java

package com.lenovo.cn;

import android.app.Activity;

import android.os.Bundle;

import android.text.TextUtils;

import android.view.Window;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import android.widget.SearchView;

import android.widget.Toast;

/**

* 搜索框控件,可自动补全

*/

public classSearchViewActivity extends ActivityimplementsSearchView.OnQueryTextListener {

private SearchViewmSearchView;

private ListView mListView;

/**自动补全列表**/

private final String[] mStrings = {"a","b","c"};

@Override

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

getWindow().requestFeature(Window.FEATURE_ACTION_BAR);

setContentView(R.layout.searchview_layout);

mListView = (ListView) findViewById(R.id.list_view);

mListView.setAdapter(newArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mStrings));

mListView.setTextFilterEnabled(true);

mSearchView = (SearchView) findViewById(R.id.search_view);

mSearchView.setIconifiedByDefault(false);

mSearchView.setOnQueryTextListener(this);

mSearchView.setSubmitButtonEnabled(true);mSearchView.setQueryHint(getString(R.string.search));

}

/**输入字符时触发**/

public boolean onQueryTextChange(String newText) {

if (TextUtils.isEmpty(newText)) {

mListView.clearTextFilter();

} else {

mListView.setFilterText(newText.toString());

}

return true;

}

/**按回车或搜索按钮时触发,此处编写搜索代码**/

public boolean onQueryTextSubmit(String query) {

Toast.makeText(this,getString(R.string.search_click)+" "+ query, 0).show();

return false;

}

}

res/layout/searchview_layout.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

<SearchView

android:id="@+id/search_view"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

<ListView

android:id="@+id/list_view"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_weight="1"/>

</LinearLayout>

Notification控件
  Notification扩展了一些功能,以便支持更多的内容来丰富的状态栏通知,增加了新Notification.Builder类允许您轻松地创建通知的对象。通过new Notification.Builder()创建一个Notification.Builder对象,builder.setDefaults()方法设置通知音乐,builder.setAutoCancel()方法设置点通知后,状态栏的通知自动隐去,builder.setContentTitle()方法设置通知标题,builder.setContentText()方法设置通知内容,现在Notification支持在通知时使用大图标了,可使用builder.setLargeIcon()方法设置,如果想继续使用小图标,可用builder.setSmallIcon()方法设置。可使用builder.setContentIntent()方法为通知设置点击后执行的事件。builder.getNotification()方法可获得Notification对象,示例代码如下:

Src/com.lenovo.cn/Notification_demo.java

package com.lenovo.cn;

import java.io.InputStream;

import android.app.Activity;

import android.app.Notification;

import android.app.NotificationManager;

import android.app.PendingIntent;

import android.content.Intent;

import android.graphics.Bitmap;

importandroid.graphics.drawable.BitmapDrawable;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public classNotification_demo extends Activity {

NotificationManagermanager = null;

Notification.Builderbuilder = null;

Notificationn = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.notification_layout);

Button notification_click = (Button)findViewById(R.id.notification_click);

manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

builder = new Notification.Builder(Notification_demo.this);

builder.setDefaults(Notification.DEFAULT_SOUND);

builder.setAutoCancel(true);

builder.setContentTitle("title");

builder.setContentText("message");

InputStream is =getResources().openRawResource(R.drawable.abc);

Bitmap bitmap = new BitmapDrawable(is).getBitmap();

builder.setLargeIcon(bitmap);//设置了但是没效果

// builder.setSmallIcon(R.drawable.icon);

Intent intent = new Intent(this,PopupMenuActivity.class);

PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);

builder.setContentIntent(pIntent);

n = builder.getNotification();

notification_click.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

manager.notify(0, n);

}

});

}

}

res/layout/searchview_layout.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

android:id="@+id/line">

<Button android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:id="@+id/notification_click"

android:text="@string/notification_click" />

</LinearLayout>

你可能感兴趣的:(android)