360项目

shape资源创建图片 (重点)

11.res -> drawable -> xxx.xml 2 3 <shape xmlns:android="http://schemas.android.com/apk/res/android" 4 android:shape="rectangle" 5 > 6 <!-- shape : 图片的形状 rectangle:矩形 oval:椭圆,圆形 line:线 ring:环形--> 7 <!-- corners : 角的弧度 --> 8 <corners android:radius="32dp"/> 9 <!-- solid 颜色 --> 10 <solid android:color="#99FFFFFF"/> 11 <!-- size : 设置宽高 --> 12 <size android:width="32dp" 13 android:height="32dp" 14 /> 15 <!-- gradient : 渐变色 angle:渐变的角度 --> 16 <gradient android:startColor="#FF0000" android:centerColor="#00FF00" android:endColor="#0000FF" android:angle="-90"/> 17 18 </shape> 192.布局文件使用 20 <!-- layout_margin : 距离父控件上下左右的距离 21 scaleType : 设置图片显示类型,center:保持图片大小不变,并在ImageView中心显示 22 --> 23 <ImageView 24 android:id="@+id/home_btn_setting" 25 android:layout_width="wrap_content" 26 android:layout_height="wrap_content" 27 android:src="@drawable/setting" 28 android:layout_alignParentRight="true" 29 android:layout_margin="4dp" 30 android:background="@drawable/shape_home_setting" 31 android:scaleType="center" 32 />

状态选择器 (重点)

1状态选择器:特殊的图片,可以根据不同的状态显示不同的图片,比如按下,抬起 2 3<selector xmlns:android="http://schemas.android.com/apk/res/android"> 4 <item android:state_pressed="true" 5 android:drawable="@drawable/button_pressed" /> <!-- pressed :按下显示的图片--> 6 <item android:state_focused="true" 7 android:drawable="@drawable/button_focused" /> <!-- focused :获取焦点显示的图片--> 8 <item android:state_hovered="true" 9 android:drawable="@drawable/button_focused" /> <!-- hovered :鼠标悬停显示的图片--> 10 <item android:drawable="@drawable/button_normal" /> <!-- default : 默认显示的状态--> 11</selector> 12 13步骤: 14 1.res -> drawable -> xxx.xml 15 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 16 <item android:state_pressed="true" 17 android:drawable="@drawable/shape_home_setting_pressed" /> <!-- pressed :按下显示的图片--> 18 <item android:drawable="@drawable/shape_home_setting" /> <!-- default : 默认显示的状态--> 19 </selector> 20 2.布局文件使用,设置控件的背景 21 <!-- layout_margin : 距离父控件上下左右的距离 22 scaleType : 设置图片显示类型,center:保持图片大小不变,并在ImageView中心显示 23 clickable : 设置imageView可以点击 24 --> 25 <ImageView 26 android:id="@+id/home_btn_setting" 27 android:layout_width="wrap_content" 28 android:layout_height="wrap_content" 29 android:src="@drawable/setting" 30 android:layout_alignParentRight="true" 31 android:layout_margin="4dp" 32 android:background="@drawable/selector_home_setting" 33 android:scaleType="center" 34 android:clickable="true" 35 />

展示gridview的数据

11.设置获取数据 2 private final String[] TITLES = new String[] { "手机防盗", "骚扰拦截", "软件管家", 3 "进程管理", "流量统计", "手机杀毒", "缓存清理", "常用工具" }; 4 private final String[] DESCS = new String[] { "远程定位手机", "全面拦截骚扰", "管理您的软件", 5 "管理运行进程", "流量一目了然", "病毒无处藏身", "系统快如火箭", "工具大全" }; 6 private final int[] ICONS = new int[] { R.drawable.sjfd, R.drawable.srlj, 7 R.drawable.rjgj, R.drawable.jcgl, R.drawable.lltj, R.drawable.sjsd, 8 R.drawable.hcql, R.drawable.cygj }; 92.设置gridview的adapter展示数据 10 /** 11 * 初始化控件 2016-9-26 下午5:17:47 12 */ 13 private void initView() { 14 15 ...... 16 17 // 根据listview操作一样 18 mGridView.setAdapter(new Myadapter()); 19 } 20 21 private class Myadapter extends BaseAdapter { 22 // 设置条目的个数 23 @Override 24 public int getCount() { 25 return ICONS.length; 26 } 27 28 // 设置条目的样式 29 @Override 30 public View getView(int position, View convertView, ViewGroup parent) { 31 //将布局文件转化成view对象 32 View view = View.inflate(getApplicationContext(), R.layout.home_gridview_item, null); 33 //从view对象中获取控件,展示数据 34 ImageView mIcon = (ImageView) view.findViewById(R.id.item_iv_icon); 35 TextView mTitle = (TextView) view.findViewById(R.id.item_tv_title); 36 TextView mDesc = (TextView) view.findViewById(R.id.item_tv_desc); 37 //展示数据 38 mIcon.setImageResource(ICONS[position]);//根据条目的索引,从数据中获取图片,设置给imageView展示 39 mTitle.setText(TITLES[position]); 40 mDesc.setText(DESCS[position]); 41 return view; 42 } 43 44 // 根据条目的索引,获取条目对应的数据 45 @Override 46 public Object getItem(int position) { 47 // TODO Auto-generated method stub 48 return null; 49 } 50 51 // 获取条目的id 52 @Override 53 public long getItemId(int position) { 54 // TODO Auto-generated method stub 55 return 0; 56 } 57 }

Gridview的条目样式细节修改

11.修改位置距离 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="wrap_content" 5 android:padding="6dp" 6 android:background="@drawable/selector_home_gridview_item_bg" 7 > 8 <!-- padding : 距离上下左右内边框的距离 --> 9 <ImageView 10 android:id="@+id/item_iv_icon" 11 android:layout_width="wrap_content" 12 android:layout_height="wrap_content" 13 android:src="@drawable/sjfd" 14 android:layout_centerVertical="true" 15 /> 16 <!-- gravity : 控制控件内部内容/控件的位置 17 layout_gravity : 控制控件在父控件的位置 18 layout_centerVertical : RelativeLayout中才可以使用的属性,让控件在父控件垂直居中 19 --> 20 <LinearLayout 21 android:layout_width="match_parent" 22 android:layout_height="wrap_content" 23 android:orientation="vertical" 24 android:layout_toRightOf="@+id/item_iv_icon" 25 android:layout_marginLeft="6dp" 26 android:layout_centerVertical="true" 27 > 28 <TextView 29 android:id="@+id/item_tv_title" 30 android:layout_width="wrap_content" 31 android:layout_height="wrap_content" 32 android:text="手机防盗" 33 android:textSize="18sp" 34 android:textColor="#000000" 35 android:layout_gravity="center_vertical" 36 /> 37 <TextView 38 android:id="@+id/item_tv_desc" 39 android:layout_width="wrap_content" 40 android:layout_height="wrap_content" 41 android:text="远程定位手机" 42 android:textSize="14sp" 43 android:textColor="#99000000" 44 android:layout_marginTop="5dp" 45 android:layout_gravity="center_vertical" 46 /> 47 </LinearLayout> 48 49 </RelativeLayout> 502.设置条目的状态选择器 51 res -> drawable -> xxx.xml 52 53 <selector xmlns:android="http://schemas.android.com/apk/res/android" > 54 <item android:state_pressed="true" android:drawable="@drawable/antispam_report_button_press"></item> 55 <item android:drawable="@drawable/antispam_report_button"></item> 56 </selector> 57 583.修改gridview的行与行,列与列之间的距离 59 60 <!-- numColumns : 设置显示的列数 61 horizontalSpacing : 设置列与列之间的距离 62 verticalSpacing : 行与行之间的距离 63 --> 64 <GridView 65 android:id="@+id/home_gv_gridview" 66 android:layout_width="match_parent" 67 android:layout_height="match_parent" 68 android:numColumns="2" 69 android:horizontalSpacing="5dp" 70 android:verticalSpacing="5dp" 71 ></GridView>

跳转设置中心界面并搭建设置中心界面

11.跳转操作 2 HomeActivity.java 3 4 /** 5 * 设置按钮的点击事件 6 * view:被点击的控件的view对象 7 * 2016-9-27 上午10:31:12 8 */ 9 public void enterSetting(View view){ 10 //跳转设置中心界面 11 Intent intent = new Intent(this,SettingActivity.class); 12 startActivity(intent); 13 } 142.搭建设置中心界面 15 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 16 xmlns:tools="http://schemas.android.com/tools" 17 android:layout_width="match_parent" 18 android:layout_height="match_parent" 19 android:orientation="vertical" 20 > 21 <!-- paddingTop : 距离控件内顶边框的距离 --> 22 <TextView 23 android:layout_width="match_parent" 24 android:layout_height="wrap_content" 25 android:text="设置中心" 26 android:background="#429ED6" 27 android:textSize="20sp" 28 android:textColor="#FFFFFF" 29 android:gravity="center" 30 android:paddingTop="8dp" 31 android:paddingBottom="8dp" 32 /> 33 34 </LinearLayout>

样式抽取操作 (重点)

1因为每个activity的标题的样式都是一样的,所有抽取到样式文件中 21.将属性样式抽取到样式文件中 3 res -> values -> styles.xml -> 创建style条目 4 5 <style name="ActivityTitleStyle"> 6 <item name="android:layout_width">match_parent</item> 7 <item name="android:layout_height">wrap_content</item> 8 <item name="android:background">#429ED6</item> 9 <item name="android:textSize">20sp</item> 10 <item name="android:textColor">#FFFFFF</item> 11 <item name="android:gravity">center</item> 12 <item name="android:paddingTop">8dp</item> 13 <item name="android:paddingBottom">8dp</item> 14 </style> 152.布局文件使用样式 16 <!-- paddingTop : 距离控件内顶边框的距离 17 style: 设置使用样式 18 --> 19 <TextView 20 style="@style/ActivityTitleStyle" 21 android:text="设置中心" 22 />

将设置中心条目的布局抽取到自定义组合控件操作 (重点)

11.创建设置中心条目的布局 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="wrap_content" 5 android:paddingTop="8dp" 6 android:paddingBottom="8dp" 7 android:paddingLeft="30dp" 8 android:paddingRight="30dp" 9 > 10 11 <TextView 12 android:id="@+id/settingview_tv_text" 13 android:layout_width="wrap_content" 14 android:layout_height="wrap_content" 15 android:text="设置自动更新" 16 android:textColor="#000000" 17 android:textSize="18sp" 18 android:layout_centerVertical="true" 19 /> 20 21 <ImageView 22 android:id="@+id/settingview_iv_islock" 23 android:layout_width="wrap_content" 24 android:layout_height="wrap_content" 25 android:src="@drawable/off" 26 android:layout_alignParentRight="true" 27 android:layout_centerVertical="true" 28 /> 29 </RelativeLayout> 302.创建自定义控件 31 public class SettingView extends RelativeLayout { 32 33 public SettingView(Context context) { 34 //super(context); 35 this(context,null); 36 } 37 38 public SettingView(Context context, AttributeSet attrs) { 39 //super(context, attrs); 40 this(context,attrs,-1); 41 } 42 43 public SettingView(Context context, AttributeSet attrs, int defStyle) { 44 super(context, attrs, defStyle); 45 46 initView(); 47 } 48 } 493.将设置中心条目的布局文件转化为view对象,添加自定义控件中 50 /** 51 * 将设置中心条目的布局,添加到自定义控件 52 * 2016-9-27 上午10:55:58 53 */ 54 private void initView() { 55 //将设置中心条目的布局,转化成view对象,添加到自定义控件中 56 View view = View.inflate(getContext(), R.layout.settingview, null); 57 this.addView(view);//将一个view对象,添加到自定义控件中 58 } 594.使用操作 60 <cn.itcast.mobliesafe05.view.SettingView 61 android:id="@+id/setting_sv_update" 62 android:layout_width="match_parent" 63 android:layout_height="wrap_content" 64 ></cn.itcast.mobliesafe05.view.SettingView>

设置条目的背景

1因为每个条目的背景都不一样,所有没有抽取背景,直接单独设置 21.创建背景的状态选择器 3 4 res -> drawable -> xxx.xml 5 6 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 7 <item android:state_pressed="true" 8 android:drawable="@drawable/first_pressed" /> <!-- pressed :按下显示的图片--> 9 <item android:drawable="@drawable/first_normal" /> <!-- default : 默认显示的状态--> 10 </selector> 11 122.设置设置中心中的界面的自定义控件 13 14 <cn.itcast.mobliesafe05.view.SettingView 15 android:id="@+id/setting_sv_update" 16 android:layout_width="match_parent" 17 android:layout_height="wrap_content" 18 android:background="@drawable/selector_setting_item_top" 19 android:layout_marginTop="8dp" 20 android:clickable="true" 21 ></cn.itcast.mobliesafe05.view.SettingView>

创建自定义属性操作 (重点)

1自定义属性:因为系统没有提供相关属性给我们使用,所以我们要自己创建,自己使用 2 3参考系统的操作 4sdk\platforms\android-16\data\res\values\attrs.xml -> 搜索TextView 5 6步骤 7 res -> values -> attrs.xml 8 9 <resources> 10 <declare-styleable name="SettingView"> 11 <!-- 设置文本的属性 --> 12 <attr name="title" format="string" /> <!-- name : 属性的名称 format:属性的值的类型 --> 13 </declare-styleable> 14 </resources> 15 16检测:查看R文件是否有创建属性的标示

使用自定属性的操作 (重点)

11.布局文件中使用自定义属性 2 3 activity_setting.xml 4 5 1.1.设置命名空间 6 xmlns:itcast="http://schemas.android.com/apk/res/cn.itcast.mobliesafe05" 7 1.2.控件中如何使用 8 <cn.itcast.mobliesafe05.view.SettingView 9 android:id="@+id/setting_sv_update" 10 android:layout_width="match_parent" 11 android:layout_height="wrap_content" 12 android:background="@drawable/selector_setting_item_top" 13 android:layout_marginTop="8dp" 14 android:clickable="true" 15 itcast:title="设置自动更新" 16 ></cn.itcast.mobliesafe05.view.SettingView> 172.因为自定义控件是否无法显示文本,显示文本是通过自定义控件中的textview显示的,所以需要将设置的文本传递给自定义控件的textview进行显示 18 19 cn.itcast.mobliesafe05.view.SettingView.java 20 21 2.1.在自定义控件获取设置给自定义控件的文本数据 22 public SettingView(Context context, AttributeSet attrs, int defStyle) { 23 super(context, attrs, defStyle); 24 25 initView(); 26 27 //因为自定义控件无法显示自定义属性设置的文本,所以需要将自定义属性的文本获取出来设置给textview显示 28 //1.获取自定义属性的值,因为AttributeSet保存到控件的所有属性的值 29 //通过命名空间和属性的名称,获取属性的值 30 //namespace : 命名空间 31 //name : 属性的名称 32 String title = attrs.getAttributeValue(NAMESPACE, "title"); 33 34 } 35 2.2.将自定义控件中的textview初始化出来 36 /** 37 * 将设置中心条目的布局,添加到自定义控件 38 * 2016-9-27 上午10:55:58 39 */ 40 private void initView() { 41 42 ..... 43 44 //初始化控件 45 mText = (TextView) view.findViewById(R.id.settingview_tv_text); 46 mIcon = (ImageView) view.findViewById(R.id.settingview_iv_islock); 47 } 48 2.3.将获取的属性的值设置给textview展示 49 public SettingView(Context context, AttributeSet attrs, int defStyle) { 50 super(context, attrs, defStyle); 51 52 ......... 53 54 //2.将获取的属性的值设置给textview展示了 55 mText.setText(title); 56 }

创建一个隐藏显示图片的属性

11.创建自定义的属性 2 res -> values -> attrs.xml 3 4 <resources> 5 <declare-styleable name="SettingView"> 6 <!-- 设置文本的属性 --> 7 <attr name="title" format="string" /> <!-- name : 属性的名称 format:属性的值的类型 --> 8 <!-- 隐藏显示图片的属性 --> 9 <attr name="istoggle" format="boolean" /> 10 </declare-styleable> 11 </resources> 122.布局文件中使用 13 2.1.命名空间 14 xmlns:itcast="http://schemas.android.com/apk/res/cn.itcast.mobliesafe05" 15 2.2.控件中使用 16 <cn.itcast.mobliesafe05.view.SettingView 17 ...... 18 itcast:istoggle="true" 19 ></cn.itcast.mobliesafe05.view.SettingView> 203.在自定义控件中获取属性的值,根据属性的值设置图片隐藏显示 21 22 SettingView.java 23 24 public SettingView(Context context, AttributeSet attrs, int defStyle) { 25 super(context, attrs, defStyle); 26 27 ....... 28 29 //获取隐藏显示图片属性的值,根据属性的值设置图片的隐藏显示 30 //参数3:默认的值,表示没有获取到属性的值的时候,使用什么样的值 31 boolean b = attrs.getAttributeBooleanValue(NAMESPACE, "istoggle", true); 32 //根据获取的值,设置图片显示隐藏 33 mIcon.setVisibility(b ? View.VISIBLE : View.GONE);//设置控件的隐藏显示 34 }

开启关闭开关

11.在SettingActivity中设置条目的点击事件 2 @Override 3 public void onClick(View v) { 4 switch (v.getId()) { 5 case R.id.setting_sv_update: 6 7 //按钮是开启 -> 关闭 关闭 -> 开启 8 9 break; 10 11 default: 12 break; 13 } 14 } 152.因为在Activity中点击条目,更改的时候自定义控件中的图片的值,所以需要在自定义控件中创建方法,方便activity调用 16 /** 17 * 提供给activity调用的方法,通过activity传递过来的值,设置开启还是关闭操作 18 * 2016-9-27 下午2:58:45 19 */ 20 public void setToggleOn(boolean isToggle){ 21 //保存开关的状态 22 mIsToggle = isToggle; 23 if (isToggle) { 24 mIcon.setImageResource(R.drawable.on); 25 }else{ 26 mIcon.setImageResource(R.drawable.off); 27 } 28 } 29 30 /** 31 * 提供给activity调用的,返回给activity的开关的状态 32 * 2016-9-27 下午3:01:41 33 */ 34 public boolean isToggle(){ 35 return mIsToggle; 36 } 373.在Activity的点击事件中调用自定义控件中创建的方法使用 38 @Override 39 public void onClick(View v) { 40 switch (v.getId()) { 41 case R.id.setting_sv_update: 42 43 //开启 -> 关闭 关闭 -> 开启 44 //问题:需要知道开关是开启还是关闭 45 if (mUpdate.isToggle()) { 46 mUpdate.setToggleOn(false); 47 }else{ 48 mUpdate.setToggleOn(true); 49 } 50 51 break; 52 53 default: 54 break; 55 } 56 }

开启关闭优化操作

11.在SettingView自定义控件中创建优化的方法 2 /** 3 * 封装了开启 ->关闭 关闭 -> 开启的操作 4 * 2016-9-27 下午3:08:41 5 */ 6 public void toggle(){ 7 //第一步优化 8 /*if (isToggle()) { 9 setToggleOn(false); 10 }else{ 11 setToggleOn(true); 12 }*/ 13 //第二步优化 14 /*if (mIsToggle) { 15 setToggleOn(!mIsToggle); 16 }else{ 17 setToggleOn(!mIsToggle); 18 }*/ 19 //第三步优化 20 setToggleOn(!mIsToggle); 21 } 222.在Activity中点击事件中实现调用优化方法 23 @Override 24 public void onClick(View v) { 25 switch (v.getId()) { 26 case R.id.setting_sv_update: 27 28 //按钮是开启 -> 关闭 关闭 -> 开启 29 mUpdate.toggle(); 30 31 break; 32 33 default: 34 break; 35 } 36 }

回显开关状态

1点击条目开启/关闭按钮的时候,保存按钮的开关状态,当再次进入的时候,获取保存的状态,根据保存的状态设置按钮的开启和关闭 2 3具体步骤: 4 1.创建SharedPreferences工具类,设置保存和获取数据的操作 5 public class SharedPreferencesUtils { 6 7 private static SharedPreferences sp; 8 9 /** 10 * 保存boolean信息的操作 11 * 2016-9-27 下午3:18:45 12 */ 13 public static void saveBoolean(Context context,String key,boolean value){ 14 //name : 保存信息的文件的名称 15 if (sp==null) { 16 sp = context.getSharedPreferences("config", Context.MODE_PRIVATE); 17 } 18 //保存数据 19 //key : 保存信息的名称 20 //value : 保存的信息 21 sp.edit().putBoolean(key, value).commit(); 22 } 23 /** 24 * 获取boolean信息的操作 25 * 2016-9-27 下午3:22:06 26 */ 27 public static boolean getBoolean(Context context,String key,boolean defValue){ 28 if (sp==null) { 29 sp = context.getSharedPreferences("config", Context.MODE_PRIVATE); 30 } 31 //key : 保存信息的名称 32 //defValue : 默认的值 33 return sp.getBoolean(key, defValue); 34 } 35 } 36 2.在activity的点击事件中保存开关状态 37 @Override 38 public void onClick(View v) { 39 switch (v.getId()) { 40 case R.id.setting_sv_update: 41 42 //按钮是开启 -> 关闭 关闭 -> 开启 43 mUpdate.toggle(); 44 //保存开关状态,方便回显操作 45 SharedPreferencesUtils.saveBoolean(this, "isUpdate", mUpdate.isToggle()); 46 47 break; 48 49 default: 50 break; 51 } 52 } 53 3.在再次进入activity进行回显操作 54 55 private void initView() { 56 mUpdate = (SettingView) findViewById(R.id.setting_sv_update); 57 58 //设置自动更新的点击事件 59 mUpdate.setOnClickListener(this); 60 61 //再次进入界面回显设置自动更新的开关操作 62 setUpdate(); 63 } 64 65 /** 66 * 回显设置自动更新开关状态 67 * 2016-9-27 下午3:25:21 68 */ 69 private void setUpdate() { 70 boolean b = SharedPreferencesUtils.getBoolean(this, "isUpdate", true); 71 //根据保存的状态,设置开关状态 72 mUpdate.setToggleOn(b); 73 }

SharedPreferences的key的优化操作

11.创建公共接口 2 public interface Constants { 3 4 /**设置自动更新的key**/ 5 public static final String ISUPDATE="isUpdate"; 6 7 } 82.在代码中使用 9 boolean b = SharedPreferencesUtils.getBoolean(this, Constants.ISUPDATE, true);

根据保存的开关状态控制是否显示更新对话框

1 cn.itcast.mobliesafe05.SplashActivity.java 2 3 private void initView() { 4 mVersion = (TextView) findViewById(R.id.splash_tv_version); 5 6 .... 7 8 new Handler().postDelayed(new Runnable() { 9 10 @Override 11 public void run() { 12 13 //获取保存的设置中心设置自动更新按钮的开关状态,如果是true:更新操作,如果是false:不再更新,跳转首页 14 boolean b = SharedPreferencesUtils.getBoolean(getApplicationContext(), Constants.ISUPDATE, true); 15 if (b) { 16 update(); 17 }else{ 18 //跳转到首页 19 enterHome(); 20 } 21 22 } 23 }, 2000);//延迟多久给handler发送消息 24 25 26 27 }

设置显示设置密码对话框 (重点)

1HomeActivity.java 2 31.设置gridview条目的点击事件 4 private void initView() { 5 .... 6 7 //设置gridview的条目点击事件 8 mGridView.setOnItemClickListener(this); 9 } 10 11 /**gridview条目点击事件**/ 12 //view : 被点击条目的view对象 13 //position : 被点击的条目的索引 14 //id : 被点击的条目的id 15 @Override 16 public void onItemClick(AdapterView<?> parent, View view, int position, 17 long id) { 18 switch (position) { 19 case 0: 20 //手机防盗 21 //弹出设置密码/输入密码对话框 22 showSetPassWordDialog(); 23 break; 24 } 25 } 262.创建设置密码对话框的布局 27 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 28 android:layout_width="match_parent" 29 android:layout_height="match_parent" 30 android:orientation="vertical" > 31 <!-- drawableLeft : 在文本的左边设置图片 32 drawablePadding : 设置图片和文本的距离 33 --> 34 <TextView 35 android:layout_width="match_parent" 36 android:layout_height="wrap_content" 37 android:text="初始化密码设置" 38 android:textColor="#000000" 39 android:textSize="18sp" 40 android:drawableLeft="@drawable/dialog_title_default_icon" 41 android:padding="8dp" 42 android:drawablePadding="8dp" 43 android:gravity="center_vertical" 44 android:background="@drawable/dialog_title_background" 45 /> 46 <!-- inputType : 设置输入的类型 --> 47 <EditText 48 android:id="@+id/dialog_et_psw" 49 android:layout_width="match_parent" 50 android:layout_height="wrap_content" 51 android:hint="请输入密码" 52 android:inputType="textPassword" 53 android:layout_margin="8dp" 54 /> 55 56 <EditText 57 android:id="@+id/dialog_et_confirm" 58 android:layout_width="match_parent" 59 android:layout_height="wrap_content" 60 android:hint="请再次输入密码" 61 android:inputType="textPassword" 62 android:layout_marginLeft="8dp" 63 android:layout_marginRight="8dp" 64 /> 65 66 <LinearLayout 67 android:layout_width="match_parent" 68 android:layout_height="wrap_content" 69 android:orientation="horizontal" 70 android:padding="8dp" 71 > 72 <Button 73 android:id="@+id/dialog_btn_ok" 74 android:layout_width="0dp" 75 android:layout_weight="1" 76 android:layout_height="wrap_content" 77 android:text="确定" 78 android:layout_marginRight="4dp" 79 android:background="@drawable/selector_home_dialog_ok" 80 android:textColor="#FFFFFF" 81 /> 82 83 <Button 84 android:id="@+id/dialog_btn_cancel" 85 android:layout_width="0dp" 86 android:layout_weight="1" 87 android:layout_height="wrap_content" 88 android:text="取消" 89 android:layout_marginLeft="4dp" 90 android:background="@drawable/selector_home_dialog_cancel" 91 /> 92 93 </LinearLayout> 94 </LinearLayout> 953.设置显示对话框 96 private void showSetPassWordDialog() { 97 AlertDialog.Builder builder = new Builder(this); 98 //将布局文件转化为view对象 99 View view = View.inflate(this, R.layout.home_setpassword_dialog, null); 100 //将一个布局文件的view对象设置给dialog,通过dialog显示 101 builder.setView(view); 102 builder.show(); 103 }

设置密码对话框的操作

1private void showSetPassWordDialog() { 2 AlertDialog.Builder builder = new Builder(this); 3 //将布局文件转化为view对象 4 View view = View.inflate(this, R.layout.home_setpassword_dialog, null); 5 6 //初始化控件,设置操作 7 final EditText mPsw = (EditText) view.findViewById(R.id.dialog_et_psw); 8 final EditText mConfirm = (EditText) view.findViewById(R.id.dialog_et_confirm); 9 Button mOk = (Button) view.findViewById(R.id.dialog_btn_ok); 10 Button mCancel = (Button) view.findViewById(R.id.dialog_btn_cancel); 11 12 //设置确定和取消按钮的点击事件 13 mOk.setOnClickListener(new OnClickListener() { 14 15 @Override 16 public void onClick(View v) { 17 //1.获取输入的密码 18 String psw = mPsw.getText().toString().trim(); 19 //判断密码是否为空 20 if (TextUtils.isEmpty(psw)) {// null "" 21 Toast.makeText(getApplicationContext(), "密码不能为空", 0).show(); 22 //不能执行其他操作 23 return; 24 } 25 //2.获取再次输入密码 26 String confirm = mConfirm.getText().toString().trim(); 27 //判断两次输入密码是否一致 28 if (psw.equals(confirm)) { 29 Toast.makeText(getApplicationContext(), "密码设置成功", 0).show(); 30 //隐藏对话框 31 dialog.dismiss(); 32 }else{ 33 Toast.makeText(getApplicationContext(), "两次密码不一致", 0).show(); 34 } 35 } 36 }); 37 mCancel.setOnClickListener(new OnClickListener() { 38 39 @Override 40 public void onClick(View v) { 41 //隐藏对话框 42 dialog.dismiss(); 43 } 44 }); 45 46 //将一个布局文件的view对象设置给dialog,通过dialog显示 47 builder.setView(view); 48 //builder.show(); 49 dialog = builder.create(); 50 dialog.show(); 51}

判断弹出设置密码对话框还是输入密码对话框

11.修改SharedPreferencesUtils工具类,增加保存String类型数据的操作 2 /** 3 * 保存String信息的操作 4 * 2016-9-27 下午3:18:45 5 */ 6 public static void saveString(Context context,String key,String value){ 7 //name : 保存信息的文件的名称 8 if (sp==null) { 9 sp = context.getSharedPreferences("config", Context.MODE_PRIVATE); 10 } 11 //保存数据 12 //key : 保存信息的名称 13 //value : 保存的信息 14 sp.edit().putString(key, value).commit(); 15 } 16 /** 17 * 获取String信息的操作 18 * 2016-9-27 下午3:22:06 19 */ 20 public static String getString(Context context,String key,String defValue){ 21 if (sp==null) { 22 sp = context.getSharedPreferences("config", Context.MODE_PRIVATE); 23 } 24 //key : 保存信息的名称 25 //defValue : 默认的值 26 return sp.getString(key, defValue); 27 } 282.在HomeActivity的设置密码对话框中,密码设置成功,保存设置的密码 29 private void showSetPassWordDialog() { 30 31 ..... 32 33 //设置确定和取消按钮的点击事件 34 mOk.setOnClickListener(new OnClickListener() { 35 36 @Override 37 public void onClick(View v) { 38 39 ...... 40 41 //判断两次输入密码是否一致 42 if (psw.equals(confirm)) { 43 44 ....... 45 46 //保存的设置的密码 47 SharedPreferencesUtils.saveString(getApplicationContext(), Constants.SJFDPSW, psw); 48 }else{ 49 Toast.makeText(getApplicationContext(), "两次密码不一致", 0).show(); 50 } 51 } 52 }); 53 54 ..... 55 } 563.在Gridview条目点击事件中,增加判断操作 57 @Override 58 public void onItemClick(AdapterView<?> parent, View view, int position, 59 long id) { 60 switch (position) { 61 case 0: 62 //手机防盗 63 //弹出设置密码/输入密码对话框 64 //判断是弹出设置密码对话框还是弹出输入密码对话框 65 //可以在设置密码成功的是将密码保存,获取保存的密码来判断是弹出设置密码还是输入密码对话框 66 String sp_psw = SharedPreferencesUtils.getString(getApplicationContext(), Constants.SJFDPSW, ""); 67 if (TextUtils.isEmpty(sp_psw)) { 68 //弹出设置密码对话框 69 showSetPassWordDialog(); 70 }else{ 71 //弹出输入密码对话框 72 Toast.makeText(getApplicationContext(), "弹出输入密码对话框", 0).show(); 73 } 74 75 break; 76 } 77 }

输入密码对话框操作

1参考设置密码对话框 2 3/** 4 * 显示输入密码对话框 5 * 2016-9-27 下午4:59:58 6 */ 7private void showEnterPassWordDialog() { 8 AlertDialog.Builder builder = new Builder(this); 9 //将布局文件转化为view对象 10 View view = View.inflate(this, R.layout.home_enterpassword_dialog, null); 11 12 //初始化控件,设置操作 13 final EditText mPsw = (EditText) view.findViewById(R.id.dialog_et_psw); 14 Button mOk = (Button) view.findViewById(R.id.dialog_btn_ok); 15 Button mCancel = (Button) view.findViewById(R.id.dialog_btn_cancel); 16 17 mOk.setOnClickListener(new OnClickListener() { 18 19 @Override 20 public void onClick(View v) { 21 //1.获取输入的密码 22 String psw = mPsw.getText().toString().trim(); 23 if (TextUtils.isEmpty(psw)) { 24 Toast.makeText(getApplicationContext(), "密码不能为空", 0).show(); 25 return; 26 } 27 //2.判断密码输入是否正确了 28 //判断输入的跟保存的是否一致 29 String sp_psw = SharedPreferencesUtils.getString(getApplicationContext(), Constants.SJFDPSW, ""); 30 //判断密码是否正确了 31 if (psw.equals(sp_psw)) { 32 Toast.makeText(getApplicationContext(), "密码正确", 0).show(); 33 dialog.dismiss(); 34 }else{ 35 Toast.makeText(getApplicationContext(), "密码错误", 0).show(); 36 } 37 } 38 }); 39 40 mCancel.setOnClickListener(new OnClickListener() { 41 42 @Override 43 public void onClick(View v) { 44 dialog.dismiss(); 45 } 46 }); 47 48 //将一个布局文件的view对象设置给dialog,通过dialog显示 49 builder.setView(view); 50 //builder.show(); 51 dialog = builder.create(); 52 dialog.show(); 53}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )