【0124】【项目实战】-【组件化封装思想实战Android App】-【7】 首页MineFragment开发与测试
1.功能演示



2. 播放设置开发
2.1 播放设置流程

2.2 setting的布局及初始化


【布局源码】
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 android:layout_width="match_parent" 3 android:layout_height="match_parent" 4 android:background="@color/color_e3e3e3" 5 android:orientation="vertical" 6 > 7 8 <RelativeLayout 9 android:layout_width="match_parent" 10 android:layout_height="48dp" 11 > 12 <ImageView 13 android:id="@+id/back_view" 14 android:layout_width="25dp" 15 android:layout_height="25dp" 16 android:layout_centerVertical="true" 17 android:layout_marginLeft="10dp" 18 android:background="@drawable/comment_back_normal" 19 /> 20 <TextView 21 android:layout_width="wrap_content" 22 android:layout_height="wrap_content" 23 android:layout_centerInParent="true" 24 android:text="@string/video_play_setting" 25 android:textColor="@color/color_333333" 26 android:textSize="22sp" 27 /> 28 </RelativeLayout> 29 30 <TextView 31 android:layout_width="wrap_content" 32 android:layout_height="wrap_content" 33 android:layout_marginBottom="10dp" 34 android:layout_marginLeft="7dp" 35 android:layout_marginTop="10dp" 36 android:text="@string/video_setting" 37 android:textColor="@color/color_666666" 38 android:textSize="16sp" 39 /> 40 <RelativeLayout 41 android:id="@+id/alway_layout" 42 android:layout_width="match_parent" 43 android:layout_height="wrap_content" 44 > 45 <TextView 46 android:id="@+id/alway_view" 47 android:layout_width="match_parent" 48 android:layout_height="wrap_content" 49 android:background="@color/white" 50 android:paddingBottom="15dp" 51 android:paddingLeft="7dp" 52 android:paddingTop="15dp" 53 android:text="@string/auto_player_always" 54 android:textColor="@color/color_333333" 55 android:textSize="18sp" 56 /> 57 58 <CheckBox 59 android:id="@+id/alway_check_box" 60 android:layout_width="wrap_content" 61 android:layout_height="wrap_content" 62 android:layout_alignParentRight="true" 63 android:layout_centerVertical="true" 64 android:layout_marginRight="10dp" 65 android:button="@null" 66 android:checked="false" 67 android:clickable="false" 68 /> 69 </RelativeLayout> 70 <View 71 android:layout_width="match_parent" 72 android:layout_height="0.5dp" 73 android:background="@color/color_cccccc" 74 /> 75 <RelativeLayout 76 android:id="@+id/wifi_layout" 77 android:layout_width="match_parent" 78 android:layout_height="wrap_content" 79 > 80 <TextView 81 android:id="@+id/wifi_view" 82 android:layout_width="match_parent" 83 android:layout_height="wrap_content" 84 android:background="@color/white" 85 android:paddingBottom="15dp" 86 android:paddingLeft="7dp" 87 android:paddingTop="15dp" 88 android:text="@string/auto_player_only_wifi" 89 android:textColor="@color/color_333333" 90 android:textSize="18sp" 91 /> 92 93 <CheckBox 94 android:id="@+id/wifi_check_box" 95 android:layout_width="wrap_content" 96 android:layout_height="wrap_content" 97 android:layout_alignParentRight="true" 98 android:layout_centerVertical="true" 99 android:layout_marginRight="10dp" 100 android:button="@null" 101 android:checked="false" 102 android:clickable="false" 103 /> 104 </RelativeLayout> 105 <View 106 android:layout_width="match_parent" 107 android:layout_height="0.5dp" 108 android:background="@color/color_cccccc" 109 /> 110 <RelativeLayout 111 android:id="@+id/close_layout" 112 android:layout_width="match_parent" 113 android:layout_height="wrap_content" 114 > 115 <TextView 116 android:id="@+id/close_view" 117 android:layout_width="match_parent" 118 android:layout_height="wrap_content" 119 android:background="@color/white" 120 android:paddingBottom="15dp" 121 android:paddingLeft="7dp" 122 android:paddingTop="15dp" 123 android:text="@string/auto_player_never" 124 android:textColor="@color/color_333333" 125 android:textSize="18sp" 126 /> 127 128 <CheckBox 129 android:id="@+id/close_check_box" 130 android:layout_width="wrap_content" 131 android:layout_height="wrap_content" 132 android:layout_alignParentRight="true" 133 android:layout_centerVertical="true" 134 android:layout_marginRight="10dp" 135 android:button="@null" 136 android:checked="false" 137 android:clickable="false" 138 /> 139 </RelativeLayout> 140 </LinearLayout>


2.3 SP的基本用法

2.4 spManager的封装



3. 视频设置开发

【对比封装】

【通知设置】

【源码】
1 package com.youdu.activity; 2 3 import android.os.Bundle; 4 import android.support.v7.app.AppCompatActivity; 5 import android.view.View; 6 import android.view.View.OnClickListener; 7 import android.widget.CheckBox; 8 import android.widget.ImageView; 9 import android.widget.RelativeLayout; 10 11 import com.youdu.R; 12 import com.youdu.constant.SDKConstant.AutoPlaySetting; 13 import com.youdu.core.AdParameters; 14 import com.youdu.db.SPManager; 15 16 public class SettingActivity extends AppCompatActivity implements OnClickListener { 17 18 /** 19 * UI 20 */ 21 private RelativeLayout mWifiLayout; 22 private RelativeLayout mAlwayLayout; 23 private RelativeLayout mNeverLayout; 24 private CheckBox mWifiBox, mAlwayBox, mNeverBox; 25 private ImageView mBackView; 26 27 @Override 28 protected void onCreate(Bundle savedInstanceState) { 29 super.onCreate(savedInstanceState); 30 setContentView(R.layout.activity_setting_layout); 31 32 initView(); 33 } 34 35 private void initView() { 36 mBackView = (ImageView) findViewById(R.id.back_view); 37 mWifiLayout = (RelativeLayout) findViewById(R.id.wifi_layout); 38 mWifiBox = (CheckBox) findViewById(R.id.wifi_check_box); 39 mAlwayLayout = (RelativeLayout) findViewById(R.id.alway_layout); 40 mAlwayBox = (CheckBox) findViewById(R.id.alway_check_box); 41 mNeverLayout = (RelativeLayout) findViewById(R.id.close_layout); 42 mNeverBox = (CheckBox) findViewById(R.id.close_check_box); 43 44 mBackView.setOnClickListener(this); 45 mWifiLayout.setOnClickListener(this); 46 mAlwayLayout.setOnClickListener(this); 47 mNeverLayout.setOnClickListener(this); 48 49 int currentSetting = SPManager.getInstance().getInt(SPManager.VIDEO_PLAY_SETTING, 1); 50 switch (currentSetting) { 51 case 0: 52 mAlwayBox.setBackgroundResource(R.drawable.setting_selected); 53 mWifiBox.setBackgroundResource(0); 54 mNeverBox.setBackgroundResource(0); 55 break; 56 case 1: 57 mAlwayBox.setBackgroundResource(0); 58 mWifiBox.setBackgroundResource(R.drawable.setting_selected); 59 mNeverBox.setBackgroundResource(0); 60 break; 61 case 2: 62 mAlwayBox.setBackgroundResource(0); 63 mWifiBox.setBackgroundResource(0); 64 mNeverBox.setBackgroundResource(R.drawable.setting_selected); 65 break; 66 } 67 } 68 69 @Override 70 public void onClick(View v) { 71 72 switch (v.getId()) { 73 case R.id.alway_layout: 74 SPManager.getInstance().putInt(SPManager.VIDEO_PLAY_SETTING, 0); 75 AdParameters.setCurrentSetting(AutoPlaySetting.AUTO_PLAY_3G_4G_WIFI); 76 mAlwayBox.setBackgroundResource(R.drawable.setting_selected); 77 mWifiBox.setBackgroundResource(0); 78 mNeverBox.setBackgroundResource(0); 79 break; 80 case R.id.close_layout: 81 SPManager.getInstance().putInt(SPManager.VIDEO_PLAY_SETTING, 2); 82 AdParameters.setCurrentSetting(AutoPlaySetting.AUTO_PLAY_NEVER); 83 mAlwayBox.setBackgroundResource(0); 84 mWifiBox.setBackgroundResource(0); 85 mNeverBox.setBackgroundResource(R.drawable.setting_selected); 86 break; 87 case R.id.wifi_layout: 88 SPManager.getInstance().putInt(SPManager.VIDEO_PLAY_SETTING, 1); 89 AdParameters.setCurrentSetting(AutoPlaySetting.AUTO_PLAY_ONLY_WIFI); 90 mAlwayBox.setBackgroundResource(0); 91 mWifiBox.setBackgroundResource(R.drawable.setting_selected); 92 mNeverBox.setBackgroundResource(0); 93 break; 94 case R.id.back_view: 95 finish(); 96 break; 97 98 } 99 } 100 }
【点击跳转】

4.版本更新模块
4.1 下载更新组件的调用





【点击更新选项】

【效果】

4.2版本更新的串讲
【说明】本章只是调用已经封转好的下载更新的组件;具体的下载更新组件的内容查看该作者的更新组件的课程;







5.用户信息管理
5.1 登录及用户信息开发流程

5.2 用户信息管理开发-发送登录请求、信息的获取和保存
【布局】

【布局源码】
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 android:layout_width="match_parent" 3 android:layout_height="match_parent" 4 android:background="@color/white"> 5 6 <ScrollView 7 android:id="@+id/login_scroll" 8 android:layout_width="match_parent" 9 android:layout_height="wrap_content"> 10 11 <RelativeLayout 12 android:layout_width="match_parent" 13 android:layout_height="wrap_content"> 14 15 <ImageView 16 android:id="@+id/iv_login_logo" 17 android:layout_width="80dp" 18 android:layout_height="80dp" 19 android:layout_centerHorizontal="true" 20 android:layout_marginTop="60dp" 21 android:background="@drawable/icon_login" 22 android:paddingLeft="43dp" 23 android:paddingRight="47dp" 24 android:paddingTop="70dp"/> 25 26 <RelativeLayout 27 android:id="@+id/rl_login_input" 28 android:layout_width="match_parent" 29 android:layout_height="wrap_content" 30 android:layout_below="@+id/iv_login_logo" 31 android:paddingLeft="25dp" 32 android:paddingRight="25dp"> 33 34 <com.youdu.view.associatemail.MailBoxAssociateView 35 android:id="@+id/associate_email_input" 36 android:layout_width="match_parent" 37 android:layout_height="wrap_content" 38 android:layout_marginTop="57dp" 39 android:hint="@string/account" 40 android:paddingBottom="12dp" 41 android:paddingLeft="5dp" 42 android:popupBackground="@drawable/bg_recommend_mail_list" 43 android:singleLine="true" 44 android:textColor="@color/color_333333" 45 android:textColorHint="@color/color_bfbfbf" 46 android:textSize="16sp"/> 47 48 <EditText 49 android:id="@+id/login_input_password" 50 android:layout_width="match_parent" 51 android:layout_height="wrap_content" 52 android:layout_below="@+id/associate_email_input" 53 android:layout_marginTop="22dp" 54 android:hint="@string/password" 55 android:inputType="textPassword" 56 android:paddingBottom="12dp" 57 android:paddingLeft="5dp" 58 android:singleLine="true" 59 android:textColor="@color/color_333333" 60 android:textColorHint="@color/color_bfbfbf" 61 android:textSize="16sp"/> 62 </RelativeLayout> 63 64 <TextView 65 android:id="@+id/login_button" 66 android:layout_width="match_parent" 67 android:layout_height="35dp" 68 android:layout_below="@id/rl_login_input" 69 android:layout_marginLeft="25dp" 70 android:layout_marginRight="25dp" 71 android:layout_marginTop="50dp" 72 android:background="@color/color_fed952" 73 android:gravity="center" 74 android:text="@string/login"/> 75 </RelativeLayout> 76 </ScrollView> 77 </RelativeLayout>

【登录的框架】

【网络请求】

【用户信息管理类】
1 package com.youdu.manager; 2 3 4 import com.youdu.module.user.User; 5 6 /** 7 * @description 单例管理登陆用户信息 8 */ 9 public class UserManager { 10 11 private static UserManager userManager = null; 12 private User user = null; 13 14 public static UserManager getInstance() { 15 16 if (userManager == null) { 17 18 synchronized (UserManager.class) { 19 20 if (userManager == null) { 21 22 userManager = new UserManager(); 23 } 24 return userManager; 25 } 26 } else { 27 28 return userManager; 29 } 30 } 31 32 /** 33 * init the user 34 * 35 * @param user 36 */ 37 public void setUser(User user) { 38 39 this.user = user; 40 } 41 42 public boolean hasLogined() { 43 44 return user == null ? false : true; 45 } 46 47 /** 48 * has user info 49 * 50 * @return 51 */ 52 public User getUser() { 53 54 return this.user; 55 } 56 57 /** 58 * remove the user info 59 */ 60 public void removeUser() { 61 62 this.user = null; 63 } 64 }
【完善-保存信息】

5.3 LocalBroadCastReceiver(局部广播接收者的)的使用

【发送广播】


【接收广播】

【注册广播接收器】


【销毁广播接收器】


6. 二维码的显示
【源码】q0pwzp\Client_Code\app\src\main\java\com\youdu\view\MyQrCodeDialog.java
1 package com.youdu.view; 2 3 import android.app.Dialog; 4 import android.content.Context; 5 import android.os.Bundle; 6 import android.view.View; 7 import android.widget.ImageView; 8 import android.widget.TextView; 9 10 import com.youdu.R; 11 import com.youdu.manager.UserManager; 12 import com.youdu.util.Util; 13 import com.youdu.adutil.Utils; 14 15 /** 16 * 二维码的生成 17 */ 18 public class MyQrCodeDialog extends Dialog { 19 20 private Context mContext; 21 22 /** 23 * UI 24 */ 25 private ImageView mQrCodeView; 26 private TextView mTickView; 27 private TextView mCloseView; 28 29 public MyQrCodeDialog(Context context) { 30 super(context, 0); 31 mContext = context; 32 } 33 34 @Override 35 protected void onCreate(Bundle savedInstanceState) { 36 super.onCreate(savedInstanceState); 37 setContentView(R.layout.dialog_mycode_layout); 38 initView(); 39 } 40 41 private void initView() { 42 43 mQrCodeView = (ImageView) findViewById(R.id.qrcode_view); 44 mTickView = (TextView) findViewById(R.id.tick_view); 45 mCloseView = (TextView) findViewById(R.id.close_view); 46 mCloseView.setOnClickListener(new View.OnClickListener() { 47 @Override 48 public void onClick(View v) { 49 dismiss(); 50 } 51 }); 52 53 String name = UserManager.getInstance().getUser().data.name; 54 //【核心】通过zxing的二维码生成功能生成二维码 55 mQrCodeView.setImageBitmap(Util.createQRCode( 56 Utils.dip2px(mContext, 200), 57 Utils.dip2px(mContext, 200), 58 name)); 59 mTickView.setText(name + mContext.getString(R.string.personal_info)); 60 } 61 }



浙公网安备 33010602011771号