首先,我们来看一下这个程序的运行截图:
首先点击菜单键,我们会看到菜单中有两个选项,一个是选择背光颜色,另一个是离开按钮,当我们点击背光颜色之后,会出现如上所示的效果。
接着,我们点击蓝色背光,出现如下所示的画面:
实现这个程序很简单,下面给出实现的代码:
1.主程序文件
package irdc.ex10_01; /* import相关class */ import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.os.PowerManager; import android.view.Menu; import android.view.MenuItem; import android.view.Window; import android.view.WindowManager; import android.widget.LinearLayout; import android.widget.Toast; public class EX10_01 extends Activity { /* * PowerManager可以控制手机的wakelock,使手机处于恒亮的状态 */ private boolean ifLocked = false; private PowerManager.WakeLock mWakeLock; private PowerManager mPowerManager; private LinearLayout mLinearLayout; /* 独一无二的menu选项identifier,用以识别事件 */ static final private int M_CHOOSE = Menu.FIRST; static final private int M_EXIT = Menu.FIRST+1; /* 颜色菜单的颜色与文字数组 */ private int[] color={R.drawable.white,R.drawable.blue, R.drawable.pink,R.drawable.green, R.drawable.orange,R.drawable.yellow}; private int[] text={R.string.str_white,R.string.str_blue, R.string.str_pink,R.string.str_green, R.string.str_orange,R.string.str_yellow}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* 必须?setContentView之前调用全屏显示 */ requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags ( WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN ); setContentView(R.layout.main); /* 初始化mLinearLayout */ mLinearLayout=(LinearLayout)findViewById(R.id.myLinearLayout1); /* 取得PowerManager */ mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); /* 取得WakeLock */ mWakeLock = mPowerManager.newWakeLock ( PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "BackLight" ); WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.screenBrightness = 1.0f; getWindow().setAttributes(lp); } @Override public boolean onCreateOptionsMenu(Menu menu) { /* menu组ID */ int idGroup1 = 0; /* menuItemID */ int orderMenuItem1 = Menu.NONE; int orderMenuItem2 = Menu.NONE+1; /* 建立menu */ menu.add(idGroup1,M_CHOOSE,orderMenuItem1,R.string.str_title); menu.add(idGroup1,M_EXIT,orderMenuItem2,R.string.str_exit); menu.setGroupCheckable(idGroup1, true, true); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case (M_CHOOSE): /* 弹出选择背后颜色的AlertDialog */ new AlertDialog.Builder(EX10_01.this) .setTitle(getResources().getString(R.string.str_title)) .setAdapter(new MyAdapter(this,color,text),listener1) .setPositiveButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }) .show(); break; case (M_EXIT): /* 离开程序 */ this.finish(); break; } return super.onOptionsItemSelected(item); } /* 选择背后颜色的AlertDialog的OnClickListener */ OnClickListener listener1=new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int which) { /* 更改背景颜色 */ mLinearLayout.setBackgroundResource(color[which]); /* Toast显示设定的颜色 */ Toast.makeText(EX10_01.this, getResources().getString(text[which]), Toast.LENGTH_LONG).show(); } }; @Override protected void onResume() { /* onResume()时调用wakeLock() */ wakeLock(); super.onResume(); } @Override protected void onPause() { /* onPause()时调用wakeUnlock() */ wakeUnlock(); super.onPause(); } /* 唤起WakeLock的method */ private void wakeLock() { if (!ifLocked) { ifLocked = true; mWakeLock.acquire(); } } /* 释放WakeLock的method */ private void wakeUnlock() { if (ifLocked) { mWakeLock.release(); ifLocked = false; } } }
2.Adapter文件
package irdc.ex10_01; /* import相关class */ import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; /* 自定义的Adapter,继承android.widget.BaseAdapter */ public class MyAdapter extends BaseAdapter { private LayoutInflater mInflater; private int[] color; private int[] text; public MyAdapter(Context context,int[] _color,int[] _text) { mInflater = LayoutInflater.from(context); color = _color; text = _text; } /* 因继承BaseAdapter,需重写以下method */ @Override public int getCount() { return text.length; } @Override public Object getItem(int position) { return text[position]; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position,View convertView,ViewGroup par) { ViewHolder holder; if(convertView == null) { /* 使用自定义的change_color作为Layout */ convertView = mInflater.inflate(R.layout.change_color, null); /* 初始化holder的text */ holder = new ViewHolder(); holder.mText=(TextView)convertView.findViewById(R.id.myText); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.mText.setText(text[position]); holder.mText.setBackgroundResource(color[position]); return convertView; } /* class ViewHolder */ private class ViewHolder { TextView mText; } }
3.两个布局文件
3.1 主布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/myLinearLayout1" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/white" />
3.2 对话框布局
<?xml version="1.0" encoding="utf-8"?> <TextView android:id="@+id/myText" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_gravity="center_vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10px" android:textSize="18px" android:textColor="@drawable/black" />
4.我们需要在程序中加入如下的权限
<uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.WRITE_SETTINGS"/> <uses-permission android:name="android.permission.HARDWARE_TEST"/>