团队博客-第二阶段冲刺-Day9
团队博客-第二阶段冲刺-Day9
团队任务
完成图片转表格app(TransformMine)的开发
1.统一,简约,漂亮的前端界面
2.完成用户主要功能的开发
3.优化用户体验
4.定时团队任务进行团队任务完成情况的审查
今日完成任务
1.测试app的主要功能能否完整运作
2.调整目前的bug和不完善的地方
3.改良ui,为app 制作应用图标
今日团队任务关键代码:
package com.transform.transformMine.activity; import static com.transform.transformMine.fragment.other.TransFragment.REQUEST_CODE_PICK_IMAGE; import static com.xuexiang.xui.XUI.getContext; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.widget.Toolbar; import androidx.viewpager.widget.ViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.transform.transformMine.R; import com.transform.transformMine.core.BaseActivity; import com.transform.transformMine.core.BaseFragment; import com.transform.transformMine.databinding.ActivityMainBinding; import com.transform.transformMine.fragment.news.NewsFragment; import com.transform.transformMine.fragment.other.AboutFragment; import com.transform.transformMine.fragment.other.SettingsFragment; import com.transform.transformMine.fragment.profile.ProfileFragment; import com.transform.transformMine.fragment.trending.TrendingFragment; import com.transform.transformMine.utils.Utils; import com.transform.transformMine.utils.sdkinit.XUpdateInit; import com.transform.transformMine.widget.GuideTipsDialog; import com.xuexiang.xaop.annotation.SingleClick; import com.xuexiang.xui.adapter.FragmentAdapter; import com.xuexiang.xui.utils.ResUtils; import com.xuexiang.xui.utils.ThemeUtils; import com.xuexiang.xui.utils.WidgetUtils; import com.xuexiang.xui.utils.XToastUtils; import com.xuexiang.xui.widget.imageview.RadiusImageView; import com.xuexiang.xutil.XUtil; import com.xuexiang.xutil.common.ClickUtils; import com.xuexiang.xutil.common.CollectionUtils; import com.xuexiang.xutil.display.Colors; import java.io.ByteArrayOutputStream; import java.io.FileNotFoundException; public class MainActivity extends BaseActivity<ActivityMainBinding> implements View.OnClickListener, BottomNavigationView.OnNavigationItemSelectedListener, ClickUtils.OnClick2ExitListener, Toolbar.OnMenuItemClickListener { private String[] mTitles; @Override protected ActivityMainBinding viewBindingInflate(LayoutInflater inflater) { return ActivityMainBinding.inflate(inflater); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initViews(); initData(); initListeners(); } @Override protected boolean isSupportSlideBack() { return false; } private void initViews() { WidgetUtils.clearActivityBackground(this); mTitles = ResUtils.getStringArray(R.array.home_titles); binding.includeMain.toolbar.setTitle(mTitles[0]); binding.includeMain.toolbar.inflateMenu(R.menu.menu_main); binding.includeMain.toolbar.setOnMenuItemClickListener(this); initHeader(); //主页内容填充 BaseFragment[] fragments = new BaseFragment[]{ new NewsFragment(), new TrendingFragment(), new ProfileFragment() }; FragmentAdapter<BaseFragment> adapter = new FragmentAdapter<>(getSupportFragmentManager(), fragments); binding.includeMain.viewPager.setOffscreenPageLimit(mTitles.length - 1); binding.includeMain.viewPager.setAdapter(adapter); } private void initData() { // GuideTipsDialog.showTips(this); XUpdateInit.checkUpdate(this, false); } private void initHeader() { binding.navView.setItemIconTintList(null); View headerView = binding.navView.getHeaderView(0); LinearLayout navHeader = headerView.findViewById(R.id.nav_header); RadiusImageView ivAvatar = headerView.findViewById(R.id.iv_avatar); TextView tvAvatar = headerView.findViewById(R.id.tv_avatar); TextView tvSign = headerView.findViewById(R.id.tv_sign); if (Utils.isColorDark(ThemeUtils.resolveColor(this, R.attr.colorAccent))) { tvAvatar.setTextColor(Colors.WHITE); tvSign.setTextColor(Colors.WHITE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { ivAvatar.setImageTintList(ResUtils.getColors(R.color.xui_config_color_white)); } } else { tvAvatar.setTextColor(ThemeUtils.resolveColor(this, R.attr.xui_config_color_title_text)); tvSign.setTextColor(ThemeUtils.resolveColor(this, R.attr.xui_config_color_explain_text)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { ivAvatar.setImageTintList(ResUtils.getColors(R.color.xui_config_color_gray_3)); } } // TODO: 2019-10-09 初始化数据 ivAvatar.setImageResource(R.drawable.ic_default_head); tvAvatar.setText(R.string.app_name); tvSign.setText("这个家伙很懒,什么也没有留下~~"); navHeader.setOnClickListener(this); } protected void initListeners() { ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, binding.drawerLayout, binding.includeMain.toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); binding.drawerLayout.addDrawerListener(toggle); toggle.syncState(); //侧边栏点击事件 binding.navView.setNavigationItemSelectedListener(menuItem -> { if (menuItem.isCheckable()) { binding.drawerLayout.closeDrawers(); return handleNavigationItemSelected(menuItem); } else { int id = menuItem.getItemId(); if (id == R.id.nav_settings) { openNewPage(SettingsFragment.class); } else if (id == R.id.nav_about) { openNewPage(AboutFragment.class); } else { XToastUtils.toast("点击了:" + menuItem.getTitle()); } } return true; }); //主页事件监听 binding.includeMain.viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { MenuItem item = binding.includeMain.bottomNavigation.getMenu().getItem(position); binding.includeMain.toolbar.setTitle(item.getTitle()); item.setChecked(true); updateSideNavStatus(item); } @Override public void onPageScrollStateChanged(int state) { } }); binding.includeMain.bottomNavigation.setOnNavigationItemSelectedListener(this); } /** * 处理侧边栏点击事件 * * @param menuItem * @return */ private boolean handleNavigationItemSelected(@NonNull MenuItem menuItem) { int index = CollectionUtils.arrayIndexOf(mTitles, menuItem.getTitle()); if (index != -1) { binding.includeMain.toolbar.setTitle(menuItem.getTitle()); binding.includeMain.viewPager.setCurrentItem(index, false); return true; } return false; } @Override public boolean onMenuItemClick(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_privacy) { GuideTipsDialog.showTipsForce(this); } else if (id == R.id.action_about) { openNewPage(AboutFragment.class); } return false; } @SingleClick @Override public void onClick(View v) { int id = v.getId(); if (id == R.id.nav_header) { XToastUtils.toast("点击头部!"); } } //================Navigation================// /** * 底部导航栏点击事件 * * @param menuItem * @return */ @Override public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { int index = CollectionUtils.arrayIndexOf(mTitles, menuItem.getTitle()); if (index != -1) { binding.includeMain.toolbar.setTitle(menuItem.getTitle()); binding.includeMain.viewPager.setCurrentItem(index, false); updateSideNavStatus(menuItem); return true; } return false; } /** * 更新侧边栏菜单选中状态 * * @param menuItem */ private void updateSideNavStatus(MenuItem menuItem) { MenuItem side = binding.navView.getMenu().findItem(menuItem.getItemId()); if (side != null) { side.setChecked(true); } } /** * 菜单、返回键响应 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { ClickUtils.exitBy2Click(2000, this); } return true; } @Override public void onRetry() { XToastUtils.toast("再按一次退出程序"); } @Override public void onExit() { XUtil.exitApp(); } }
作者:冰稀饭Aurora
出处:https://www.cnblogs.com/rsy-bxf150/p/17433491.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端