zoukankan      html  css  js  c++  java
  • 使用Hbuilderx,写一个极简酷酷的手机桌面

    如题,由于受到相应类别的软件的启发,故此书写一个简单炫酷的手机桌面,实现下自己的小愿望

    效果图,楼主个人原因,软件列表做了虚化处理

    代码部分

    <template>
    //页面的渲染列表的代码部分
    	<view class="bgColor">
    		<view style="display: inline;line-height: 26px;" v-for="(item, index) in appList" :key="index">
    			<view class="labelShow" :style="labelStyle[index]" @click="launchApp(item.packageName)" type="default">{{ item.appName }}</view>
    		</view>
    	</view>
    </template>
    
    <script>
    /**
     * 实现自动获取应用列表,然后自动分配大小和颜色,用户点击软件名称后可以直接打开软件
     */
    export default {
    	data() {
    		return {
    			//应用列表
    			appList: [],
    			//标签样式数组
    			labelStyle: [],
    			//屏幕高度
    			scrrenHeight: '',
    			//屏幕宽度
    			screenWeight: ''
    		};
    	},
    	onLoad() {
    		//获取屏幕的宽度高度
    		const { windowWidth, windowHeight } = uni.getSystemInfoSync();
    		this.screenWeight = windowWidth;
    		this.scrrenHeight = windowHeight;
    		//获取非系统应用的软件信息
    		plus.android.importClass('java.util.ArrayList');
    		plus.android.importClass('android.content.pm.PackageInfo');
    		plus.android.importClass('android.content.pm.PackageManager');
    		var ApplicationInfo = plus.android.importClass('android.content.pm.ApplicationInfo');
    		var MainActivity = plus.android.runtimeMainActivity();
    		var PackageManager = MainActivity.getPackageManager();
    		var pinfo = plus.android.invoke(PackageManager, 'getInstalledPackages', 0);
    		if (pinfo != null) {
    			var apklist = [];
    			for (var i = 0; i < pinfo.size(); i++) {
    				//PackageInfo{4b45699f9d  com.tencent.mobileqq}
    				var pkginfo = pinfo.get(i);
    				//等于0非系统应用 FASTEST表示全部应用
    				var issysapk = (pkginfo.plusGetAttribute('applicationInfo').plusGetAttribute('flags') & ApplicationInfo.FLAG_SYSTEM) != 0 ? true : false;
    				if (issysapk == false) {
    					const apkinfo = {
    						appName: pkginfo
    							.plusGetAttribute('applicationInfo')
    							.loadLabel(PackageManager)
    							.toString(),
    						packageName: pkginfo.plusGetAttribute('packageName'),
    						versionName: pkginfo.plusGetAttribute('versionName'),
    						versionCode: pkginfo.plusGetAttribute('versionCode'),
    						appIco: pkginfo.plusGetAttribute('applicationInfo').loadIcon(PackageManager)
    					};
    					apklist.push(apkinfo);
    				}
    			}
    			this.appList = apklist;
    			//获取有多少个app,然后根据app的个数分配样式
    			// "color:red;font-size:18px;","color:blue;font-size:25px;"
    			//利用字符串拼接生成随机的样式
    			let randStyle = [];
    			//生成随机的颜色
    			let colorInfo = ['#DC143C', '#4169E1', '#32CD32', '#DB7093', '#9400D3', '#FF8C00', '#A9A9A9', '#F5F5F5'];
    			for (var i = 0; i < apklist.length; i++) {
    				randStyle[i] = 'color:' + colorInfo[Math.floor(Math.random() * 8)] + ';' + 'font-size:2' + Math.floor(Math.random() * 10 - 3) + "px;'";
    			}
    			//设置自动样式
    			this.labelStyle = randStyle;
    			// console.log(apklist.length+" "+randStyle+" "+windowWidth+" "+windowHeight)
    		}
    	},
    	methods: {
    //弃用部分,设置的是软件打开前自动加载程序,加载完成之后,才会进入主界面
    		getAppInfo() {
    			var ApplicationInfo = plus.android.importClass('android.content.pm.ApplicationInfo');
    			var MainActivity = plus.android.runtimeMainActivity();
    			var PackageManager = MainActivity.getPackageManager();
    			var pinfo = plus.android.invoke(PackageManager, 'getInstalledPackages', 0);
    			if (pinfo != null) {
    				var apklist = [];
    				for (var i = 0; i < pinfo.size(); i++) {
    					//PackageInfo{4b45699f9d  com.tencent.mobileqq}
    					var pkginfo = pinfo.get(i);
    					//等于0非系统应用
    					var issysapk = (pkginfo.plusGetAttribute('applicationInfo').plusGetAttribute('flags') & ApplicationInfo.FLAG_SYSTEM) != 0 ? true : false;
    					if (issysapk == false) {
    						const apkinfo = {
    							appName: pkginfo
    								.plusGetAttribute('applicationInfo')
    								.loadLabel(PackageManager)
    								.toString(),
    							packageName: pkginfo.plusGetAttribute('packageName'),
    							versionName: pkginfo.plusGetAttribute('versionName'),
    							versionCode: pkginfo.plusGetAttribute('versionCode'),
    							appIco: pkginfo.plusGetAttribute('applicationInfo').loadIcon(PackageManager)
    						};
    						apklist.push(apkinfo);
    					}
    				}
    				this.appList = apklist;
    			}
    		},
    		//启动应用程序
    		launchApp(appStartInfo) {
    			//不判断平台直接 运行
    			let _this = this;
    			plus.runtime.launchApplication({ pname: appStartInfo }, function(e) {
    				uni.showToast({
    					title: 'Open system app failed please again'
    				});
    				console.log('Open system app failed: ' + e.message);
    			});
    		}
    	}
    };
    </script>
    
    <style>
    //全屏背景色
    .bgColor {
    	position: absolute;
    	top: 0;
    	left: 0;
    	right: 0;
    	bottom: 0;
    	background: black;
    	z-index: -1;
    	padding-top: 50rpx;
    }
    .labelShow {
    	display: inline;
    	font-weight: bold;
    	word-break: break-all;
    	word-wrap: break-word;
    	white-space: pre-line;
    }
    
    .text-area {
    	display: flex;
    	justify-content: center;
    	margin-bottom: 10rpx;
    }
    .title {
    	font-size: 72rpx;
    	color: #dd524d;
    }
    .container {
    	padding: 10px;
    }
    </style>
    
    
    

    详细流程,我们在Hbuilderx里面新建一个uni-app的空项目,然后把这部分代码放到 pages->index->index.vue里面,使用云打包,就可以得到一个手机端的简易桌面了,样式和颜色可以根据自己的喜好再代码里自行设置,启动界面和图标也可以再Hbuilderx的设置里面进行设置

  • 相关阅读:
    Java 第十一届 蓝桥杯 省模拟赛 洁净数
    Java 第十一届 蓝桥杯 省模拟赛 第十层的二叉树
    Java 第十一届 蓝桥杯 省模拟赛 第十层的二叉树
    Java 第十一届 蓝桥杯 省模拟赛 第十层的二叉树
    Java 第十一届 蓝桥杯 省模拟赛 70044与113148的最大公约数
    Java 第十一届 蓝桥杯 省模拟赛 70044与113148的最大公约数
    20. Valid Parentheses
    290. Word Pattern
    205. Isomorphic Strings
    71. Simplify Path
  • 原文地址:https://www.cnblogs.com/nanstar/p/13592471.html
Copyright © 2011-2022 走看看