当前位置: 首页 > news >正文

网络资源模板--Android Studio 零食工坊(商城)

目录

一、项目演示

二、项目测试环境

三、项目详情

四、完整的项目源码 


一、项目演示

网络资源模板--零食工坊

二、项目测试环境

三、项目详情

1. **加载 Fragment 布局**:
   - 使用 `inflater.inflate` 加载 `fragment_snack` 的布局。

2. **视图组件初始化**:
   - 初始化了多个 UI 组件,包括:
     - `TabLayout` (`tabTitle`): 用于显示标签。
     - `RecyclerView` (`rvsnackList`): 用于展示零食列表。
     - 空状态布局 (`llEmpty`): 当列表为空时显示的视图。
     - 查询输入框 (`etQuery`): 供用户输入搜索关键词。
     - 搜索图标 (`ivSearch`): 触发搜索操作的图标。
     - 添加零食的浮动按钮 (`btnAdd`): 用于添加新零食。

3. **设置搜索功能**:
   - 为搜索图标设置点击事件,点击后调用 `loadData()` 方法以加载数据。

4. **键盘操作监听**:
   - 设置查询输入框的编辑动作监听器:
     - 当用户按下特定的键(actionId 为 3)时,隐藏键盘并调用 `loadData()` 方法。

5. **添加零食功能**:
   - 为添加按钮设置点击事件,点击后启动 `AddSnackActivity`,并等待结果(请求码为 100)。

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_snack, container, false);this.tabTitle = (TabLayout) view.findViewById(R.id.tab_title);this.rvsnackList = (RecyclerView) view.findViewById(R.id.rv_snack_list);this.llEmpty = (LinearLayout) view.findViewById(R.id.ll_empty);this.etQuery = (EditText) view.findViewById(R.id.et_query);this.ivSearch = (ImageView) view.findViewById(R.id.iv_search);this.btnAdd = (FloatingActionButton) view.findViewById(R.id.btn_add);initView();this.ivSearch.setOnClickListener(new View.OnClickListener() {/* class com.example.snack.ui.fragment.SnackFragment.AnonymousClass1 */public void onClick(View v) {SnackFragment.this.loadData();}});this.etQuery.setOnEditorActionListener(new TextView.OnEditorActionListener() {/* class com.example.snack.ui.fragment.SnackFragment.AnonymousClass2 */public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {if (actionId != 3) {return false;}KeyBoardUtil.hideKeyboard(v);SnackFragment.this.loadData();return true;}});this.btnAdd.setOnClickListener(new View.OnClickListener() {/* class com.example.snack.ui.fragment.SnackFragment.AnonymousClass3 */public void onClick(View v) {SnackFragment.this.startActivityForResult(new Intent(SnackFragment.this.myActivity, AddSnackActivity.class), 100);}});return view;}

在 `onCreate` 方法中,主要实现了登录界面的初始化及逻辑处理,具体功能如下:

### 主要功能概述

1. **界面设置**:
   - 设置 Activity 的布局为 `activity_login`。

2. **视图组件初始化**:
   - 初始化了多个 UI 组件,包括:
     - 账号输入框 (`etAccount`)
     - 密码输入框 (`etPassword`)
     - 注册文本 (`tvRegister`)
     - 找回密码文本 (`tv_mm`)
     - 登录按钮 (`btnLogin`)
     - 用户类型选择的单选按钮组 (`rgType`)
     - 用户和管理员的单选按钮 (`rbUser` 和 `rbAdmin`)
     - 同意协议的复选框 (`cbAgree`)

3. **自定义 ActionBar**:
   - 初始化 `ActionBar`,设置标题和点击事件,左侧点击事件为结束当前 Activity。

4. **点击事件处理**:
   - 注册点击事件:
     - 注册按钮:启动 `RegisterActivity`。
     - 找回密码按钮:启动 `PasswordActivity`。
     - 用户类型选择的单选按钮:保存选择的用户类型(普通用户或管理员)到 SharedPreferences。

5. **登录逻辑**:
   - 登录按钮的点击事件处理:
     - 隐藏软键盘。
     - 获取输入的账号和密码。
     - 校验输入是否为空,并提供相应提示。
     - 检查用户是否存在,并验证密码是否正确。
     - 根据用户类型(管理员或普通用户)进行进一步验证。
     - 确认用户同意用户协议。
     - 登录成功后,将账号存入 SharedPreferences,启动 `MainActivity` 并显示成功提示。

### 总结
此方法清晰地组织了登录界面的逻辑,包括视图组件的初始化、事件处理和登录验证。整体结构逻辑严谨,能够有效地引导用户完成登录操作。

  @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.activity = this;setContentView(R.layout.activity_login);etAccount = findViewById(R.id.et_account);etPassword = findViewById(R.id.et_password);tvRegister = findViewById(R.id.tv_register);tv_mm = findViewById(R.id.tv_mm);btnLogin = findViewById(R.id.btn_login);rgType = findViewById(R.id.rg_type);rbUser = findViewById(R.id.rb_user);rbAdmin = findViewById(R.id.rb_admin);cbAgree = findViewById(R.id.cb_agree);ActionBar actionBar = findViewById(R.id.myActionBar);mTitleBar = actionBar;actionBar.setData(this.activity, "登录", 0, 0, 0, getResources().getColor(R.color.colorPrimary), new ActionBar.ActionBarClickListener() {@Overridepublic void onLeftClick() {LoginActivity.this.finish();}@Overridepublic void onRightClick() {}});tvRegister.setOnClickListener(v ->LoginActivity.this.startActivity(new Intent(LoginActivity.this.activity, RegisterActivity.class)));tv_mm.setOnClickListener(v ->LoginActivity.this.startActivity(new Intent(LoginActivity.this.activity, PasswordActivity.class)));rgType.setOnCheckedChangeListener((group, checkedId) ->SPUtils.put(LoginActivity.this.activity, SPUtils.IS_ADMIN, checkedId == R.id.rb_admin));btnLogin.setOnClickListener(v -> {((InputMethodManager) v.getContext().getSystemService("input_method")).hideSoftInputFromWindow(v.getWindowToken(), 0);String account = etAccount.getText().toString();String password = etPassword.getText().toString();Boolean isAdmin = (Boolean) SPUtils.get(LoginActivity.this.activity, SPUtils.IS_ADMIN, false);if (account.isEmpty()) {Toast.makeText(LoginActivity.this.activity, "账号不能为空!", Toast.LENGTH_SHORT).show();} else if (password.isEmpty()) {Toast.makeText(LoginActivity.this.activity, "密码为空!", Toast.LENGTH_SHORT).show();} else {User user = DataSupport.where("account = ?", account).findFirst(User.class);if (user == null) {Toast.makeText(LoginActivity.this.activity, "账号不存在", Toast.LENGTH_SHORT).show();} else if (!password.equals(user.getPassword())) {Toast.makeText(LoginActivity.this.activity, "密码错误!", Toast.LENGTH_SHORT).show();} else if (isAdmin && !"admin".equals(user.getAccount())) {Toast.makeText(LoginActivity.this.activity, "该账号不是管理员账号!", Toast.LENGTH_SHORT).show();} else if (!isAdmin && "admin".equals(user.getAccount())) {Toast.makeText(LoginActivity.this.activity, "该账号不是普通用户账号!", Toast.LENGTH_SHORT).show();} else if (!cbAgree.isChecked()) {Toast.makeText(LoginActivity.this.activity, "请同意用户协议!", Toast.LENGTH_SHORT).show();} else {SPUtils.put(LoginActivity.this, SPUtils.ACCOUNT, account);LoginActivity.this.startActivity(new Intent(LoginActivity.this.activity, MainActivity.class));Toast.makeText(LoginActivity.this.activity, "恭喜你,登录成功!", Toast.LENGTH_SHORT).show();LoginActivity.this.finish();}}});}

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#ffffffff"android:orientation="vertical"><ImageViewandroid:layout_width="fill_parent"android:layout_height="100.0dip"android:layout_gravity="center"android:layout_marginTop="0.0dip"android:layout_marginBottom="50.0dip"android:src="@drawable/logo" /><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical"><LinearLayoutandroid:id="@+id/person"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="10.0dip"android:background="@drawable/bg_ripple"android:orientation="horizontal"android:paddingLeft="20.0dip"android:paddingTop="10.0dip"android:paddingRight="20.0dip"android:paddingBottom="10.0dip"><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/main_user_press" /><TextViewandroid:layout_width="0.0dip"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="10.0dip"android:layout_weight="1.0"android:text="个人信息"android:textColor="@color/colorBlack"android:textSize="14.0dip" /><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/ic_right" /></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical"><LinearLayoutandroid:id="@+id/manage"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="10.0dip"android:background="@drawable/bg_ripple"android:orientation="horizontal"android:paddingLeft="20.0dip"android:paddingTop="10.0dip"android:paddingRight="20.0dip"android:paddingBottom="10.0dip"><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/manage" /><TextViewandroid:layout_width="0.0dip"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="10.0dip"android:layout_weight="1.0"android:text="用户管理"android:textColor="@color/colorBlack"android:textSize="14.0dip" /><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/ic_right" /></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical"><LinearLayoutandroid:id="@+id/order"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="10.0dip"android:background="@drawable/bg_ripple"android:orientation="horizontal"android:paddingLeft="20.0dip"android:paddingTop="10.0dip"android:paddingRight="20.0dip"android:paddingBottom="10.0dip"><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/dingdan" /><TextViewandroid:layout_width="0.0dip"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="10.0dip"android:layout_weight="1.0"android:text="我的订单"android:textColor="@color/colorBlack"android:textSize="14.0dip" /><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/ic_right" /></LinearLayout><LinearLayoutandroid:id="@+id/browse"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="10.0dip"android:background="@drawable/bg_ripple"android:orientation="horizontal"android:paddingLeft="20.0dip"android:paddingTop="10.0dip"android:paddingRight="20.0dip"android:paddingBottom="10.0dip"><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/ic_browse" /><TextViewandroid:layout_width="0.0dip"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="10.0dip"android:layout_weight="1.0"android:text="浏览记录"android:textColor="@color/colorBlack"android:textSize="14.0dip" /><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/ic_right" /></LinearLayout><LinearLayoutandroid:id="@+id/security"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="10.0dip"android:background="@drawable/bg_ripple"android:orientation="horizontal"android:paddingLeft="20.0dip"android:paddingTop="10.0dip"android:paddingRight="20.0dip"android:paddingBottom="10.0dip"><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/ic_security" /><TextViewandroid:layout_width="0.0dip"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="10.0dip"android:layout_weight="1.0"android:text="账号安全"android:textColor="@color/colorBlack"android:textSize="14.0dip" /><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/ic_right" /></LinearLayout><LinearLayoutandroid:id="@+id/favorite"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="10.0dip"android:background="@drawable/bg_ripple"android:orientation="horizontal"android:paddingLeft="20.0dip"android:paddingTop="10.0dip"android:paddingRight="20.0dip"android:paddingBottom="10.0dip"><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/kefu" /><TextViewandroid:layout_width="0.0dip"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="10.0dip"android:layout_weight="1.0"android:text="联系客服"android:textColor="@color/colorBlack"android:textSize="14.0dip" /><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/ic_right" /></LinearLayout></LinearLayout><Buttonandroid:id="@+id/logout"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginLeft="20.0dip"android:layout_marginTop="100.0dip"android:layout_marginRight="20.0dip"android:background="@drawable/btn_border_fill"android:text="退出登录"android:textColor="@color/colorWhite"android:textSize="18.0dip" /></LinearLayout></LinearLayout>
</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#ffffffff"android:orientation="vertical"><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:background="@drawable/bg_border_bottom"><com.example.snack.widget.ActionBarandroid:id="@id/myActionBar"android:layout_width="fill_parent"android:layout_height="wrap_content" /></LinearLayout><ImageViewandroid:layout_width="fill_parent"android:layout_height="100.0dip"android:layout_gravity="center"android:layout_marginTop="0.0dip"android:layout_marginBottom="20.0dip"android:src="@drawable/logo" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_marginTop="0.0dip"android:layout_marginBottom="40.0dip"android:text="修改用户信息"android:textColor="#ff000000"android:textSize="30.0dip" /><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical"android:paddingLeft="20.0dip"android:paddingRight="20.0dip"><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:background="@drawable/bg_border_bottom"android:orientation="horizontal"android:paddingTop="15.0dip"android:paddingBottom="15.0dip"><TextViewandroid:layout_width="70.0dip"android:layout_height="30.0dip"android:layout_weight="1.0"android:gravity="start"android:text="账 号:"android:textColor="#ff000000"android:textSize="20.0dip" /><TextViewandroid:id="@+id/account"android:layout_width="248.0dip"android:layout_height="wrap_content"android:gravity="left"android:textSize="16.0dip" /></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:background="@drawable/bg_border_bottom"android:orientation="horizontal"android:paddingTop="15.0dip"android:paddingBottom="15.0dip"><TextViewandroid:layout_width="0.0dip"android:layout_height="30.0dip"android:layout_weight="1.0"android:gravity="start"android:text="昵 称:"android:textColor="#ff000000"android:textSize="20.0dip" /><EditTextandroid:id="@id/nickName"android:layout_width="250.0dip"android:layout_height="wrap_content"android:gravity="left"android:text=""android:textSize="16.0dip" /></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:background="@drawable/bg_border_bottom"android:orientation="horizontal"android:paddingTop="15.0dip"android:paddingBottom="15.0dip"><TextViewandroid:layout_width="70.0dip"android:layout_height="30.0dip"android:layout_weight="1.0"android:gravity="start"android:text="电 话:"android:textColor="#ff000000"android:textSize="20.0dip" /><EditTextandroid:id="@+id/phone"android:layout_width="250.0dip"android:layout_height="wrap_content"android:gravity="left"android:inputType="number"android:text=""android:textSize="16.0dip" /></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:background="@drawable/bg_border_bottom"android:orientation="horizontal"android:paddingTop="15.0dip"android:paddingBottom="15.0dip"><TextViewandroid:layout_width="70.0dip"android:layout_height="30.0dip"android:layout_weight="1.0"android:gravity="start"android:text="收货地址:"android:textColor="#ff000000"android:textSize="20.0dip" /><EditTextandroid:id="@+id/address"android:layout_width="250.0dip"android:layout_height="wrap_content"android:gravity="left"android:text=""android:textSize="16.0dip" /></LinearLayout></LinearLayout><Buttonandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_margin="20.0dip"android:background="@drawable/btn_border_fill"android:onClick="save"android:text="保存"android:textColor="@color/colorWhite" />
</LinearLayout>

1. **初始化活动**:
   - 调用 `super.onCreate(savedInstanceState)`,确保基类的初始化正确执行。
   - 设置当前活动的引用为 `myActivity`。

2. **设置布局**:
   - 使用 `setContentView(R.layout.activity_snack_add)` 加载相应的布局文件。

3. **视图组件初始化**:
   - 找到并初始化不同的视图组件,包括文本输入框 (`etTitle`, `etIssuer`, `etImg`, `etContent`)、下拉菜单 (`spType`) 和图像视图 (`ivImg`)。

4. **自定义 ActionBar**:
   - 获取自定义 `ActionBar` 并设置标题为“编辑零食信息”。
   - 配置返回按钮(左侧点击事件)以结束当前活动。
   - 右侧点击事件目前没有实现(留空)。

5. **初始化其他视图组件**:
   - 调用 `initView()` 方法,可能用于设置视图的初始状态或加载数据。

 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.myActivity = this;setContentView(R.layout.activity_snack_add);this.etTitle = findViewById(R.id.title);this.etIssuer = findViewById(R.id.issuer);this.spType = findViewById(R.id.type);this.etImg = findViewById(R.id.img);this.etContent = findViewById(R.id.content);this.ivImg = findViewById(R.id.iv_img);ActionBar actionBar = findViewById(R.id.myActionBar);this.mActionBar = actionBar;actionBar.setData(this.myActivity, "编辑零食信息", R.drawable.ic_back, 0, 0, getResources().getColor(R.color.colorPrimary), new ActionBar.ActionBarClickListener() {@Overridepublic void onLeftClick() {AddSnackActivity.this.finish();}@Overridepublic void onRightClick() {}});initView();}

### 主要功能概述

1. **加载 Fragment 布局**:
   - 使用 `inflater.inflate` 加载 `fragment_user` 的布局。

2. **视图组件初始化**:
   - 初始化多个 UI 组件,包括:
     - 用户信息 (`llPerson`)
     - 安全设置 (`llSecurity`)
     - 浏览界面 (`llBrowse`)
     - 订单管理 (`order`)
     - 管理界面 (`manage`)
     - 登出按钮 (`btnLogout`)
     - 收藏夹 (`llFavorite`)

3. **视图可见性设置**:
   - 根据用户角色(普通用户或管理员)动态设置视图的可见性:
     - 如果是管理员,隐藏收藏夹、订单和浏览界面,显示管理界面。
     - 否则,显示所有功能,除了管理界面。

4. **点击事件处理**:
   - 为各个视图组件设置点击事件:
     - **个人信息**:点击后显示提示并启动 `PersonActivity`。
     - **管理界面**:点击后显示提示并启动 `ManageActivity`。
     - **安全设置**:点击后显示提示并启动 `PasswordActivity`。
     - **浏览界面**:点击后显示提示并启动 `BrowseActivity`。
     - **订单界面**:点击后显示提示并启动 `OrderActivity`。
     - **收藏夹**:点击后显示提示(如 QQ 联系信息)。
     - **登出按钮**:点击后显示提示,清除登录信息并返回 `LoginActivity`。

### 总结
这个 `Fragment` 负责用户界面的展示和操作,清晰地组织了各个功能模块。根据用户角色动态调整视图的可见性,并提供了友好的交互体验。整体结构简单易读,便于维护和扩展。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#ffffffff"android:orientation="vertical"><ImageViewandroid:layout_width="fill_parent"android:layout_height="100.0dip"android:layout_gravity="center"android:layout_marginTop="0.0dip"android:layout_marginBottom="50.0dip"android:src="@drawable/logo" /><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical"><LinearLayoutandroid:id="@+id/person"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="10.0dip"android:background="@drawable/bg_ripple"android:orientation="horizontal"android:paddingLeft="20.0dip"android:paddingTop="10.0dip"android:paddingRight="20.0dip"android:paddingBottom="10.0dip"><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/main_user_press" /><TextViewandroid:layout_width="0.0dip"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="10.0dip"android:layout_weight="1.0"android:text="个人信息"android:textColor="@color/colorBlack"android:textSize="14.0dip" /><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/ic_right" /></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical"><LinearLayoutandroid:id="@+id/manage"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="10.0dip"android:background="@drawable/bg_ripple"android:orientation="horizontal"android:paddingLeft="20.0dip"android:paddingTop="10.0dip"android:paddingRight="20.0dip"android:paddingBottom="10.0dip"><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/manage" /><TextViewandroid:layout_width="0.0dip"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="10.0dip"android:layout_weight="1.0"android:text="用户管理"android:textColor="@color/colorBlack"android:textSize="14.0dip" /><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/ic_right" /></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical"><LinearLayoutandroid:id="@+id/order"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="10.0dip"android:background="@drawable/bg_ripple"android:orientation="horizontal"android:paddingLeft="20.0dip"android:paddingTop="10.0dip"android:paddingRight="20.0dip"android:paddingBottom="10.0dip"><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/dingdan" /><TextViewandroid:layout_width="0.0dip"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="10.0dip"android:layout_weight="1.0"android:text="我的订单"android:textColor="@color/colorBlack"android:textSize="14.0dip" /><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/ic_right" /></LinearLayout><LinearLayoutandroid:id="@+id/browse"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="10.0dip"android:background="@drawable/bg_ripple"android:orientation="horizontal"android:paddingLeft="20.0dip"android:paddingTop="10.0dip"android:paddingRight="20.0dip"android:paddingBottom="10.0dip"><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/ic_browse" /><TextViewandroid:layout_width="0.0dip"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="10.0dip"android:layout_weight="1.0"android:text="浏览记录"android:textColor="@color/colorBlack"android:textSize="14.0dip" /><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/ic_right" /></LinearLayout><LinearLayoutandroid:id="@+id/security"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="10.0dip"android:background="@drawable/bg_ripple"android:orientation="horizontal"android:paddingLeft="20.0dip"android:paddingTop="10.0dip"android:paddingRight="20.0dip"android:paddingBottom="10.0dip"><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/ic_security" /><TextViewandroid:layout_width="0.0dip"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="10.0dip"android:layout_weight="1.0"android:text="账号安全"android:textColor="@color/colorBlack"android:textSize="14.0dip" /><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/ic_right" /></LinearLayout><LinearLayoutandroid:id="@+id/favorite"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="10.0dip"android:background="@drawable/bg_ripple"android:orientation="horizontal"android:paddingLeft="20.0dip"android:paddingTop="10.0dip"android:paddingRight="20.0dip"android:paddingBottom="10.0dip"><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/kefu" /><TextViewandroid:layout_width="0.0dip"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="10.0dip"android:layout_weight="1.0"android:text="联系客服"android:textColor="@color/colorBlack"android:textSize="14.0dip" /><ImageViewandroid:layout_width="25.0dip"android:layout_height="25.0dip"android:layout_gravity="center"android:src="@drawable/ic_right" /></LinearLayout></LinearLayout><Buttonandroid:id="@+id/logout"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginLeft="20.0dip"android:layout_marginTop="100.0dip"android:layout_marginRight="20.0dip"android:background="@drawable/btn_border_fill"android:text="退出登录"android:textColor="@color/colorWhite"android:textSize="18.0dip" /></LinearLayout></LinearLayout>
</LinearLayout>

四、完整的项目源码 

👇👇👇👇👇快捷获取方式👇👇👇👇👇

相关文章:

网络资源模板--Android Studio 零食工坊(商城)

目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 一、项目演示 网络资源模板--零食工坊 二、项目测试环境 三、项目详情 1. **加载 Fragment 布局**&#xff1a; - 使用 inflater.inflate 加载 fragment_snack 的布局。 2. **视图组件初始化**&am…...

百度高德坐标系相互转换

一、百度与高德坐标系互换 百度坐标系&#xff1a;bd09 高德坐标系&#xff1a; gcj02 import math# 坐标系转换&#xff1a;百度转高德&#xff0c;高德转百度 class CoordinateSystem:staticmethoddef bd09_to_gcj02(bd_lon, bd_lat):百度坐标系:bd09 转成高德坐标系 gcj0…...

免费下载6组简历模板,让HR一眼相中你!

简历是求职者向招聘单位展示自我的重要工具&#xff0c;选择一份高质量的简历模板免费下载&#xff0c;能够提升面试机会并留下深刻印象。优秀的简历模板需具备清晰的信息结构、出色的视觉效果及合理的排版布局。简历的配色可以凸显求职者的个性&#xff0c;而有逻辑性的排版则…...

设计模式之模版方法模式

定义 定义一个操作中的算法的骨架&#xff08;稳定&#xff09;&#xff0c;而将一些步骤延迟&#xff08;变化&#xff09;到子类中。模版方法使得子类可以不改变&#xff08;复用&#xff09;一个算法的结构即可重定义&#xff08;override 重写&#xff09;该算法的某些特定…...

解析!文档扫描 SDK 中的高级图像处理技术

随着世界数字化&#xff0c;文档扫描已成为现代商业运营的关键&#xff0c;它使文档的存储、访问和管理更加便捷。然而&#xff0c;扫描图像的质量对于这些数字档案的有效性至关重要。高质量的扫描可确保文本清晰、数据准确捕获并且信息易于检索。 另一方面&#xff0c;质量差…...

线性判别分析(LDA)中求协方差矩阵示例

让我们通过一个简单的例子计算协方差矩阵。假设我们有两类数据集 X 0 X_0 X0​ 和 X 1 X_1 X1​&#xff0c;每类有两个样本&#xff0c;每个样本有两个特征。 数据集&#xff1a; 类 0 的样本&#xff1a; X 0 [ 1 2 2 3 ] X_0 \begin{bmatrix} 1 & 2 \\ 2 & 3…...

Maven的详细解读和配置

目录 一、Maven 1.1 引言 1.2 介绍 1.3 下载安装 1.3.1 解压 1.3.2 配置环境变量 1.3.3 测试 1.4 仓库[了解] 1.5 Maven配置 1.5.1 修改仓库位置 1.5.2 设置镜像 二、IDEA - MAVEN 2.1 idea关联maven 2.2 为新项目设置 2.2 创建java项目[重点] 2.3 java项目结构…...

在vue2项目中使用dart-sass

问题描述 在vue2项目中使用dart-sass。或者将node-sass换成dart-sass&#xff0c;原因是node-sass安装比较困难&#xff0c;很多时候sass-loader无法安装成功。另外在win和Linux环境下运行行项目需要针对Linux搞一个node-sass的Linux版本。 问题分析 在 Vue 2 项目中使用 da…...

【机器学习】过拟合与欠拟合——如何优化模型性能

【机器学习】过拟合与欠拟合——如何优化模型性能 1. 引言 在机器学习中&#xff0c;模型的表现不仅依赖于算法的选择&#xff0c;还依赖于模型对数据的拟合情况。过拟合&#xff08;Overfitting&#xff09;和欠拟合&#xff08;Underfitting&#xff09;是模型训练过程中常…...

二进制日志gtid模式

# --skip-gtids&#xff0c;使用mysqlbinlog截取时添加该参数&#xff0c;会执行已经执行的事务 mysqlbinlog --skip-gtids --include-gtidsa56fdfdc-7699-11ef-8f40-000c297f81d5:40 /data/binlog/mysql-bin.000003 > gtid.sql # --skip-gtids&#xff0c;使用mysqlbinlog截…...

华硕主板开启TPM 2.0

安装Windows11系统&#xff0c;需要打开TPM 安装 Windows 11 的方法 电脑健康状况检查应用验证最低系统要求 在电脑上启用 TPM 2.0 查看主板型号 winr msinfo32 查看 tpm 进入Advanced Mode&#xff08;F7&#xff09; 选择Security&#xff0c;进入Secure Boot&#xff0c;我…...

Linux 一键部署Mysql 8.0.37

mysql 前言 MySQL 是一个基于 SQL(Structured Query Language)的数据库系统,SQL 是一种用于访问和管理数据库的标准语言。MySQL 以其高性能、稳定性和易用性而闻名,它被广泛应用于各种场景,包括: Web 应用程序:许多动态网站和内容管理系统(如 WordPress)使用 MySQL 存…...

Elasticsearch可视化工具ElasticHD

目录 介绍 ElasticHD应用程序页面 安装 基本用法 独立可执行文件 ES版本支持 SQL特性支持: 超越SQL功能支持: SQL的用法 Docker快速入门: 下载地址 介绍 ElasticHD是ElasticSearch可视化管理工具。它不需要任何软件。它在您的Web浏览器中工作,允许您随时随地管理…...

Chrome截取网页全屏

1.使用Chrome开发者工具 Chrome自带的开发者工具&#xff0c;可以进行网页整页截图&#xff0c; 首先打开你想截图的网页&#xff0c; 然后按下 F12,调出开发者工具&#xff0c; 接着按Ctrl Shift P。 紧接着输入指令 capture&#xff0c; 它会提示有三个选项&#xff0c;如…...

Why Is Prompt Tuning for Vision-Language Models Robust to Noisy Labels?

文章汇总 本文的作者针对了提示学习的结构设计进行了分析&#xff0c;发现了一些规律&#xff1a; 1)固定的类名令牌为模型的优化提供了强正则化&#xff0c;减少了由噪声样本引起的梯度。 2)从多样化和通用的web数据中学习到的强大的预训练图像文本嵌入为图像分类提供了强大…...

C++ 折叠表达式

C 折叠表达式&#xff08;Fold Expression&#xff09;是在 C17 引入的一种语法&#xff0c;用于简化与可变参数模板的操作。折叠表达式的作用是对参数包&#xff08;parameter pack&#xff09;进行递归处理。 折叠表达式有四种类型&#xff1a; 一元左折叠 (Unary Left Fol…...

双控开关接入NVBoard

导入NVBoard git仓库&#xff1a;https://github.com/NJU-ProjectN/nvboard 按照ysyx手册的要求&#xff0c;初始化NVBoard项目。 由于GitHub在国外&#xff0c;可能会超时无响应&#xff1a; 解决方案是修改代理。 当前的运行环境是VM VirtualBox虚拟机&#xff0c;网卡是…...

聊一聊软件系统性能测试的重要性

目录 性能测试的分类 为什么要进行性能测试呢&#xff1f; 性能测试曲线对比参数 虚拟用户数 vs 时间: 响应时间 vs 虚拟用户数: 吞吐量 vs 虚拟用户数: 错误率 vs 虚拟用户数: 资源使用情况 vs 时间: 组合视图 上图曲线图关键点介绍 性能测试的重要性主要体现在以下…...

双十一有哪些好物值得入手?五款超值数码好物分享!

在如今这个科技飞速发展的时代&#xff0c;数码产品已经成为我们生活中不可或缺的一部分。双十一作为一年一度的购物狂欢节&#xff0c;为我们提供了一个绝佳的机会&#xff0c;可以以更优惠的价格入手心仪的数码好物。下面就为大家分享五款超值数码好物&#xff0c;让你的生活…...

uniapp监听滚动实现顶部透明度变化

效果如图&#xff1a; 实现思路&#xff1a; 1、使用onPageScroll监听页面滚动&#xff0c;改变导航条的透明度&#xff1b; 2、关于顶部图片的高度&#xff1a; 如果是小程序&#xff1a;使用getMenuButtonBoundingClientRect获取胶囊顶部距离和胶囊高度&#xff1b; 如果…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...