团队博客-第二阶段冲刺-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); } }