因爲此界面只是主界面中的一部分,因此無需建立一個新的 Activity ,只須要在 layout 目錄下新建一個佈局便可,同理導入圖片至 drawable 目錄下java
具體代碼以下:android
<?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:background="@android:color/white" android:orientation="vertical"> <LinearLayout android:id="@+id/ll_head" android:layout_width="fill_parent" android:layout_height="240dp" android:background="@drawable/myinfo_login_bg" android:orientation="vertical"> <ImageView android:id="@+id/iv_head_icon" android:layout_width="70dp" android:layout_height="70dp" android:layout_gravity="center_horizontal" android:layout_marginTop="75dp" android:src="@drawable/default_icon" /> <TextView android:id="@+id/tv_user_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="10dp" android:text="點擊登陸" android:textColor="@android:color/white" android:textSize="16sp" /> </LinearLayout> <View android:layout_width="fill_parent" android:layout_height="1dp" android:layout_marginTop="20dp" android:background="#E3E3E3" /><!--分割線效果--> <RelativeLayout android:id="@+id/rl_course_history" android:layout_width="fill_parent" android:layout_height="50dp" android:background="#F7F8F8" android:gravity="center_vertical" android:paddingLeft="10dp" android:paddingRight="10dp"> <ImageView android:id="@+id/iv_course_historyicon" android:layout_width="20dp" android:layout_height="20dp" android:layout_centerVertical="true" android:layout_marginLeft="25dp" android:src="@drawable/course_history_icon" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="25dp" android:layout_toRightOf="@id/iv_course_historyicon" android:text="播放記錄" android:textColor="#A3A3A3" android:textSize="16sp" /> <ImageView android:layout_width="15dp" android:layout_height="15dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="25dp" android:src="@drawable/iv_right_arrow" /> </RelativeLayout> <View android:layout_width="fill_parent" android:layout_height="1dp" android:background="#E3E3E3" /> <RelativeLayout android:id="@+id/rl_setting" android:layout_width="fill_parent" android:layout_height="50dp" android:background="#F7F8F8" android:gravity="center_vertical" android:paddingLeft="10dp" android:paddingRight="10dp"> <ImageView android:id="@+id/iv_userinfo_icon" android:layout_width="20dp" android:layout_height="20dp" android:layout_centerVertical="true" android:layout_marginLeft="25dp" android:src="@drawable/myinfo_setting_icon" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="25dp" android:layout_toRightOf="@id/iv_userinfo_icon" android:text="設置" android:textColor="#A3A3A3" android:textSize="16sp" /> <ImageView android:layout_width="15dp" android:layout_height="15dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="25dp" android:src="@drawable/iv_right_arrow" /> </RelativeLayout> <View android:layout_width="fill_parent" android:layout_height="1dp" android:background="#E3E3E3" /> </LinearLayout>
因爲本項目在保存和獲取數據時會屢次用到用戶名,所以建立一個工具類 AnalysisUtils 用於獲取用戶名,以便後續調用app
具體代碼以下:ide
package cn.edu.lt.android.boxueguapp.utils; import android.content.Context; import android.content.SharedPreferences; /** * Created by lt on 2018/1/2. */ public class AnalysisUtils { /** * 從SharedPreferences中讀取登陸用戶名 * @param context * @return */ public static String readLoginUserName(Context context){ SharedPreferences sp=context.getSharedPreferences("loginInfo", Context.MODE_PRIVATE); String userName=sp.getString("loginUserName", ""); return userName; } }
在此界面中須要判斷用戶是否登陸,若已登陸則顯示用戶名,若未登陸則顯示「點擊登陸」,若用戶已登陸,當點擊用戶頭像時跳轉到我的資料界面,點擊播放記錄跳轉到播放記錄界面,點擊設置時跳轉到設置界面。首先須要新建一個包 view ,在其下新建一個類 MyInfoView ,工具
package cn.edu.lt.android.boxueguapp.view; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import cn.edu.lt.android.boxueguapp.R; import cn.edu.lt.android.boxueguapp.activity.LoginActivity; import cn.edu.lt.android.boxueguapp.utils.AnalysisUtils; /** * Created by lt on 2018/1/2. */ public class MyInfoView { private Context mContext; private final LayoutInflater mInflater; private View mCurrentView; private LinearLayout ll_head; private ImageView iv_head_icon; private RelativeLayout rl_course_history; private RelativeLayout rl_setting; private TextView tv_user_name; /** * 因爲SharedPreferences是經過context讀取的,因此從構造方法中傳遞一個context * @param mContext */ public MyInfoView(Context mContext){ this.mContext = mContext; mInflater = LayoutInflater.from(mContext); } /** * 獲取當前在導航欄上方顯示對應的View */ public View getView(){ if (mCurrentView == null) { createView();//調用initView() } return mCurrentView; } private void createView() { initView(); } /** * 獲取控件填充佈局 * inflater佈局填充器 */ private void initView() { mCurrentView = mInflater.inflate(R.layout.main_view_myinfo, null); ll_head = (LinearLayout) mCurrentView.findViewById(R.id.ll_head); iv_head_icon = (ImageView) mCurrentView.findViewById(R.id.iv_head_icon); rl_course_history = (RelativeLayout) mCurrentView.findViewById(R.id.rl_course_history); rl_setting = (RelativeLayout) mCurrentView.findViewById(R.id.rl_setting); tv_user_name = (TextView) mCurrentView.findViewById(R.id.tv_user_name); //用戶名須要根據不一樣的登陸狀態進行不一樣的展現 setLoginParams(readLoginStatus());//拿到登陸狀態做爲參數傳遞進去 //處理控件交互 ll_head.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //判斷是否已經登陸 if(readLoginStatus()){ //已登陸跳轉到我的資料界面 }else{ //未登陸跳轉到登陸界面 Intent intent=new Intent(mContext,LoginActivity.class); ((Activity)mContext).startActivityForResult(intent,1); } } }); rl_course_history.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(readLoginStatus()){ //跳轉到播放記錄界面 }else{ Toast.makeText(mContext, "您還未登陸,請先登陸", Toast.LENGTH_SHORT).show(); } } }); rl_setting.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(readLoginStatus()){ //跳轉到設置界面 }else{ Toast.makeText(mContext, "您還未登陸,請先登陸", Toast.LENGTH_SHORT).show(); } } }); } /** * 登陸成功後設置個人界面 */ public void setLoginParams(boolean isLogin) { if(isLogin){ tv_user_name.setText(AnalysisUtils.readLoginUserName(mContext)); }else{ tv_user_name.setText("點擊登陸"); } } /** * 從SharedPreferences中讀取登陸狀態 * @return */ private boolean readLoginStatus(){ SharedPreferences sp=mContext.getSharedPreferences("loginInfo", Context.MODE_PRIVATE); boolean isLogin=sp.getBoolean("isLogin", false); return isLogin; } /** * 顯示當前導航欄上方所對應的view界面 */ public void showView() { if (mCurrentView == null){ createView(); } mCurrentView.setVisibility(View.VISIBLE); } }
而後須要在 MainActivity 傳遞登陸成功的信息,覆寫一個 onActivityResult 方法佈局
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (data != null){ //從設置界面或登陸界面傳遞過來的登陸狀態 boolean isLogin = data.getBooleanExtra("isLogin", false); if (isLogin){//登陸成功時顯示課程界面 clearBottomImageState(); selectDisplayView(0); } if (mMyInfoView != null) {//登陸成功或退出登陸時根據isLogin設置個人界面 mMyInfoView.setLoginParams(isLogin); } } }
再修改以前爲了測試效果所修改的 SplashActivity 和 LoginActivity測試
Intent intent = new Intent(SplashActivity.this, LoginActivity.class); 改成 Intent intent = new Intent(SplashActivity.this, MainActivity.class);
Intent data=new Intent(); data.putExtra("isLogin",true); setResult(RESULT_OK,data); LoginActivity.this.finish(); //startActivity(new Intent(LoginActivity.this, MainActivity.class));刪除此行 return;