团队博客-第二阶段冲刺-Day1
今天团队冲刺第二阶段正式开始,我们着手做安卓端的系统;
团队博客-第二阶段冲刺-Day1
团队任务
完成图片转表格app(TransformMine)的开发
1.统一,简约,漂亮的前端界面
2.完成用户主要功能的开发
3.优化用户体验
4.定时团队任务进行团队任务完成情况的审查
今日完成任务
1.制作主页面,包括底部导航栏
2.制作主要功能的几个页面
今日团队任务关键代码:
<?xml version="1.0" encoding="utf-8"?>
<!--侧边栏--> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:id="@+id/main_tab" android:checkableBehavior="single"> <item android:id="@+id/nav_news" android:icon="@drawable/ic_menu_news" android:title="@string/menu_news" /> <item android:id="@+id/nav_trending" android:icon="@drawable/ic_menu_trending" android:title="@string/menu_trending" /> <item android:id="@+id/nav_profile" android:icon="@drawable/ic_menu_person" android:title="@string/menu_profile" /> </group> <group android:id="@+id/other" android:checkableBehavior="single"> <item android:id="@+id/nav_search" android:checkable="false" android:icon="@drawable/ic_menu_search" android:title="@string/menu_search" /> <item android:id="@+id/nav_notifications" android:checkable="false" android:icon="@drawable/ic_menu_notifications" android:title="@string/menu_notifications" /> <item android:id="@+id/nav_starred" android:checkable="false" android:icon="@drawable/ic_menu_star" android:title="@string/menu_starred" /> </group> <group android:id="@+id/setting" android:checkableBehavior="none"> <item android:id="@+id/nav_settings" android:checkable="false" android:icon="@drawable/ic_menu_settings" android:title="@string/menu_settings" /> <item android:id="@+id/nav_about" android:checkable="false" android:icon="@drawable/ic_menu_about" android:title="@string/menu_about" /> </group> </menu>
package com.transform.transformMine.utils; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.method.LinkMovementMethod; import android.text.style.ClickableSpan; import android.view.View; import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import com.transform.transformMine.R; import com.transform.transformMine.core.webview.AgentWebActivity; import com.transform.transformMine.fragment.other.ServiceProtocolFragment; import com.xuexiang.xpage.base.XPageFragment; import com.xuexiang.xpage.core.PageOption; import com.xuexiang.xui.utils.ColorUtils; import com.xuexiang.xui.utils.ResUtils; import com.xuexiang.xui.widget.dialog.DialogLoader; import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction; import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog; import com.xuexiang.xutil.XUtil; import static com.transform.transformMine.core.webview.AgentWebFragment.KEY_URL; public final class Utils { private Utils() { throw new UnsupportedOperationException("u can't instantiate me..."); } private static final String PRIVACY_URL = "https://gitee.com/xuexiangjys/TemplateAppProject/raw/master/LICENSE"; public static Dialog showPrivacyDialog(Context context, MaterialDialog.SingleButtonCallback submitListener) { MaterialDialog dialog = new MaterialDialog.Builder(context).title(R.string.title_reminder).autoDismiss(false).cancelable(false) .positiveText(R.string.lab_agree).onPositive((dialog1, which) -> { if (submitListener != null) { submitListener.onClick(dialog1, which); } else { dialog1.dismiss(); } }) .negativeText(R.string.lab_disagree).onNegative(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { dialog.dismiss(); DialogLoader.getInstance().showConfirmDialog(context, ResUtils.getString(R.string.title_reminder), String.format(ResUtils.getString(R.string.content_privacy_explain_again), ResUtils.getString(R.string.app_name)), ResUtils.getString(R.string.lab_look_again), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); showPrivacyDialog(context, submitListener); } }, ResUtils.getString(R.string.lab_still_disagree), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); DialogLoader.getInstance().showConfirmDialog(context, ResUtils.getString(R.string.content_think_about_it_again), ResUtils.getString(R.string.lab_look_again), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); showPrivacyDialog(context, submitListener); } }, ResUtils.getString(R.string.lab_exit_app), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); XUtil.exitApp(); } }); } }); } }).build(); dialog.setContent(getPrivacyContent(context)); //开始响应点击事件 dialog.getContentView().setMovementMethod(LinkMovementMethod.getInstance()); dialog.show(); return dialog; } private static SpannableStringBuilder getPrivacyContent(Context context) { SpannableStringBuilder stringBuilder = new SpannableStringBuilder() .append(" 欢迎来到TransFormMine").append(ResUtils.getString(R.string.app_name)).append("!\n") .append(" \n") .append(" "); stringBuilder.append(getPrivacyLink(context, PRIVACY_URL)) .append("\n") .append(" ") .append(getPrivacyLink(context, PRIVACY_URL)) .append(""); return stringBuilder; } private static SpannableString getPrivacyLink(Context context, String privacyUrl) { String privacyName = String.format(ResUtils.getString(R.string.lab_privacy_name), ResUtils.getString(R.string.app_name)); SpannableString spannableString = new SpannableString(privacyName); spannableString.setSpan(new ClickableSpan() { @Override public void onClick(@NonNull View widget) { goWeb(context, privacyUrl); } }, 0, privacyName.length(), Spanned.SPAN_MARK_MARK); return spannableString; } public static void goWeb(Context context, final String url) { Intent intent = new Intent(context, AgentWebActivity.class); intent.putExtra(KEY_URL, url); context.startActivity(intent); } public static void gotoProtocol(XPageFragment fragment, boolean isPrivacy, boolean isImmersive) { PageOption.to(ServiceProtocolFragment.class) .putString(ServiceProtocolFragment.KEY_PROTOCOL_TITLE, isPrivacy ? ResUtils.getString(R.string.title_privacy_protocol) : ResUtils.getString(R.string.title_user_protocol)) .putBoolean(ServiceProtocolFragment.KEY_IS_IMMERSIVE, isImmersive) .open(fragment); } public static boolean isColorDark(@ColorInt int color) { return ColorUtils.isColorDark(color, 0.382); } }
作者:冰稀饭Aurora
出处:https://www.cnblogs.com/rsy-bxf150/p/17389764.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端