额,一不小心浪了几天,这篇博客会说说我写设置界面时的代码过程,个人认为是这四个界面里面最简单的一个。但是,由于我和美工是第一次配合弄这个,所以还是遇到了几个坑。
下面进入正题了。

一、界面元素分析

还是先看一下美工给我的图。

第一、我要吐槽的是,这个界面他是过了很久才给我的!!和他妹子去祖国北边的大草原浪去了=。=
第二、我更要吐槽的是,相比于之前的界面,这个界面明显差了点什么。是的,没有给数据。
不过,还好我坚持的是百分比绘图,所以就目测了一下各个组件的长宽比,然后成功在坑爹的美工手上活了下来。

好了,说正经的,分析一下元素。
其实是把一个大的模块重复了四次,所以我们只分析第一块,Items On Display,这个好了。
其实很简单,都用不着自定义view。

一个TextView—>Items On Display
一个空白
一个TextView靠左,一个CheckBox靠右—>Temprature
一个TextView靠左,一个CheckBox靠右—>Humidity
一个TextView靠左,一个CheckBox靠右—>Co
一个TextView靠左,一个CheckBox靠右—>CO2
一个空白
一个横线

下面的部分只需要重复以上步骤就好了。
另外需要考虑的是各个部分所占长宽的大小,显然,这个工作是我目测得到的,不过幸好最后感觉效果还阔以。

我分析之后的图片权重分布是这样的:

、、、本来想做一张图片,上面布满线条和数字来提高一下逼格的,不过有点晚了,我的xml代码我也懒得看了,权重数据就没有。而且绘图软件只有画图和sai,用得都不熟练,暂且偷一回懒吧。

二、实现布局

在我写这篇博客的时候,我学到了自定义属性,组合控件这些知识,然而已经用不上了,代码已经写好了,我也懒得改了,也许哪天心血来潮会改改,毕竟看上去要高大上一点。而目前的代码呢,基于上面那个片段是这样的:

 <!-- 标题1 --><TextView
            style="@style/zhuBiaooTi"android:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="2"android:text="Items On Display" /><!-- 标题1空白 --><!-- <Viewandroid:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="1"android:background="#00ffffff" /> --><!-- 标题1 副标题1 --><RelativeLayout
            android:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="1" ><TextView
                android:id="@+id/fubiaoti11"style="@style/fuBiaooTi"android:layout_width="fill_parent"android:layout_height="fill_parent"android:text="  Temprature" /><CheckBox
                android:id="@+id/check_temp"android:layout_width="25px"android:layout_height="25px"android:layout_alignParentRight="true"android:layout_marginRight="5dp"android:background="@drawable/checkbox_selector"android:button="@null"android:checked="true"android:gravity="center_vertical"android:layout_centerVertical="true"/></RelativeLayout><!-- 标题1 副标题2 --><RelativeLayout
            android:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="1" ><TextView
                android:id="@+id/fubiaoti12"style="@style/fuBiaooTi"android:layout_width="fill_parent"android:layout_height="fill_parent"android:text="  Humidity" /><CheckBox
                android:id="@+id/check_humi"android:layout_width="25px"android:layout_height="25px"android:layout_alignParentRight="true" android:layout_marginRight="5dp"android:background="@drawable/checkbox_selector"android:button="@null"android:checked="true"  android:layout_centerVertical="true"android:gravity="center_vertical" /></RelativeLayout><!-- 标题1 副标题3 --><RelativeLayout
            android:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="1" ><TextView
                android:id="@+id/fubiaoti13"style="@style/fuBiaooTi"android:layout_width="fill_parent"android:layout_height="fill_parent"android:text="  CO" /><CheckBox
                android:id="@+id/check_co"android:layout_width="25px"android:layout_height="25px"android:layout_alignParentRight="true" android:layout_marginRight="5dp"    android:background="@drawable/checkbox_selector"android:button="@null"  android:layout_centerVertical="true"android:gravity="center_vertical" /></RelativeLayout><!-- 标题1 副标题4 --><RelativeLayout
            android:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="1" ><TextView
                android:id="@+id/fubiaoti14"style="@style/fuBiaooTi"android:layout_width="fill_parent"android:layout_height="fill_parent"android:text="  CO2" /><CheckBox
                android:id="@+id/check_co2"android:layout_width="25px"android:layout_height="25px"android:layout_alignParentRight="true" android:layout_marginRight="5dp"                    android:background="@drawable/checkbox_selector"android:button="@null"  android:layout_centerVertical="true"android:gravity="center_vertical" /></RelativeLayout><!-- 标题1 下方空白 --><View
            android:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="1"android:background="#00ffffff" /><!-- 标题1 下方横线 --><LinearLayout
            android:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="2"android:orientation="vertical" ><View
                android:layout_width="fill_parent"android:layout_height="2dp"android:layout_gravity="top"android:background="#88ffffff" /></LinearLayout>

额,基本上是把每一行都放在了一个layout里面,这样是因为:
1、只有LinearLayout才有weight属性,所以最外层用的LinearLayout。
2、我觉得RelativeLayout方便布局一点,比如alignParentRight,marginLeft这种,所以每一层都用RelativeLayout包裹了一下。

具体的布置呢,不难,瞟瞟代码就好了。

其中的checkBox的状态用了美工提供的两个图片,xml是这样 :

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" ><item android:state_checked="true" android:drawable="@drawable/check_ed"></item><item android:state_selected="true" android:drawable="@drawable/check_ed"></item><item android:state_pressed="true" android:drawable="@drawable/check_ed"></item><item android:state_selected="false" android:drawable="@drawable/check"></item></selector>

图片在源代码里面有,感兴趣的大大可以下载了去玩。


上面讲了设置的主界面,也就是中间那一块可以按的部分,我们还需要布置一下顶部。
顶部是这样的,有一个返回按钮,一个DETAILS标题,一个下方的黑色外发光横线,这样一分析就感觉简单了很多,具体的实现我也不说了,直接看代码。

<!-- 标题栏 --><RelativeLayout
        android:id="@+id/biaoti_layout"android:layout_width="fill_parent"android:layout_height="142px"android:background="@drawable/mybiaoti_background" ><!-- 返回按钮 --><FrameLayout android:id="@+id/backbutton_frame"android:layout_width="240px"android:layout_height="142px"><ImageButton
            android:id="@+id/button_back"android:layout_width="15px"android:layout_height="25px"android:layout_gravity="center_vertical"android:scaleType="fitCenter"android:background="@drawable/back_buutton" /><ImageButton android:id="@+id/button_back_frontone"android:layout_gravity="center_vertical"android:layout_width="100px"android:layout_height="60px"android:background="#00ffffff"/></FrameLayout><!-- 标题文字 --><TextView
            android:id="@+id/biaoti_text"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_alignParentLeft="true"android:gravity="center"android:text="DETAILS"android:textColor="#ffffffff" /></RelativeLayout>

如果大大们看的稍微认真一点,就会发现我的返回按钮居然有两个ImageButton,而且是放在了FrameLayout里面,也就是一个覆盖了另一个。。。

这是因为,有一个坑,叫做按钮太小根本点不到。

美工忙于划船不靠浆,只好用这个方法了:

用一个透明的按钮覆盖在原来的按钮上,当按钮附近区域被按下时,透明按钮的透明度降低,仿佛按钮被按下一样,就是这么个道理~

最后,其实还有一点框架漏了,那就是左右两边的空白,这个只需要在设置的主界面的最外层的RelativeLayout那里设置宽度为560px(因为目前假设是720*1280px),并且水平居中就可以了。当然,最后在布置界面的时候,需要在java代码里面动态更改这个宽度,跟上一节的原理一样:

获取当前屏幕宽度mScreenWidth后,设置宽度width=560*mScreenWidth/720;,这样就可以匹配屏幕了~

哦,最后上一下完整的Activity的java代码,包括一些事件处理方法等等,不过都还没有实现对应的逻辑,只是弹出了一些logcat方便调试。

package com.example.guochuang;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;public class SettingActivity extends Activity {// 界面组件RelativeLayout mBiaoTiLayout;LinearLayout mSheZhiLayout;ImageButton mBackButton,mBackButtonFrontOne;TextView mBiaoTiText;CheckBox mCheckTemp, mCheckHumi, mCheckCo, mCheckCo2, mCheckWarning;ImageButton mButtonBackground, mButtonMaintone, mButtonAboutUs;FrameLayout mBackButtonFrame;TextView fubiaoti11,fubiaoti12,fubiaoti13,fubiaoti14,fubiaoti21,fubiaoti22,fubiaoti30,fubiaoti41;// 变量private int mNum;private int mScreenWidth;private int mScreenHeight;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.setting_layout);// 存储主界面的mNum数值Intent intent = getIntent();mNum = intent.getIntExtra("number", 0);DisplayMetrics dm = getResources().getDisplayMetrics();mScreenWidth = dm.widthPixels;mScreenHeight = dm.heightPixels;adaptScreen();initListener();}private void adaptScreen() {// 匹配标题栏layoutmBiaoTiLayout = (RelativeLayout) findViewById(R.id.biaoti_layout);RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mBiaoTiLayout.getLayoutParams();params.height = 142 * mScreenHeight / 1280;mBiaoTiLayout.setLayoutParams(params);// 匹配标题栏返回按钮//后面一层按钮mBackButton = (ImageButton) findViewById(R.id.button_back);FrameLayout.LayoutParams params2 = (FrameLayout.LayoutParams) mBackButton.getLayoutParams();params2.height = 25 * mScreenHeight / 1280;params2.width = 15 * mScreenWidth / 720;mBackButton.setX(120 * mScreenWidth / 720);mBackButton.setLayoutParams(params2);//按钮底层layoutmBackButtonFrame=(FrameLayout)findViewById(R.id.backbutton_frame);mBackButtonFrame.getLayoutParams().width=240*mScreenWidth/720;mBackButtonFrame.getLayoutParams().height=142*mScreenHeight/1280;//前面一层按钮mBackButtonFrontOne=(ImageButton)findViewById(R.id.button_back_frontone);mBackButtonFrontOne.setX(77*mScreenWidth/720);mBackButtonFrontOne.getLayoutParams().height=60*mScreenHeight/1280;mBackButtonFrontOne.getLayoutParams().width=100*mScreenWidth/720;mBackButtonFrontOne.setBackgroundColor(0x00ffffff);mBackButtonFrontOne.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubmBackButtonFrontOne.setBackgroundColor(0x11ffffff);/*Timer timer=new Timer();TimerTask myTask=new TimerTask() {@Overridepublic void run() {// TODO Auto-generated method stubmBackButtonFrontOne.setBackgroundColor(0x00ffffff);}};timer.schedule(task, 200);*/Intent intent=new Intent();intent.putExtra("number", mNum);intent.setClass(SettingActivity.this, MainActivity.class);SettingActivity.this.startActivity(intent);}});/*mBackButton = (ImageButton) findViewById(R.id.button_back);RelativeLayout.LayoutParams backparams = (RelativeLayout.LayoutParams) mBackButton.getLayoutParams();backparams.height = 25 * mScreenHeight / 1280;backparams.width = 15 * mScreenWidth / 720;mBackButton.setX(120 * mScreenWidth / 720);mBackButton.setLayoutParams(backparams);*/// 匹配标题栏汉字mBiaoTiText = (TextView) findViewById(R.id.biaoti_text);mBiaoTiText.setTextSize(20 * mScreenWidth / 720);// 匹配设置界面层mSheZhiLayout = (LinearLayout) findViewById(R.id.shezhi_layout);RelativeLayout.LayoutParams params3 = (RelativeLayout.LayoutParams) mSheZhiLayout.getLayoutParams();params3.width = 560 * mScreenWidth / 720;// 匹配标题1,标题2按钮mCheckTemp = (CheckBox) findViewById(R.id.check_temp);mCheckHumi = (CheckBox) findViewById(R.id.check_humi);mCheckCo = (CheckBox) findViewById(R.id.check_co);mCheckCo2 = (CheckBox) findViewById(R.id.check_co2);mCheckWarning = (CheckBox) findViewById(R.id.check_warning);adaptButton(mCheckTemp, mCheckHumi, mCheckCo, mCheckCo2, mCheckWarning);mButtonBackground = (ImageButton) findViewById(R.id.button_background);mButtonMaintone = (ImageButton) findViewById(R.id.button_mainTone);mButtonAboutUs = (ImageButton) findViewById(R.id.button_aboutUs);adaptButton(mButtonBackground, mButtonMaintone, mButtonAboutUs);//为各层文字找到控件,准备添加点击事件fubiaoti11=(TextView)findViewById(R.id.fubiaoti11);fubiaoti12=(TextView)findViewById(R.id.fubiaoti12);fubiaoti13=(TextView)findViewById(R.id.fubiaoti13);fubiaoti14=(TextView)findViewById(R.id.fubiaoti14);fubiaoti21=(TextView)findViewById(R.id.fubiaoti21);fubiaoti22=(TextView)findViewById(R.id.fubiaoti22);fubiaoti30=(TextView)findViewById(R.id.textWarning30);fubiaoti41=(TextView)findViewById(R.id.fubiaoti41);//匹配文字控件fubiaoti11.setTextSize(15*mScreenHeight/1280);fubiaoti12.setTextSize(15*mScreenHeight/1280);fubiaoti13.setTextSize(15*mScreenHeight/1280);fubiaoti14.setTextSize(15*mScreenHeight/1280);fubiaoti21.setTextSize(15*mScreenHeight/1280);fubiaoti22.setTextSize(15*mScreenHeight/1280);fubiaoti30.setTextSize(20*mScreenHeight/1280);fubiaoti41.setTextSize(15*mScreenHeight/1280);}private void adaptButton(CheckBox... boxs) {for (CheckBox box : boxs) {RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)box.getLayoutParams();params.height = Math.min(25 * mScreenHeight / 1280,25 * mScreenWidth / 720);params.width =  Math.min(25 * mScreenHeight / 1280,25 * mScreenWidth / 720);box.setLayoutParams(params);}}private void adaptButton(ImageButton... buttons) {for (ImageButton button : buttons) {RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) button.getLayoutParams();params.height = 24 * mScreenHeight / 1280;params.width = 20 * mScreenWidth / 720;button.setLayoutParams(params);}}private void initListener() {mBackButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent = new Intent();intent.putExtra("number", mNum);intent.setClass(SettingActivity.this, MainActivity.class);SettingActivity.this.startActivity(intent);}});mCheckTemp.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {// TODO Auto-generated method stubif (isChecked) {Toast.makeText(SettingActivity.this, "啊,Temprature被选中了",Toast.LENGTH_SHORT).show();} else {Toast.makeText(SettingActivity.this, "啊,Temprature被取消了",Toast.LENGTH_SHORT).show();}}});mCheckHumi.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {// TODO Auto-generated method stubif (isChecked) {Toast.makeText(SettingActivity.this, "啊,Humidity被选中了",Toast.LENGTH_SHORT).show();} else {Toast.makeText(SettingActivity.this, "啊,Humidity被取消了",Toast.LENGTH_SHORT).show();}}});mCheckCo.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {// TODO Auto-generated method stubif (isChecked) {Toast.makeText(SettingActivity.this, "啊,Co被选中了",Toast.LENGTH_SHORT).show();} else {Toast.makeText(SettingActivity.this, "啊,Co被取消了",Toast.LENGTH_SHORT).show();}}});mCheckCo2.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {// TODO Auto-generated method stubif (isChecked) {Toast.makeText(SettingActivity.this, "啊,Co2被选中了",Toast.LENGTH_SHORT).show();} else {Toast.makeText(SettingActivity.this, "啊,Co2被取消了",Toast.LENGTH_SHORT).show();}}});mCheckWarning.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {// TODO Auto-generated method stubif (isChecked) {Toast.makeText(SettingActivity.this, "啊,warning被选中了",Toast.LENGTH_SHORT).show();} else {Toast.makeText(SettingActivity.this, "啊,warning被取消了",Toast.LENGTH_SHORT).show();}}});mButtonBackground.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubToast.makeText(SettingActivity.this, "啊,Background被点了",Toast.LENGTH_SHORT).show();}});mButtonMaintone.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubToast.makeText(SettingActivity.this, "啊,Main tone被点了",Toast.LENGTH_SHORT).show();}});mButtonAboutUs.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubToast.makeText(SettingActivity.this, "啊,About Us被点了",Toast.LENGTH_SHORT).show();}});//为textView添加点击事件,增加按钮范围OnClickListener textViewListener=new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.fubiaoti11:mCheckTemp.setChecked(!mCheckTemp.isChecked());break;case R.id.fubiaoti12:mCheckHumi.setChecked(!mCheckHumi.isChecked());break;case R.id.fubiaoti13:mCheckCo.setChecked(!mCheckCo.isChecked());break;case R.id.fubiaoti14:mCheckCo2.setChecked(!mCheckCo2.isChecked());break;case R.id.fubiaoti21:Toast.makeText(SettingActivity.this, "啊,21被按了,即将进入background界面", 3000).show();break;case R.id.fubiaoti22:Toast.makeText(SettingActivity.this, "啊,22被按了,即将进入main tone界面", 3000).show();break;case R.id.textWarning30:    mCheckWarning.setChecked(!mCheckWarning.isChecked());break;case R.id.fubiaoti41:Toast.makeText(SettingActivity.this, "啊,41被按了,即将进入about us界面", 3000).show();break;default:break;}}};fubiaoti11.setOnClickListener(textViewListener);fubiaoti12.setOnClickListener(textViewListener);fubiaoti13.setOnClickListener(textViewListener);fubiaoti14.setOnClickListener(textViewListener);fubiaoti21.setOnClickListener(textViewListener);fubiaoti22.setOnClickListener(textViewListener);fubiaoti30.setOnClickListener(textViewListener);fubiaoti41.setOnClickListener(textViewListener);}//监听返回按钮@Override  public boolean onKeyDown(int keyCode, KeyEvent event)  {  if (keyCode == KeyEvent.KEYCODE_BACK )  {  Intent intent=new Intent();intent.putExtra("number", mNum);intent.setClass(SettingActivity.this, MainActivity.class);SettingActivity.this.startActivity(intent);}  return true;  }}

唉哟、、粘上来之后才发现,,看得头疼[笑哭][笑哭][笑哭]

最后的界面是这样的,不管是虚拟机320*480px还是手机720*1280px都是一样一样的。

好了,这个界面的介绍就到此为止了,关于源码的下载呢,在这个系列的第一篇有,就不附了。

菜鸟流程-Touching App(2)- 设置界面相关推荐

  1. 菜鸟流程-Touching App(1)- 主界面

    接下来我会把自己写Touching App的过程一一写下来,不过由于刚上路,可能还有很多错误,包括博客也是~~ 小事情啦,开心就好n(≧▽≦)n 这个app准备用来接收单片机传来的数据,然后显示在手机 ...

  2. Android调app权限设置界面(适配各大手机厂商终极版本)

    背景: 众所周知,国内的android是在google之上,各大手机厂商加了一层,诸如MIUI.EUI,之类的系统.因此在我们开发过程中想调出某应用的权限设置页面,调出的是google原生的权限控制界 ...

  3. android 权限管理适配 oppo,Android调app权限设置界面(适配各大手机厂商终极版本)...

    背景: 众所周知,国内的android是在google之上,各大手机厂商加了一层,诸如MIUI.EUI,之类的系统.因此在我们开发过程中想调出某应用的权限设置页面,调出的是google原生的权限控制界 ...

  4. Android:检查通知权限并跳转到通知设置界面

    声明:该方案只对API19及以上版本有效 一.目标需求 最近项目中在完善推送功能,需要进入APP时检测一下是否开启了推送权限,如果没有开启弹窗提醒,当用户点击弹窗时直接跳转到APP的通知设置界面,就像 ...

  5. android 跳转oppo应用中心_android 跳转到应用通知设置界面的示例

    4.4以下并没有提过从app跳转到应用通知设置页面的Action,可考虑跳转到应用详情页面,下面是直接跳转到应用通知设置的代码: if (android.os.Build.VERSION.SDK_IN ...

  6. iOS 跳转到Wi-Fi设置界面

    //  iOS之前跳转到Wi-Fi设置界面的代码 在点击跳转的按钮动作中添加如下代码 [[UIApplication sharedApplication] openURL:[NSURL URLWith ...

  7. iOS10 打开APP设置界面和WIFI界面

    在iOS10以上,权限这块有了一些变化 首先在info的URL Types 添加  prefs 1.打开APP设置界面 //打开设置let url:NSURL = NSURL(string: UIAp ...

  8. android app没有读写权限设置,Android 6.0以上权限拒绝打开权限设置界面的解决方法...

    本人使用小米手机,打开qq或者微信的时候,某个权限拒绝的话,会提示你开启,点击开启会跳转到app的权限设置界面,当然了,这是国内系统深层定制的原因,也就是说这个界面原声的android没有的!这里以小 ...

  9. App跳转到权限设置界面

    iOS 10 App跳转到权限设置界面(iOS10之前就不各个记录了) NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLSt ...

最新文章

  1. retinaface自定义增强
  2. python怎么读excel文件-Python读写Excel文件方法介绍
  3. Unity3D之预设
  4. Divan and bitwise operations 异或,同或,组合数学(1500)
  5. 10以内数的组成分解图_学前儿童如何学习20以内的加减法,收藏了
  6. spring学习(27):通过setter依赖注入
  7. 7-9 根据后序和中序遍历输出先序遍历 (10 分)
  8. python 钉钉机器人发送图片_利用Python自动发送钉钉数据消息
  9. 知识点026-rsync命令的使用
  10. MATLAB点与点之间连线
  11. mx350显卡天梯图_2020年显卡天梯图(2020.04月更新)
  12. EnableQ在企业员工满意度调查上的贡献
  13. 一文读懂Faster RCNN(大白话,超详细解析)
  14. 【第十届“泰迪杯”数据挖掘挑战赛】C题:疫情背景下的周边游需求图谱分析 问题一方案及Python实现
  15. 基于分解的MOEA的理解
  16. 沈阳农业大学计算机水平测试,沈阳农业大学(专业学位)计算机技术考研难吗
  17. 软考案例题目答题技巧
  18. HackerRank Truck Tour
  19. 希腊字母及对应的英文
  20. [NAS] Synology (群晖) DSM 7.X 挂载NTFS硬盘

热门文章

  1. 百度SEO站群网站右下角悬浮圆形图标客服菜单代码
  2. 如何获取百度地图密钥ak
  3. 小米13和vivo X90参数对比选哪个好
  4. Java实现地下城游戏(动态规划)
  5. git小乌龟pull时报Access Denied
  6. C++ switch用法
  7. Linux shell中使用sed 替换\n换行符 (多行边一行、一行变多行)
  8. nts包如何下周 php_PHP语言包下载安装与如何搭建PHP运行环境配置的教程
  9. python机器人编程教程入门_机器人操作系统(ROS)入门必备:机器人编程一学就会
  10. JavaScript交互式网页设计笔记