-
2021-05-09 02:58:56
详细资料参考以上链接,最下面是本人的一些实际操作,仅供参考:
已经将个人示例的系统版本和YUM库的配置列出来了
1、新建screen会话:直接输入screen命令或者screen -S [会话名称]
2、退出会话:按下组合键Ctrl+a并松开,此时screen窗口等待命令,然后按下d并松开,退出screen窗口。
3、查看当前系统所有screen会话:screen -ls
4、进入某个screen会话:screen -r [会话的PID]
5、在进入某个screen会话后,杀死screen会话:按下组合键Ctrl+a并松开,此时screen窗口等待命令,然后按下大写的K(即组合键:Shift+k)并松开,(系统提示是否要杀死)按下y确认杀死screen会话。
总结:当系统中只有一个screen会话时,输入:screen -r 即可进入这个会话,
当系统中有多个screen会话时,此时输入同样的命令,系统会列出当前所有screen回话,相当于命令:screen -ls
更多的关于screen的参数,可以参考手册:man screen
同时还要多多实际操作,会得到更多的切身体会,希望本文能够对感兴趣的读者有所帮助,欢迎转载,很愿意分享分享,共同成长,谢谢!
[root@localhost ~]# cat /etc/issue
CentOS release 5.4 (Final)
Kernel \r on an \m
[root@localhost ~]# cat /etc/yum.repos.d/CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.163.com/centos/5.5/os/i386/
enabled=1
gpgcheck=0
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[root@localhost ~]# screen
-bash: screen: command not found
[root@localhost ~]# yum -y install screen
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* addons: data.nicehosting.co.kr
* base: mirror01.idc.hinet.net
* extras: data.nicehosting.co.kr
* updates: data.nicehosting.co.kr
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package screen.x86_64 0:4.0.3-1.el5_4.1 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
==============================================================================================================================================================
Package Arch Version Repository Size
==============================================================================================================================================================
Installing:
screen x86_64 4.0.3-1.el5_4.1 base 571 k
Transaction Summary
==============================================================================================================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 571 k
Downloading Packages:
screen-4.0.3-1.el5_4.1.x86_64.rpm | 571 kB 00:01
warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID e8562897
base/gpgkey | 1.5 kB 00:00
Importing GPG key 0xE8562897 "CentOS-5 Key (CentOS 5 Official Signing Key) centos-5-key@centos.org>" from /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : screen 1/1
Installed:
screen.x86_64 0:4.0.3-1.el5_4.1
Complete!
[root@localhost ~]# screen
[root@localhost ~]# dateSun Apr 3 21:02:22 EDT 2011
[root@localhost ~]#
[detached]
[root@localhost ~]# screen -S 20110403
[root@localhost ~]# dateSun Apr 3 21:05:45 EDT 2011
[root@localhost ~]#
[detached]
[root@localhost ~]# screen -ls
There are screens on:
31550.pts-2.localhost (Detached)
31577.20110403 (Detached)
2 Sockets in /var/run/screen/S-root.
[root@localhost ~]# screen -r 31577
[root@localhost ~]# date
Sun Apr 3 21:05:45 EDT 2011
[root@localhost ~]#
[detached]
[root@localhost ~]# screen -r 31550
[root@localhost ~]# date
Sun Apr 3 21:02:22 EDT 2011
[root@localhost ~]#
[screen is terminating]
[root@localhost ~]# man screen
SCREEN(1) SCREEN(1)
NAME
screen - screen manager with VT100/ANSI terminal emulation
SYNOPSIS
screen [ -options ] [ cmd [ args ] ]
screen -r [[pid.]tty[.host]]
screen -r sessionowner/[[pid.]tty[.host]]
更多相关内容 -
Innovative Exams Screensharing.crx
2021-10-01 23:03:15CKA考试必备,google谷歌浏览器插件 -
QNX Screen Developers Guide
2018-09-18 12:10:34QNX操作系统的Screen开发帮助文档,包含OpenGL,EGL等的操作 -
thinkpad热键屏显fn热键On screen display
2018-11-23 16:50:28完成带on screen display功能的hotkey,功能和联想的hotkey类似。支持ThinkPad屏幕亮度调节的显示,音量调节,大写键,麦克风,触摸板禁用开启,CPU使用率上升,Fn组合键显示,电池电量等等的显示。支持手动,自动... -
screen会话安装需要的rpm包
2018-07-26 22:59:59在linux中会需要将任务或脚本放到后台跑,但需要看实时日志,就可以选择screen会话,直接rpm -ivh 安装就可以,不需要依赖其他的资源 -
台达触摸屏老版软件ScreenEditor 1.05.78
2019-04-23 08:35:49在官网上很难找到老版台达触摸屏软件,而有些老机,你就得用老软件才能搞定 -
Setup Screen Capturer Recorder v0.12.10.exe
2018-11-15 16:04:47http://sourceforge.net/projects/screencapturer/files/ 可用于FFmpeg录屏录音 -
台达B系列人机界面编程软件ScreenEditor 2.00.rar
2019-09-20 04:28:36台达B系列人机界面编程软件ScreenEditor 2.00rar,台达B系列人机界面编程软件ScreenEditor 2.00.20 -
台达A系列人机界面编程软件ScreenEditor 1.05.rar
2019-09-17 11:24:50台达A系列人机界面编程软件ScreenEditor 1.05rar,台达A系列人机界面编程软件ScreenEditor 1.05.83 -
screen对象(教辅)
2022-05-31 20:44:07screen对象(教辅)screen对象(教辅)screen对象(教辅)screen对象(教辅)screen对象(教辅)screen对象(教辅)screen对象(教辅)screen对象(教辅)screen对象(教辅)screen对象(教辅)screen对象(教辅)... -
FANUC CNC Screen Display Function_ FOCAS2Ethernet
2015-09-16 21:16:20FANUC CNC Screen Display Function_ FOCAS2Ethernet -
做图修图软件【Screen Gif】录制GIF
2022-06-25 07:43:48做图修图软件【Screen Gif】录制GIF做图修图软件【Screen Gif】录制GIF做图修图软件【Screen Gif】录制GIF做图修图软件【Screen Gif】录制GIF做图修图软件【Screen Gif】录制GIF做图修图软件【Screen Gif】录制GIF... -
音视频编辑工具【Screentogif】录制软件
2022-05-14 17:29:32音视频编辑工具【Screentogif】录制软件音视频编辑工具【Screentogif】录制软件音视频编辑工具【Screentogif】录制软件音视频编辑工具【Screentogif】录制软件音视频编辑工具【Screentogif】录制软件音视频编辑工具... -
IOS使用Launch Screen.storyboard制作广告启动界面
2016-03-14 11:46:13IOS制作启动广告图,兼容LaunchImage加载启动图和LaunchScreen启动,详细讲解可以查看博客:http://blog.csdn.net/wx_jin/article/details/50617041 -
C#实现SplashScreen
2013-11-12 08:56:44C#实现SplashScreen,不同于VB.NET,需要在MAIN中控制加载界面的顺序。 -
Linux命令之screen命令
2022-01-10 17:41:00Screen是一个全屏窗口管理器,它在多个进程(通常是交互式shell)之间多路传输物理终端。每个虚拟终端提供DEC VT100终端的功能,以及ANSI X3的几个控制功能。64(ISO 6429)和ISO 2022标准(例如,插入/删除行和支持...一、screen命令简介
Screen是一个全屏窗口管理器,它在多个进程(通常是交互式shell)之间多路传输物理终端。每个虚拟终端提供DEC VT100终端的功能,以及ANSI X3的几个控制功能。64(ISO 6429)和ISO 2022标准(例如,插入/删除行和支持多个字符集)。每个虚拟终端都有一个回滚历史缓冲区和一个复制粘贴机制,允许用户在窗口之间移动文本区域。当调用screen时,它会创建一个包含shell(或指定命令)的窗口,然后避开您的方式,以便您可以正常使用该程序。然后,您可以随时创建包含其他程序(包括更多shell)的新(全屏)窗口、关闭当前窗口、查看活动窗口列表、打开和关闭输出日志、在窗口之间复制文本、查看滚动历史记录、在窗口之间切换,等等。所有窗口都完全独立运行其程序。当窗口当前不可见时,甚至当整个屏幕会话与用户终端分离时,程序仍继续运行。
二、使用示例
1、安装screen命令
[root@s145]~# yum install -y screen
Installed:
screen.x86_64 0:4.1.0-0.27.20120314git3c2946.el7_9
Complete!2、列出当前所有的session
[root@s145]~# screen -ls
No Sockets found in /var/run/screen/S-root.3、创建一个新的窗口
[root@s145]~# screen -S test
…
[root@s145]~# screen -ls
There is a screen on:
2877.test (Attached)
1 Socket in /var/run/screen/S-root.
[root@s145]~#4、退出当前窗口
可以使用ctrl+a,然后输入d,退出当前窗口,也可以使用screen -d退出当前窗口。如果要结束只窗口使用exit。
5、重新连接窗口
使用screen -r id或者名称重新连接会话,重新连接会话前要求会话的状态为Detached。
6、清除dead状态窗口
如果会话窗口被kill,状态转为dead无法连接,可以使用screen -wipe命令清除会话窗口。
7、会话锁定与解锁
输入ctl+a s锁定会话,锁定之后输入任何内容屏幕都无反应,输入ctl+a q之后解锁,虽然屏幕锁定的时候无反应但是会接受输入的命令,解锁后会全部执行,切勿输入危险命令,所以建议使用ctl+a x锁定。
输入ctl+a x锁定会话,需要输入用户密码后才可以解锁。
8、会话共享
9、给screen窗口发送命令
[root@s145]~# date && screen -S test -X screen ls > /tmp/1.txt
Tue Jan 11 17:12:24 CST 2022
[root@s145]~# screen -S test -X screen sh /root/test.sh
10、屏幕分屏
使用快捷键分屏正常,但是分屏出来的都无法输入命令,如果知道的兄弟可以留言告知下原因,求指点,谢谢!
11、实践示例
- 编写一个持续输出的脚本
[root@s145]~# cat test.sh #!/bin/bash \ while true do echo "输出`date +%F-%T`" sleep 10 done
- 创建一个screen窗口
[root@s145]~# screen -S echotest
- 执行test.sh脚本
- 在其他会话使echotest窗口离线
[root@s145]~# screen -d echotest
[3405.echotest detached.]
- 重连会话
三、使用语法及参数说明
1、使用语法
用法:screen [-opts] [cmd [args]]
或者:screen -r [host.tty]2、参数说明
参数 参数说明 -4 仅将主机名解析为IPv4地址。 -6 仅将主机名解析为IPv6地址。 -a 强制将所有功能放入每个窗口的termcap。 -A-[r r] -c文件 读取配置文件而不是’。screenrc’。 -d(-r) 分离别处运行的屏幕(并在此处重新连接)。 -dmS名称 作为守护进程启动:分离模式下的屏幕会话。 -D(-r) 分离并注销远程(并在此处重新连接)。 -D-RR 做任何需要的事情来获得屏幕会话。 -e xy 更改命令字符。 -f 流量控制打开,-fn=关闭,-fa=自动。 -h行 设置回滚历史缓冲区的大小。 -i 流量控制开启时,中断输出更快。 -l 登录模式打开(更新/var/run/utmp),-ln=off。 -ls[match] 什么都不做,只列出我们的SockDir[关于可能的匹配],同-list -list 什么都不做,只列出我们的SockDir[关于可能的匹配]。 -L 打开输出日志记录。 -m 忽略$STY变量,创建一个新的屏幕会话。 -O 选择最佳输出,而不是精确的vt100模拟。 -p windows 如果命名窗口存在,则预选该窗口。 -q 安静启动。如果不成功,则使用非零返回代码退出。 -Q 命令将向查询进程的标准输出发送响应。 -r[session] 重新连接到分离的屏幕进程。 -R 如果可能,重新连接,否则启动新会话。 -s shell 要执行的shell,而不是$shell。 -S sockname 将此会话命名为。sockname而不是<主机>。 -t title 设置标题。(窗口名称)。 -T term 将术语用作windows的$term,而不是“屏幕”。 -U 告诉屏幕使用UTF-8编码。 -v 打印“屏幕版本4.01.00devel(GNU)2006年5月2日”。 -wipe[match] 什么都不做,只需清理SockDir[可能的匹配项]。 -x 连接到未分离的屏幕上。(多显示模式)。 -X 在指定会话中作为屏幕命令执行。 3、Screen命令中用到的快捷键
- Ctrl+a c :创建窗口
- Ctrl+a w :窗口列表
- Ctrl+a n :下一个窗口
- Ctrl+a p :上一个窗口
- Ctrl+a 0-9 :在第0个窗口和第9个窗口之间切换
- Ctrl+a K(大写) :关闭当前窗口,并且切换到下一个窗口(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)
- exit :关闭当前窗口,并且切换到下一个窗口(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)
- Ctrl+a d :退出当前终端,返回加载screen前的shell命令状态
-
ABAP中SELECTION-SCREEN用法
2021-06-18 10:39:38SELECTION-SCREEN屏幕范例 1. SELECTIION-SCREEN的語法: SELECTION-SCREENBEGINOFSCREENSCR. ... SELECTION-SCREENENDOFSCREENSCR. 2. 通过SELECTION-SCREEN定义窗体。(当从一个主屏幕中来调用基程序中的另一...1. SELECTIION-SCREEN的語法:
SELECTION-SCREEN BEGIN OF SCREEN SCR.
...
SELECTION-SCREEN END OF SCREEN SCR.2. 通过SELECTION-SCREEN定义窗体。(当从一个主屏幕中来调用基程序中的另一个窗体时,必须使用CALL SELECTION-SCREEN的方法)
SELECTION-SCREEN BEGIN OF SCREEN 123 AS WINDOW TITLE TEXT-001.
PARAMETERS:S_MATNR LIKE MARA-MATNR.
PARAMETERS:TYPE AS CHECKBOX.
SELECTION-SCREEN END OF SCREEN 123.
CALL SCREEN 123
STARTING AT 10 10
ENDING AT 80 10. "调用SELECTION-SCREEN3. 通过SELECTION-SCREEN调用Include screen.
PARAMETERS:TYPE AS CHECKBOX. "第一个窗体元素
CALL SELECTION-SCREEN 123."SELECTION-SCREEN调用另一个窗体
SELECTION-SCREEN BEGIN OF SCREEN 123 AS WINDOW TITLE TEXT-001.
PARAMETERS:MATNR LIKE MARA-MATNR.
SELECTION-SCREEN END OF SCREEN 123.4.SELECTION-SCREEN BEGIN OF SCREEN scr AS SUBSCREEN.
该语法用于定义一个Subscreen, Subscreen主要应用于Screen Painter所创建屏幕。
5.
SELECTION-SCREEN BEGIN OF BLOCK BLOCK.
...
SELECTION-SCREEN END OF BLOCK.该语法在屏幕中定义一个BLOCK,其扩展语法包括:
...WITH FRAME:创建一个框架。
...TITLE title:创建一个带标题的框架。
...NO INTERVALS:所创建的框架中限制SELECT 只有一个输入项。
DATA MAT LIKE MARA-MATNR.
*不包含扩展语法
SELECTION-SCREEN BEGIN OF BLOCK BLOCK1.
SELECT-OPTIONS:MATNR1 FOR MAT.
SELECTION-SCREEN END OF BLOCK BLOCK1.
*包含框架
SELECTION-SCREEN BEGIN OF BLOCK BLOCK2 WITH FRAME.
SELECT-OPTIONS:MATNR2 FOR MAT.
SELECTION-SCREEN END OF BLOCK BLOCK2.
*包含框架及标头
SELECTION-SCREEN BEGIN OF BLOCK BLOCK3 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:MATNR3 FOR MAT.
SELECTION-SCREEN END OF BLOCK BLOCK3.
*包含框架及标头且只有一个输入框
SELECTION-SCREEN BEGIN OF BLOCK BLOCK4 WITH FRAME TITLE TEXT-002 NO INTERVALS.
SELECT-OPTIONS:MATNR4 FOR MAT.
SELECTION-SCREEN END OF BLOCK BLOCK4.6. SELECTION-SCREEN INCLUDE
参照某一个已经定义的屏幕元素来创建.
CALL SCREEN 1234.
SELECTION-SCREEN BEGIN OF SCREEN 1111.
SELECTION-SCREEN BEGIN OF BLOCK BLK1.
SELECT-OPTIONS SEL0 FOR SY-REPID.
SELECTION-SCREEN ULINE. "换行线
PARAMETERS PAR0.
SELECTION-SCREEN END OF BLOCK BLK1.
SELECTION-SCREEN END OF SCREEN 1111.
SELECTION-SCREEN BEGIN OF SCREEN 1234.
SELECTION-SCREEN INCLUDE BLOCKS BLK1."參照SCREEN 111中的BLOCK
SELECTION-SCREEN END OF SCREEN 1234.7. SELECTION-SCREEN ULINE. 輸出橫線,必須用在BLOCK中才生效.
8. SELECTION-SCREEN SKIP n. 在BLOCK中產生換行.
9. SELECTION-SCREEN POSITION pos. 在BLOCK中产生空格.
10. 将所产生的屏幕元素控制在一行.
SELECTION-SCREEN BEGIN OF LINE.
...
SELECTION-SCREEN END OF LINE.11. AT SELECTION-SCREEN . 用于屏幕输入检验,其扩展语法如下:
...ON <Field>: 该语法用于控制屏幕元素输入时的遇错处理,检查某具体输入字段
(SELECT-OPTIONS 或PARAMETERS)是否完整或正确,若输入有错或不满足条件,其他字段会变灰色直到该字段输入正确....ON RADIOBUTTON GROUP <radio>:按制RadioButto组值的输入;
...ON BLOCK <block>:控制框架中的屏幕元素值的输入;
...OUTPUT:用于屏幕输出时的各屏幕元素值的管控;
...ON EXIT-COMMAND:用于响应"Back"、"Canne"、及"Exit"等事件。
SELECT-OPTIONS SEL0 FOR SY-TVAR0.SELECTION-SCREEN BEGIN OF BLOCK BL0.
SELECT-OPTIONS SEL1 FOR SY-TVAR1.SELECTION-SCREEN BEGIN OF BLOCK BL1.
PARAMETERS P1 RADIOBUTTON GROUP RAD1.
PARAMETERS P2 RADIOBUTTON GROUP RAD1.SELECTION-SCREEN BEGIN OF BLOCK BL2.
PARAMETERS P3.
SELECTION-SCREEN END OF BLOCK BL2.SELECT-OPTIONS SEL2 FOR SY-TVAR2.
SELECTION-SCREEN END OF BLOCK BL1.
SELECTION-SCREEN END OF BLOCK BL0.
AT SELECTION-SCREEN ON SEL1.
AT SELECTION-SCREEN ON RADIOBUTTON GROUP RAD1.
AT SELECTION-SCREEN ON P3.
AT SELECTION-SCREEN ON BLOCK BL1.
AT SELECTION-SCREEN ON BLOCK BL2.12.SELECTION-SCREEN PUSHBUTTION fmt name USER-COMMAND ucom
用于在SELECTION SCREEN中产生一个按钮(pushbutton),fmt name为定义该按钮的属性值。可以对其赋值描述及添加图标,USER-COMMAND ucom定义该按钮在Screen中的组件名,
对按钮属性赋值可以包括两种方式。
REPORT Y001.
INCLUDE <ICON>.
SELECTION-SCREEN PUSHBUTTON /1(20) PUBU1 USER-COMMAND ABCD.
SELECTION-SCREEN SKIP."加入空行以便区分
SELECTION-SCREEN PUSHBUTTON /1(20) PUBU2 USER-COMMAND ABCD.
AT SELECTION-SCREEN OUTPUT.
MOVE 'My Button' TO PUBU1."定义第一个按钮并赋值描述WRITE ICON_GRAPHICS AS ICON TO PUBU2."定义第二个按钮并添加图标
CONCATENATE PUBU2 'MY BUTTON'INTO PUBU2 SEPARATED BY SPACE.(若要更换按钮图标,请参考 Tcode: ICON)
13. SELECTION-SCREEN COMMENT fmt name.
用于定义或修改本地元素 的注释,包括Parameter、Checkbox Button等。例如Checkbox Button的描述,其在Selection texts中最长字段只有30位,通过SELECTION-SCREEN COMMENT语法可以按Text Symbols设置值对其属性重新定义。
REPORT Y001.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (40) TEXT-A01 FOR FIELD PARM.
SELECTION-SCREEN POSITION 45.
PARAMETERS PARM LIKE MARA-MATNR.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:TYPE AS CHECKBOX.
SELECTION-SCREEN COMMENT (40) TEXT-A02 FOR FIELD TYPE.
SELECTION-SCREEN END OF LINE.14. SELECTION-SCREEN FUNCTION KEY n.
用于在工具栏上新增一个功能按钮。该按钮的定义保存在系统结构体SSCRFIELDS中,n为一个整数的序数,例如当n等于1时,其按钮描述保存在字段SSCRFIELDS-FUNCTXT_01中,其按钮对象命名为“FC01",保存在字段SSCRFIELDS-UCOMM中。具体使用方法如下:
REPORT Y001.
PARAMETERS PARM LIKE MARA-MATNR.TABLES SSCRFIELDS.
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN FUNCTION KEY 2.INITIALIZATION.
MOVE 'BUTTON1' TO SSCRFIELDS-FUNCTXT_01.
MOVE 'BUTTON2' TO SSCRFIELDS-FUNCTXT_02.
REPORT Y001.
PARAMETERS PARM LIKE MARA-MATNR.TABLES SSCRFIELDS.
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN FUNCTION KEY 2.
SELECTION-SCREEN FUNCTION KEY 3.
INITIALIZATION.
MOVE 'BUTTON1' TO SSCRFIELDS-FUNCTXT_01.
MOVE 'BUTTON2' TO SSCRFIELDS-FUNCTXT_02.
MOVE 'BUTTON3' TO SSCRFIELDS-FUNCTXT_03.
AT SELECTION-SCREEN.
IF SSCRFIELDS-UCOMM = 'FC01'.
CALL SELECTION-SCREEN 123.
ENDIF.对工具栏按钮的操作同样通过屏幕时间来实现,如上所述,对象命我为”FC01",保存存在字段SSCRFIELDS-UCOMM中。
TYPE-POOLS ICON.
TABLES SSCRFIELDS.
DATA FUNCTXT TYPE SMP_DYNTXT."SMP_DYNTXT(菜单制作器:动态文本的程序接口)
PARAMETERS: P_CARRID TYPE S_CARR_ID,
P_CITYFR TYPE S_FROM_CIT.
SELECTION-SCREEN: FUNCTION KEY 1,
FUNCTION KEY 2.
INITIALIZATION. "屏幕初始化
FUNCTXT-ICON_ID = ICON_WS_PLANE."文本字段中的图标(替换显示,别名)
FUNCTXT-QUICKINFO = 'Preselected Carrier'."菜单制作器:信息文本 (4.0),滑鼠移去过去显示的信息TIP
FUNCTXT-ICON_TEXT = 'LH'."菜单制作器:图标文本 (4.0),菜单名称
SSCRFIELDS-FUNCTXT_01 = FUNCTXT.
FUNCTXT-ICON_TEXT = 'UA'.
SSCRFIELDS-FUNCTXT_02 = FUNCTXT.
AT SELECTION-SCREEN.
CASE SSCRFIELDS-UCOMM.
WHEN 'FC01'.
P_CARRID = 'LH'.
P_CITYFR = 'Frankfurt'.
WHEN 'FC02'.
P_CARRID = 'UA'.
P_CITYFR = 'Chicago'.
ENDCASE.15.SELECTION-SCREEN BEGIN OF TABBED BLOCK <block> FOR n LINES.
用于在屏幕上定义一个分页控件(tab),每个页签都是由一个子屏幕控制,n代表分页控件的高度,屏幕载入时必须先通过INTIALIZATION事件对其司性初始化,如定义两个分页的TAB控件,具体如下:
REPORT Y001.
TABLES:MARA.
*定义子屏幕100
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK A1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:S_MATNR FOR MARA-MATNR NO INTERVALS.
SELECTION-SCREEN SKIP 1.
PARAMETERS:TYPE AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK A1.
SELECTION-SCREEN END OF SCREEN 100.
*定义子屏幕200
SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
PARAMETERS:S_MATNR2 LIKE MARA-MATNR.
SELECTION-SCREEN END OF SCREEN 200.
*定义一个TAB空间,取名为MYTAB,控件高为5,共人两个选项卡BUTTON1\BUTTON2
*两个选项卡的功能代码分别为PUSH1\PUSH2
SELECTION-SCREEN:BEGIN OF TABBED BLOCK MYTAB FOR 5 LINES,*指框框高度為5LINES.TAB (20) BUTTON1 USER-COMMAND PUSH1,
TAB (20) BUTTON2 USER-COMMAND PUSH2,
END OF BLOCK MYTAB.
INITIALIZATION.
BUTTON1 = TEXT-010.
BUTTON2 = TEXT-020.
MYTAB-PROG = SY-REPID.
MYTAB-DYNNR = 100.
*TAB控件选项卡单击事件,选择不同选项卡显示不同子屏幕
AT SELECTION-SCREEN.
CASE SY-UCOMM.
WHEN 'PUSH1'.
MYTAB-DYNNR = 100.
MYTAB-ACTIVETAB = 'BUTTON1'.
WHEN 'PUSH2'.
MYTAB-DYNNR = 200.
MYTAB-ACTIVETAB = 'BUTTON2'.
ENDCASE.
TABLES SSCRFIELDS.
* 定义子屏幕为100
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-010.
PARAMETERS: P1(10) TYPE C,
P2(10) TYPE C,
P3(10) TYPE C.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN END OF SCREEN 100.
* 定义子屏幕为200
SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-020.
PARAMETERS: Q1(10) TYPE C,
Q2(10) TYPE C,
Q3(10) TYPE C.
SELECTION-SCREEN END OF BLOCK B2.
SELECTION-SCREEN END OF SCREEN 200.
*定义子屏幕为300
SELECTION-SCREEN BEGIN OF SCREEN 300 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-030.
PARAMETERS: R1(10) TYPE C,
R2(10) TYPE C,
R3(10) TYPE C.
SELECTION-SCREEN END OF BLOCK B3.
SELECTION-SCREEN END OF SCREEN 300.
* STANDARD SELECTION SCREEN
SELECTION-SCREEN: FUNCTION KEY 1, "工具栏按钮
FUNCTION KEY 2.
SELECTION-SCREEN: BEGIN OF TABBED BLOCK SUB FOR 10 LINES,
END OF BLOCK SUB.
INITIALIZATION.
SSCRFIELDS-FUNCTXT_01 = '@0D@'. "按钮描述字段,图标形貌
SSCRFIELDS-FUNCTXT_02 = '@0E@'. "按钮描述字段,图标形貌
SUB-PROG = SY-REPID. "必选项
SUB-DYNNR = 100.
AT SELECTION-SCREEN.
CASE SY-DYNNR. "当前显示屏幕的名称
WHEN 100.
IF SSCRFIELDS-UCOMM = 'FC01'. "触发事件的TOOL BAR CONTROL
SUB-DYNNR = 300. "指定显示哪个屏幕
ELSEIF SSCRFIELDS-UCOMM = 'FC02'.
SUB-DYNNR = 200.
ENDIF.
WHEN 200.
IF SSCRFIELDS-UCOMM = 'FC01'.
SUB-DYNNR = 100.
ELSEIF SSCRFIELDS-UCOMM = 'FC02'.
SUB-DYNNR = 300.
ENDIF.
WHEN 300.
IF SSCRFIELDS-UCOMM = 'FC01'.
SUB-DYNNR = 200.
ELSEIF SSCRFIELDS-UCOMM = 'FC02'.
SUB-DYNNR = 100.
ENDIF.
ENDCASE.
START-OF-SELECTION.
WRITE: / 'P1:', P1,'Q1:', Q1, 'R1:', R1,
/ 'P2:', P2,'Q2:', Q2, 'R2:', R2,
/ 'P3:', P3,'Q3:', Q3, 'R3:', R3.REPORT Y001.
TABLES SSCRFIELDS.
SELECTION-SCREEN:
ULINE /1(83),
COMMENT /30(30) TEXT-001,
ULINE /1(83),
SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 2(15) TXT1.
PARAMETER OUT(3) TYPE C.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN:
SKIP 1,
BEGIN OF BLOCK BLK WITH FRAME TITLE T1,
BEGIN OF LINE,
PUSHBUTTON 2(10) BTN1 USER-COMMAND COMM1,
PUSHBUTTON 12(10) BTN2 USER-COMMAND COMM2,
PUSHBUTTON 22(10) BTN3 USER-COMMAND COMM3,
END OF LINE,
END OF BLOCK BLK.
*&---------------------------------------------------------------------*
INITIALIZATION.
TXT1 = '总分: '.
T1 = '给选择屏幕添加按钮'.
BTN1 = '汤姆'.
BTN2 = '露西'.
BTN3 = '韩梅梅'. -
Android 12 适配指南——SplashScreen
2022-03-16 11:30:46Android 12(API 31)引入了 SplashScreen 相关API,用于开发Android应用的启动页。 SplashScreen相关API的引入影响在Andorid 12设备上运行的所有应用。若开发者未进行SplashScreen的适配工作,在应用冷启动和温启动...Android 12(API 31)引入了
SplashScreen
相关API,用于开发Android应用的启动页。-
影响在Andorid 12设备上运行的所有应用:
SplashScreen相关API的引入影响在Andorid 12设备上运行的所有应用
。这一点对于应用开发者来说,无论你的应用targetSdkVersion
版本是多少,均需要进行SplashScreen
的适配工作。 -
必须进行SplashScreen的适配工作:
若开发者未进行SplashScreen的适配工作,当应用运行于Android 12及以上版本的设备,在应用的冷启动 或 温启动
时,Android系统都会构造一个默认启动动画(默认启动动画由应用ICON
+应用主题的windowBackground
内容构成)。
因此,对于未进行SplashScreen
API适配工作的应用,在冷启动和温启动时,可能会呈现两个启动页先后出现的情况
(Android SplashScreen启动页 + Android应用自定义开发的启动页或引导页)。
先看一下Andorid官方给出的
SplashScreen
启动页运行效果。
- SplashScreen 使用方式
- SplashScreen 启动页构成
- SplashScreen 使用举例源码下载
一、使用方式
按照官方相关迁移文档,我开发了以下启动页的运行效果。
下面以我开发的这个案例效果为例,举例说明SplashScreen相关API的使用方式:
- build.gradle 添加相关依赖;
- 自定义SplashScreen主题;
- 自定义启动页Activity;
1.1 build.gradle
build.gradle 中:
- 更改 compileSdkVersion 的版本;
- 引入 splashscreen 相关依赖 ;
android { // 更改 compileSdkVersion 的版本 compileSdk 31 } dependencies { // 引入 splashscreen 相关依赖 implementation "androidx.core:core-splashscreen:1.0.0-alpha02" }
1.2 SplashScreen主题
创建一个父级为 Theme.SplashScreen 的主题,并将 对应的主题设置到启动页 Activity 应用。
- 创建自定义的 SplashScreen 主题;
- SplashScreen 主题应用到对应的Activity;
创建 SplashScreen 主题:
直接给出style的代码举例,主题中各属性均给出了明确的注释说明,不再进行重复说明。
这里特别强调一下,windowSplashScreenAnimatedIcon
这个属性,可以是一个图片、帧动画、animated-vector动画
等。<!-- Splash启动页Style --> <style name="Theme.SplashScreen.Demo" parent="Theme.SplashScreen"> <!--启动画面背景颜色--> <item name="windowSplashScreenBackground">@color/splashscreen_bg</item> <!-- 启动画面icon图标:这里可以是图片、帧动画等--> <item name="windowSplashScreenAnimatedIcon">@drawable/splash_anim_icon</item> <item name="windowSplashScreenIconBackgroundColor">@color/splashscreen_icon_bg</item> <!-- icon动画在关闭之前显示的时长:最长时间为1000毫秒--> <item name="windowSplashScreenAnimationDuration">1000</item> <!-- 启动画面底部的 Brand 图片--> <item name="android:windowSplashScreenBrandingImage">@drawable/brand_img</item> <!-- Splash退出后的主题--> <item name="postSplashScreenTheme">@style/Theme.Android12_Splash</item> </style>
SplashScreen 主题应用到启动页Activity
这个启动页我自定义为
SplashActivity
。<activity android:name=".SplashActivity" android:exported="true" android:theme="@style/Theme.SplashScreen.Demo"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
1.3 启动页Activity
上文提到,这个启动页的Activity,我自定定义为
SplashActivity
,源码如下:class SplashActivity : AppCompatActivity() { val TAG: String = "CoroutineScope" // 协程( 了解协程的使用,可参考:https://xiaxl.blog.csdn.net/article/details/123383727 ) lateinit var mCoroutineScope: CoroutineScope // 数据 private var mKeepOnAtomicBool = AtomicBoolean(true) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) Log.d(TAG, "----onCreate----") // 初始化操作(必须放在setContentView()之前) val mSplashScreen = installSplashScreen() // setContentView(可以省略) setContentView(R.layout.activity_splash) // 每次UI绘制前,会判断 Splash 是否有必要继续展示在屏幕上;直到不再满足条件时,隐藏Splash。 mSplashScreen!!.setKeepVisibleCondition(object : SplashScreen.KeepOnScreenCondition { override fun shouldKeepOnScreen(): Boolean { return mKeepOnAtomicBool.get() } }) // Splash展示完毕的监听方法 mSplashScreen!!.setOnExitAnimationListener(object : SplashScreen.OnExitAnimationListener { override fun onSplashScreenExit(splashScreenViewProvider: SplashScreenViewProvider) { startSplashScreenExit(splashScreenViewProvider) } }) // 创建 CoroutineScope (用于管理CoroutineScope中的所有协程) mCoroutineScope = CoroutineScope(Job() + Dispatchers.Main) mCoroutineScope.launch(Dispatchers.IO) { Log.d(TAG, "----launch----") // TODO 异步线程 // Splash展示2秒钟 delay(2000) // Splash 展示完毕 mKeepOnAtomicBool.compareAndSet(true, false) } } /** * onDestroy */ override fun onDestroy() { super.onDestroy() Log.d(TAG, "----onDestroy----") // 当 Activity 销毁的时候取消该 Scope 管理的所有协程。 mCoroutineScope.cancel() } /** * SplashScreen 退出时执行 */ private fun startSplashScreenExit(splashScreenViewProvider: SplashScreenViewProvider) { Log.d(TAG, "----onSplashScreenExit----") // splashScreenView val splashScreenView = splashScreenViewProvider.view // splashIconView val iconView = splashScreenViewProvider.iconView /** * ScreenView alpha 动画 */ val splashAlphaAnim = ObjectAnimator.ofFloat(splashScreenView, View.ALPHA, 1f, 0f) splashAlphaAnim.duration = 500 splashAlphaAnim.interpolator = FastOutLinearInInterpolator() /** * iconView 向下移动的动画 */ val translationY = ObjectAnimator.ofFloat( iconView, View.TRANSLATION_Y, iconView.translationY, splashScreenView.height.toFloat() ) translationY.duration = 500 translationY.interpolator = FastOutLinearInInterpolator() // 合并渐变动画 & 下移动画 val animatorSet = AnimatorSet() animatorSet.playTogether(translationY, splashAlphaAnim) // 动画结束时调用的方法 animatorSet.doOnEnd { onAnimEnd(splashScreenViewProvider) } // 开启动画 animatorSet.start() } /** * 当动画结束 */ private fun onAnimEnd(splashScreenViewProvider: SplashScreenViewProvider) { //移除监听 splashScreenViewProvider.remove() //跳转下个页面 // 进入主界面 Log.d(TAG, "----startActivity MainActivity----") startActivity(Intent(this@SplashActivity, MainActivity::class.java)) this@SplashActivity.finish() Log.d(TAG, "----SplashActivity finish----") // Activity 退场动画 overridePendingTransition(0, R.anim.activity_out) } }
二、SplashScreen构成
仍然以本案例的代码效果进行举例说明。
- SplashScreen 构成
- SplashScreen 中心ICON的大小
SplashScreen 构成
前边介绍SplashScreen主题代码时,提到过我自定的
Theme.SplashScreen.Demo
主题:<!-- Splash启动页Style --> <style name="Theme.SplashScreen.Demo" parent="Theme.SplashScreen"> <!--启动画面背景颜色--> <item name="windowSplashScreenBackground">@color/splashscreen_bg</item> <!-- 启动画面icon图标:这里可以是图片、帧动画等--> <item name="windowSplashScreenAnimatedIcon">@drawable/splash_anim_icon</item> <item name="windowSplashScreenIconBackgroundColor">@color/splashscreen_icon_bg</item> <!-- icon动画在关闭之前显示的时长:最长时间为1000毫秒--> <item name="windowSplashScreenAnimationDuration">1000</item> <!-- 启动画面底部的 Brand 图片--> <item name="android:windowSplashScreenBrandingImage">@drawable/brand_img</item> <!-- Splash退出后的主题--> <item name="postSplashScreenTheme">@style/Theme.Android12_Splash</item> </style>
其对应的属性位置如下图所示:
SplashScreen 中心ICON大小
关于
SplashScreen 中心ICON的dp大小
,我们需查看Android X的对应源码:三、案例源码
本案例中SplashScreen案例源代码下载地址如下:
https://download.csdn.net/download/aiwusheng/84992053参考
Android将启动画面迁移到SplashScreen:
https://developer.android.google.cn/guide/topics/ui/splash-screen/migrateAndroid12 SplashScreen:
https://developer.android.google.cn/about/versions/12/features/splash-screen -
-
Linux screen命令
2021-05-09 02:58:31screen是什么?Screen是一个全屏窗口管理器,它可以在多个进程之间多路复用一个物理终端。Screen中有会话的概念,用户可以在一个会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telent/SSH连接... -
【FonePaw Screen Recorder】视频屏幕录制软件
2022-06-24 19:47:09【FonePaw Screen Recorder】视频屏幕录制软件【FonePaw Screen Recorder】视频屏幕录制软件【FonePaw Screen Recorder】视频屏幕录制软件【FonePaw Screen Recorder】视频屏幕录制软件【FonePaw Screen Recorder】... -
如何使用 Linux screen
2021-05-17 02:57:24您是否遇到过在远程计算机上执行长时间运行任务的情况,...介绍screen 或 GNU screen 是终端多路复用器。换句话说,这意味着您可以启动 screen 会话,然后在该会话中打开任意数量的窗口(虚拟终端)。即使断开连接,当... -
很好用的录屏工具rd-screen-recorder-80
2014-08-03 06:03:52rd-screen-recorder很好用的录屏工具 -
screen使用
2018-04-06 10:49:39Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个... -
screen详解
2019-05-13 09:58:00screen命令基本用法详解 在服务器上搭建一些服务的时候,经常要用到screen命令。这是因为一般情况下我们只会开一个连接服务器的控制台,但是某些服务(比如minecraft服务器)开启的时候需要占据一整个控制台,如果... -
SecureCRT脚本(三)二级对象之Screen详解
2021-01-07 20:29:04本节开始讲解Crt脚本中最常用,也是功能最强大的二级对象Screen的属性和方法,凡是需要和远程设备进行交互的部分都是需要使用Screen对象的属性或方法的,因此本节将是重点。 2、Screen属性和方法 属性 方法 ... -
screen基本用法
2021-09-24 10:59:21screen的基本用法, 可以方便的管理多个命令行工作流. -
Linux之Screen
2019-03-28 12:51:27Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。在screen中创建一个新的窗口有这样几种方式: 1.直接在命令行键入... -
Screen -r命令不能恢复Screen的解决方法及常用参数和快捷键
2019-11-18 11:17:17安装lnmp的时候第一步就是要求创建一个Screen,这样的做的目的是预防万一有网络中断或者其他因素导致链接中断而安装失败。创建Screen以后就可以直接不用管他了,也不用盯着它看,可以去做别的了。但是在之后使用... -
screen用法小记
2021-02-03 09:52:19b #initial apps to run screen screen select 0 escape ^aa attrcolor u "-u B" autodetach on #hardstatus string '%{= kG}[ %{G}%c:%s %{g}][%= %{= kw}%?%-Lw%?%{Y}%n*%f%t %{K}%?%+Lw%?%= %{kG}][ %{C}(F8)... -
如何使用screen命令
2020-08-13 20:11:16screen 命令允许用户在一个窗口内使用多个终端会话,可以断开连接,也可以重新连接已断开连接的会话。每个会话都可以恢复连接,这样就算会话断开了,用户也不必担心数据丢失,这正好解决了我们的问题。 因此,良许想...