需求来源是为了防止手机被盗后,被人发现手机防盗功能而卸载本工具,是故将手机防盗起个隐晦点的标题,如MP3。
为LostProtectedActivity创建菜单项“更改标题名称”,当用户点击该菜单时弹出输入框让用户重新输入自定义标题名。
/**
*
* @param menu
* @return
*/
@Override
public boolean onCreateOptionsMenu(android.view.Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(Menu.NONE, MENU_ITEM_ID_RENAME_TITLE, 0, "更改标题名称");
return true;
}
/**
*菜单处理事件
* @param item
* @return
*/
@Override
public boolean onOptionsItemSelected(android.view.MenuItem item) {
//选择“更改标题名称”菜单,弹出对话框让用户输入标题
if (item.getItemId()==MENU_ITEM_ID_RENAME_TITLE) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
final EditText et = new EditText(this);
et.setHint("请输入新的标题名,可为空");
builder.setView(et);
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
String newtitle = et.getText().toString().trim();
SharedPreferences.Editor editor = sp.edit();
editor.putString("newtitle", newtitle);
editor.commit();
}
});
builder.create().show();
return true;
}
return super.onOptionsItemSelected(item);
}
这里对话框由于只有一个文本输入框,所以不需要布局文件,直接动态创建文本框并设置为对话框的View即可。
MainActivity在显示items的时候MainAdapter要对第一个item的名称额外处理下,如果有用户自定义的标题则显示自定义标题:
/**
* 构造函数
* @param context
*/
public MainAdapter(Context context) {
this.context = context;
//获取系统中的布局填充器
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//读取用户自定义标题
SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
String newtitle = sp.getString("newtitle", "");
if (newtitle.isEmpty()==false) {
names[0] = newtitle;
}
}
效果图: