网络资源模板--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 布局**: - 使用 inflater.inflate 加载 fragment_snack 的布局。 2. **视图组件初始化**&am…...
百度高德坐标系相互转换
一、百度与高德坐标系互换 百度坐标系:bd09 高德坐标系: gcj02 import math# 坐标系转换:百度转高德,高德转百度 class CoordinateSystem:staticmethoddef bd09_to_gcj02(bd_lon, bd_lat):百度坐标系:bd09 转成高德坐标系 gcj0…...
免费下载6组简历模板,让HR一眼相中你!
简历是求职者向招聘单位展示自我的重要工具,选择一份高质量的简历模板免费下载,能够提升面试机会并留下深刻印象。优秀的简历模板需具备清晰的信息结构、出色的视觉效果及合理的排版布局。简历的配色可以凸显求职者的个性,而有逻辑性的排版则…...
设计模式之模版方法模式
定义 定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。模版方法使得子类可以不改变(复用)一个算法的结构即可重定义(override 重写)该算法的某些特定…...
解析!文档扫描 SDK 中的高级图像处理技术
随着世界数字化,文档扫描已成为现代商业运营的关键,它使文档的存储、访问和管理更加便捷。然而,扫描图像的质量对于这些数字档案的有效性至关重要。高质量的扫描可确保文本清晰、数据准确捕获并且信息易于检索。 另一方面,质量差…...
线性判别分析(LDA)中求协方差矩阵示例
让我们通过一个简单的例子计算协方差矩阵。假设我们有两类数据集 X 0 X_0 X0 和 X 1 X_1 X1,每类有两个样本,每个样本有两个特征。 数据集: 类 0 的样本: 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,原因是node-sass安装比较困难,很多时候sass-loader无法安装成功。另外在win和Linux环境下运行行项目需要针对Linux搞一个node-sass的Linux版本。 问题分析 在 Vue 2 项目中使用 da…...
【机器学习】过拟合与欠拟合——如何优化模型性能
【机器学习】过拟合与欠拟合——如何优化模型性能 1. 引言 在机器学习中,模型的表现不仅依赖于算法的选择,还依赖于模型对数据的拟合情况。过拟合(Overfitting)和欠拟合(Underfitting)是模型训练过程中常…...
二进制日志gtid模式
# --skip-gtids,使用mysqlbinlog截取时添加该参数,会执行已经执行的事务 mysqlbinlog --skip-gtids --include-gtidsa56fdfdc-7699-11ef-8f40-000c297f81d5:40 /data/binlog/mysql-bin.000003 > gtid.sql # --skip-gtids,使用mysqlbinlog截…...
华硕主板开启TPM 2.0
安装Windows11系统,需要打开TPM 安装 Windows 11 的方法 电脑健康状况检查应用验证最低系统要求 在电脑上启用 TPM 2.0 查看主板型号 winr msinfo32 查看 tpm 进入Advanced Mode(F7) 选择Security,进入Secure Boot,我…...
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自带的开发者工具,可以进行网页整页截图, 首先打开你想截图的网页, 然后按下 F12,调出开发者工具, 接着按Ctrl Shift P。 紧接着输入指令 capture, 它会提示有三个选项,如…...
Why Is Prompt Tuning for Vision-Language Models Robust to Noisy Labels?
文章汇总 本文的作者针对了提示学习的结构设计进行了分析,发现了一些规律: 1)固定的类名令牌为模型的优化提供了强正则化,减少了由噪声样本引起的梯度。 2)从多样化和通用的web数据中学习到的强大的预训练图像文本嵌入为图像分类提供了强大…...
C++ 折叠表达式
C 折叠表达式(Fold Expression)是在 C17 引入的一种语法,用于简化与可变参数模板的操作。折叠表达式的作用是对参数包(parameter pack)进行递归处理。 折叠表达式有四种类型: 一元左折叠 (Unary Left Fol…...
双控开关接入NVBoard
导入NVBoard git仓库:https://github.com/NJU-ProjectN/nvboard 按照ysyx手册的要求,初始化NVBoard项目。 由于GitHub在国外,可能会超时无响应: 解决方案是修改代理。 当前的运行环境是VM VirtualBox虚拟机,网卡是…...
聊一聊软件系统性能测试的重要性
目录 性能测试的分类 为什么要进行性能测试呢? 性能测试曲线对比参数 虚拟用户数 vs 时间: 响应时间 vs 虚拟用户数: 吞吐量 vs 虚拟用户数: 错误率 vs 虚拟用户数: 资源使用情况 vs 时间: 组合视图 上图曲线图关键点介绍 性能测试的重要性主要体现在以下…...
双十一有哪些好物值得入手?五款超值数码好物分享!
在如今这个科技飞速发展的时代,数码产品已经成为我们生活中不可或缺的一部分。双十一作为一年一度的购物狂欢节,为我们提供了一个绝佳的机会,可以以更优惠的价格入手心仪的数码好物。下面就为大家分享五款超值数码好物,让你的生活…...
uniapp监听滚动实现顶部透明度变化
效果如图: 实现思路: 1、使用onPageScroll监听页面滚动,改变导航条的透明度; 2、关于顶部图片的高度: 如果是小程序:使用getMenuButtonBoundingClientRect获取胶囊顶部距离和胶囊高度; 如果…...
保姆级教程:在Ubuntu 20.04上从源码编译aarch64-linux-gnu交叉工具链(GCC 9.2.0 + Glibc 2.30)
深度实践:从源码构建aarch64-linux-gnu交叉工具链全指南 在嵌入式开发领域,交叉编译工具链的构建能力是区分普通开发者与资深工程师的重要标志。当现成的预编译工具链无法满足特定需求时,从源码手动构建工具链不仅能解决兼容性问题࿰…...
迪拜塔幕墙设计
迪拜塔幕墙设计 【作 者】:罗永增 【关键词】:迪拜塔,幕墙,设计,系统。 前言:...
Unity游戏开发集成MCP协议:AI助手自动化操作指南
1. 项目概述:Unity游戏开发中的MCP革命如果你是一名Unity开发者,最近可能已经注意到一个名为“CoderGamester/mcp-unity”的项目在GitHub上悄然走红。这不仅仅是一个普通的插件或工具包,它代表了一种全新的工作流范式,旨在将大型语…...
Go语言AI编程助手SDK:提升Cursor代码理解与生成精准度
1. 项目概述:一个为AI编程而生的Go语言SDK如果你是一名Go语言开发者,同时又在深度使用Cursor这样的AI辅助编程工具,那么你很可能已经感受到了一个痛点:如何让AI更精准、更高效地理解你的代码库,并在此基础上进行智能操…...
从零构建现代化工作流引擎:架构、实战与生产级部署指南
1. 项目概述:一个为专业开发者打造的现代化工作流引擎最近在GitHub上看到一个挺有意思的项目,叫rohitg00/pro-workflow。光看名字,你可能觉得这又是一个“工作流”工具,市面上这类工具已经多如牛毛了。但当我深入去研究它的源码、…...
【2026年阿里巴巴集团暑期实习- 5月16日-算法岗-第二题- 坏掉的键盘】(题目+思路+JavaC++Python解析+在线测试)
题目内容 小明准备输入一个仅由小写英文字母组成的字符串,但他的键盘在一开始就有且仅有一个按键失灵,导致该字母在原串中的所有出现都没有被输入,最终得到的字符串为 sss。小明还告诉你:原本要输入的完整字符串中任意相邻两个字符都不相同。 请你计算,对于每一个可能的…...
基于CLUE与加速度计的鸡蛋坠落实验:从传感器数据到缓冲设计优化
1. 项目概述:用传感器数据为物理实验“上保险” 鸡蛋坠落实验,一个听起来就充满童年乐趣和“悲剧”风险的经典物理项目。它的核心挑战在于,如何设计一个缓冲装置,让一枚脆弱的生鸡蛋从高处坠落而不破裂。传统上,我们依…...
STM32F407最小系统板DIY全记录:从原理图绘制到PCB打样,手把手带你复刻一块自己的核心板
STM32F407最小系统板DIY全记录:从原理图绘制到PCB打样,手把手带你复刻一块自己的核心板 1. 项目规划与芯片选型 在开始动手之前,我们需要明确几个关键问题:为什么要选择STM32F407?这个芯片适合哪些应用场景?…...
Linux光标主题管理工具x-cursor-help:从原理到实战
1. 项目概述:一个被低估的鼠标光标辅助工具如果你在Linux桌面环境下工作,尤其是使用像GNOME、KDE Plasma这类现代化的桌面环境,你可能会遇到一个不大不小但很恼人的问题:鼠标光标主题的安装和管理。从网上下载了一个漂亮的.tar.gz…...
基于CircuitPython与ItsyBitsy M4打造可编程宏键盘:从硬件到代码全解析
1. 项目概述:打造你的专属输入利器 在键盘这个看似成熟的领域里,我们真的满足于厂商提供的“标准答案”吗?对于视频剪辑师、程序员、设计师或者硬核游戏玩家来说,一套固定的键位布局和功能,往往意味着效率的妥协。真正…...
