Android导航抽屉

本文所有代码均位于https://github.com/MADMAX110/CatChat
之前使用过标签页布局可以让用户在应用中轻松地导航。
当只有为数不多地几个类别屏幕,而且它们都在应用层次结构地同一级上,标签页布局就很适用。
抽屉导航可以实现更多选择,这是一个滑出式面板,包含了应用其他部分地链接。这可以把链接分组为不同的区段。

一、新建一个Email应用

在这里新建一个email应用创建一个抽屉导航,这个应用名为CatChat,这个导航抽屉将包含一个头部和一组选项,主要选项分别对应用户的收件箱,草稿箱,已发送邮件和废纸篓。这里还会为帮助和反馈选项包含一个单独的支持区段。
要实现一个导航抽屉,需要向活动的布局增加一个抽屉布局,这会定义一个可以打开和关闭的抽屉,它需要包含两个视图:一个对应主要内容,一个对应抽屉内容。
主要步骤:
1、为应用的内容创建基本片段和活动。
创建片段:IndexFragment、DraftsFragments、SentItemsFragment和TrashFragment。
创建活动:Helpactivity、FeedbackActivity。
2、创建抽屉的头部
抽屉头部布局为nav_header.xml,包含一个图像和一些文本。
3、创建抽屉的选项
为抽屉要显示的选项建立一个菜单menu_nav.xml。
4、创建导航抽屉
将为应用的主活动增加这个导航抽屉,让它显示头部和选项。然后编写活动代码控制抽屉的行为。

二、创建CatChat工程

如图创建新工程CatChat。
在这里插入图片描述
在carchat包中创建一个名为InboxFragment的新片段,然后把它的布局名命名为fragment_inbox.xml。更新其中IndexFragment.java和fragment_inbox.xml的代码:

package com.hafd.catchat;import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;public class InboxFragment extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.fragment_inbox, container, false);}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".InboxFragment"><!-- TODO: Update blank fragment layout --><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:text="inbox" /></LinearLayout>

创建DraftsFragment,其布局名为fragment_drafts.xml

package com.hafd.catchat;import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;public class DraftsFragment extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.fragment_inbox, container, false);}
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".DraftsFragment"><!-- TODO: Update blank fragment layout --><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:text="Drafts" /></FrameLayout>

创建SentItemsFragment

package com.hafd.catchat;import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;public class SentItemsFragment extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.fragment_inbox, container, false);}
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".SentItemsFragment"><!-- TODO: Update blank fragment layout --><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:text="Sent items" /></FrameLayout>

创建TrashFragment

package com.hafd.catchat;import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;public class TrashFragment extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.fragment_inbox, container, false);}
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".TrashFragment"><!-- TODO: Update blank fragment layout --><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:text="Trash" /></FrameLayout>

三、创建一个工具条布局

在layou文件夹中新建一个名为toolbar_main的布局。

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbarxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="?attr/colorPrimary"android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

更新AndroidManifest.xml中的 android:theme="@style/AppTheme"
更新values文件夹中的colors.xml,增加以下三个颜色:

    <color name="colorPrimary">#3F51B5</color><color name="colorPrimaryDark">#303F9F</color><color name="colorAccent">#FF4081</color>

更新应用的主题,在values文件夹中创建一个Values resource file,将文件命名为styles。

<?xml version="1.0" encoding="utf-8"?>
<resources><style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item></style>
</resources>

四、创建活动

在catchat包中创建一个名为HelpActivity的活动,其布局为activity_help。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".HelpActivity"><includelayout="@layout/toolbar_main"android:id="@+id/toolbar" /><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:text="Help"/></androidx.constraintlayout.widget.ConstraintLayout>
package com.hafd.catchat;import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;import android.os.Bundle;public class HelpActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_help);Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar);}
}

同理,在catchat包中创建一个名为FeedbackActivity的活动,其布局为activity_feedback

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".FeedbackActivity"><includelayout="@layout/toolbar_main"android:id="@+id/toolbar" /><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:text="Feedback"/></androidx.constraintlayout.widget.ConstraintLayout>
package com.hafd.catchat;import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;import android.os.Bundle;public class FeedbackActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_feedback);Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar);}}

五、创建导航抽屉

前面已经在工程中增加了需要的所有片段和活动,导航抽屉中的选项将连接到这些片段和活动。接下来要创建导航抽屉本身。
导航抽屉本身将包含一个导航抽屉头部和一组选项:
创建导航抽屉头部
在layout文件夹中新建一个名为nav_header的布局文件,这个布局包含一个图像和两个文本视图。
将下面一张图片增加到drawable文件夹中:
在这里插入图片描述
在string.xml中增加两个字符串资源:

    <string name="app_name">CatChat</string><string name="user_name">spot@catchat.com</string>

下面是完整的nav_header.xml代码

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="180dp"android:theme="@style/ThemeOverlay.AppCompat.Dark"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:scaleType="centerCrop"android:src="@drawable/kitten_small" /><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="match_parent"android:orientation="vertical"android:gravity="bottom|start"android:layout_margin="16dp" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/app_name"android:textAppearance="@style/TextAppearance.AppCompat.Body1"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/user_name"/></LinearLayout></FrameLayout>

导航抽屉从一个菜单资源文件得到它的选项列表。响应的代码与向应用条增加一组选项的代码是类似的。在res文件夹中创建一个menu文件夹,在该文件夹中创建一个menu_nav.xml的菜单资源文件。
需要先在string.xml中增加一些字符串资源:

    <string name="nav_inbox">Mesagez</string><string name="nav_drafts">Draftz</string><string name="nav_sent">Sent mesagez</string><string name="nav_trash">In da trash</string><string name="nav_support">Support</string><string name="nav_help">Halp</string><string name="nav_feedback">Giv us feedback</string>

接下来就可以开始创建菜单资源文件了,按你希望的显示顺序增加选项,下面是完整的menu_nav.xml的代码。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"><group android:checkableBehavior="single"><itemandroid:id="@+id/nav_inbox"android:icon="@android:drawable/sym_action_email"android:title="@string/nav_inbox"/><itemandroid:id="@+id/nav_drafts"android:icon="@android:drawable/ic_menu_edit"android:title="@string/nav_drafts"/><itemandroid:id="@+id/nav_sent"android:icon="@android:drawable/ic_menu_send"android:title="@string/nav_sent"/><itemandroid:id="@+id/nav_trash"android:icon="@android:drawable/ic_menu_delete"android:title="@string/nav_trash"/></group><item android:title="@string/nav_support"><menu><itemandroid:id="@+id/nav_help"android:icon="@android:drawable/ic_menu_help"android:title="@string/nav_help"/><itemandroid:id="@+id/nav_feedback"android:icon="@android:drawable/sym_action_email"android:title="@string/nav_feedback"/></menu></item>
</menu>

向活动布局中增加一个抽屉布局,作为它的根元素。这个抽屉布局需要包含两个内容:一个包含活动内容的视图或视图组作为它的第一个元素,以及一个定义抽屉的导航视图作为它的第二个元素。
完整的activity_main.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/drawer_layout"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><includelayout="@layout/toolbar_main"android:id="@+id/toolbar" /><FrameLayoutandroid:id="@+id/content_frame"android:layout_height="match_parent"android:layout_width="match_parent" /></LinearLayout><com.google.android.material.navigation.NavigationViewandroid:id="@+id/nav_view"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="start"app:headerLayout="@layout/nav_header"app:menu="@menu/menu_nav"/></androidx.drawerlayout.widget.DrawerLayout>

下面更新MainActivity

package com.hafd.catchat;import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import android.os.Bundle;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar);Fragment fragment = new InboxFragment();FragmentTransaction ft = getSupportFragmentManager().beginTransaction();ft.add(R.id.content_frame, fragment);ft.commit();}
}

六、增加抽屉开关

首先增加两个字符串资源来描述打开抽屉和关闭抽屉。

    <string name="nav_open_drawer">Open navigation drawer</string><string name="nav_close_drawer">Close navigation drawer</string>

完整的MainActivity

package com.hafd.catchat;import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.MenuItem;import com.google.android.material.navigation.NavigationView;public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar);//增加一个抽屉开关DrawerLayout drawer = (DrawerLayout)findViewById(R.id.drawer_layout);ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.nav_open_drawer, R.string.nav_close_drawer);drawer.addDrawerListener(toggle);toggle.syncState();//将活动注册为导航视图的一个监听器NavigationView navigationView = (NavigationView)findViewById(R.id.nav_view);navigationView.setNavigationItemSelectedListener(this);Fragment fragment = new InboxFragment();FragmentTransaction ft = getSupportFragmentManager().beginTransaction();ft.add(R.id.content_frame, fragment);ft.commit();}//用户单击某一项时会调用这个方法@Overridepublic boolean onNavigationItemSelected(@NonNull MenuItem item) {int id = item.getItemId();Fragment fragment = null;Intent intent = null;if (id == R.id.nav_drafts)fragment = new DraftsFragment();else if (id == R.id.nav_sent)fragment = new SentItemsFragment();else if (id == R.id.nav_trash)fragment = new TrashFragment();else if (id == R.id.nav_help)intent = new Intent(this, HelpActivity.class);else if (id == R.id.nav_feedback)intent = new Intent(this, FeedbackActivity.class);else fragment = new InboxFragment();//根据用户在抽屉中选择的选项,显示相应的片段和活动if (fragment != null) {FragmentTransaction ft = getSupportFragmentManager().beginTransaction();ft.replace(R.id.content_frame, fragment);ft.commit();}else startActivity(intent);DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);//用户单击某一项时关闭抽屉drawer.closeDrawer(GravityCompat.START);return true;}//后退时,关闭抽屉@Overridepublic void onBackPressed() {DrawerLayout drawer = (DrawerLayout)findViewById(R.id.drawer_layout);if (drawer.isDrawerOpen(GravityCompat.START))drawer.closeDrawer(GravityCompat.START);else super.onBackPressed();}
}

试一试
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/143229.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python(自4) xpath下载 lxml安装 lxml语法 使用方式

&#xff08;一&#xff09;安装 搜索xpath 讲解 XPath 教程 (w3school.com.cn) 一&#xff0c;下载地址 &#xff1a; https://chrome.zzzmh.cn/info/hgimnogjllphhhkhlmebbmlgjoejdpjl 二 &#xff0c;拖拽 &#xff08;二&#xff09;lxml安装 cmd 打开终端 cd pythond…

JAVA中使用CompletableFuture进行异步编程

JAVA中使用CompletableFuture进行异步编程 1、什么是CompletableFuture CompletableFuture 是 JDK8 提供的 Future 增强类&#xff0c;CompletableFuture 异步任务执行线程池&#xff0c;默认是把异步任 务都放在 ForkJoinPool 中执行。 在这种方式中&#xff0c;主线程不会…

Textpad 缺少Java编译和运行功能

一、问题 缺少Java编译和运行功能 二、处理方法 1、点击菜单Configure->Preferences 2、点击 Tools -> Add -> Java SDK Commands 3、点击应用和确认 三、结果

MATLAB算法实战应用案例精讲-【优化算法】Tiki-taka算法(TTA)(附MATLAB代码实现)

前言 Tiki-Taka战术体系曾经帮助西班牙国家队及巴塞罗那俱乐部取得了巨大的成功。然而,在2018年世界杯西班牙全场传球1100余次(职业比赛场均传球500次左右,西班牙场均800次左右)却被控球率只有20%的俄罗斯淘汰后,人们开始意识到大量机械的传球不但会让球迷觉得枯燥乏味,…

基于微信小程序的停车场预约收费小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

【数据结构】冒泡排序,快速排序的学习知识总结

目录 1、冒泡排序 1.1 算法思想 1.2 代码实现 方式一&#xff1a;顺序表 方式二&#xff1a;链表 2、快速排序 2.1 算法思想 2.2 代码实现 2.3 例题分析 1、冒泡排序 1.1 算法思想 冒泡排序是一种简单的排序算法&#xff0c;它的基本思想是从数组的第一个元素开始…

ahk系列——ahk_v2实现win10任意界面搜狗翻译

1、准备环境 win10或者以上系统安装ahkv2_64环境&#xff0c;安装包安装好后会有32和64位的unicode版本准备一个编译器&#xff0c;我用idea&#xff0c;不会ahk编程的我会把编译好的exe连接放到最后需要 联网 才能翻译 2、 使用方法 选中需要翻译的文字&#xff0c;然后ctr…

【OSCAR开源产业大会分论坛】开源大模型走向何方?

再过俩月&#xff0c;ChatGPT 即将迎来推出一周年纪念日。作为开历史先河的 AI 大模型&#xff0c;ChatGPT 像一针猛戳进千行百业中枢神经的兴奋剂&#xff0c;在全球掀起空前绝后的 AI 军备竞赛热潮。 近一年来&#xff0c;我们看到 GPT-3.5 完成向多模态的 GPT-4 进化&#x…

[Realtek sdk-3.4.14b]RTL8197FH-VG 2.4G to WAN吞吐量低于60%的问题分析及解决方案

问题描述 RTL8197FH-VG 2.4G wifi to WAN吞吐量低于65%的标准,正常2T2R的wifi 300Mbps x 65% = 195Mbps,但是实际只能跑到160Mbps,这个时候CPU的idl已经为0,sirq占用率达到98%左右 网络拓扑 一台PC通过2.4G WiFi连接到RTL8197FH-VG,另外一台PC直接通过WAN口连接到RTL8197…

【Verilog教程】6.7 Verilog流水线

关键词&#xff1a;流水线&#xff0c;乘法器 硬件描述语言的一个突出优点就是指令执行的并行性。多条语句能够在相同时钟周期内并行处理多个信号数据。 但是当数据串行输入时&#xff0c;指令执行的并行性并不能体现出其优势。而且很多时候有些计算并不能在一个或两个时钟周期…

美篇作文网教学资源源码-自带作文数据

非常漂亮的UI设计和页面排版&#xff01; 自适应手机pc端 页面内容均支持自定义 可以用来做网站矩阵&#xff0c;或者增强你其他网站板块&#xff0c;或者单独运营都可以。 可以通过广告方式变现&#xff0c;或者引流等等 友好的seo&#xff0c;更容易被浏览器收录 关注青狐…

LINUX|ubuntu常用指令

文章目录 查看IP显示当前路径下所有文件安装编译工具GCC、调试工具GDB、连接工具SSHmkdir 创建目录export命令显示当前系统定义的所有环境变量echo $PATH命令输出当前的PATH环境变量的值当前命令行添加环境变量&#xff0c;关闭失效&#xff0c;防止多版本库冲突时使用sudo su打…

新移科技发布基于联发科MT8390(Genio 700)平台的物联网 AI 核心板

新移科技研发的XY8390物联网 AI 核心板是一款高度集成、功能强大的平台&#xff0c;该核心板专为各种人工智能 (AI) 和物联网 (IoT) 用例而设计。 处理器采用了 Arm DynamIQ™ 技术&#xff0c;结合了高性能 Cortex-A78 内核和高能效 Cortex-A55 内核&#xff0c;并配备了 Arm …

二维平面扭曲的python实现及思路

二维平面扭曲的python实现及思路 缘起原理实现代码 缘起 工作需要&#xff0c;需要一个尝试改变设备布点的方法&#xff0c;在csdn闲逛时&#xff0c;偶然间发现这样的一篇文章 二维扭曲&#xff0c;参考这位博主的文章&#xff0c;我对其内容进行复现和进一步挖掘。若有侵权或…

四川玖璨电子商务有限公司抖音电商界的领跑者

在当今的电商市场中&#xff0c;四川玖璨电子商务有限公司以其卓越的表现和领先的地位&#xff0c;被广大消费者和业内人士所认可。作为抖音电商领跑者&#xff0c;该公司以其精湛的产品和服务&#xff0c;创新的营销策略&#xff0c;及客户至上的理念&#xff0c;成为这个充满…

爬取北京新发地当天货物信息并展示十五天价格变化(三)---获取物品十五天内的价格

。。。。。。。。。。。。。。。。。。。。。。 1.网页请求一下内容2.通过爬虫进行请求3.获取商品十五天详细数据并绘制折线图4.项目详细代码 1.网页请求一下内容 通过抓包我们发现一共七个参数 limit: 20 # 一页多少数据 current: …

JPA的注解@Field指定为Keyword失败,导致查询不到数据

一、背景 使用 jpa 对es操作&#xff0c;查询条件不生效&#xff0c;需求是批量查询课程编号。说白了&#xff0c;就是一个In集合的查询。在es里&#xff0c;如果是精准匹配是termQuery&#xff0c;比如&#xff1a; queryBuilder.filter(QueryBuilders.termQuery(“schoolId…

C++ placement new使用

placement new重载来原来的operator new&#xff0c;且placement new不能被即需重载 placement new是在原有的一块地址上继续创建一个对象&#xff0c;注意对象类型要一致&#xff0c;这样的操作的优势有两个&#xff1a; 1、不用花时间在找合适的空间存放新对象&#xff0c;…

华为云云耀云服务器L实例评测|使用华为云耀云服务器L实例的CentOS部署Docker并运行Tomcat应用

目录 前言 步骤1&#xff1a;登录到华为云耀云服务器L实例 步骤2&#xff1a;安装Docker 并验证Docker安装 步骤3&#xff1a;拉取Tomcat镜像并运行Tomcat容器 步骤4&#xff1a;放行8080端口 步骤5&#xff1a;访问tomcat 步骤6&#xff1a;管理Tomcat容器 小结 前言 …

【QT+CUDA】QT中使用cuda,QT+VS+cuda下载安装配置

文章目录 相关网址汇总&#xff1a; 一、软件安装&#xff1a;VS、CUDA、QT1 安装VS1.1 下载1.2 vs2017安装1.3 vs2015安装 2 安装CUDA2.1 下载2.2 安装2.3 测试2.4 卸载 3 安装QT3.1 下载3.2 安装 二、QT使用cuda1 .pro文件 三、常用操作1 NVIDIA控制面板&#xff1a;显卡、驱…