getAllAPP+PopupWindow

2024-08-31 23:58
文章标签 popupwindow getallapp

本文主要是介绍getAllAPP+PopupWindow,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


————————————————————————————————

先看布局资源

activity_main.xml(就是一个ListView)

<ListView xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/lv_main_apps"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" android:divider="@android:drawable/divider_horizontal_bright">
</ListView>

activity_main_item.xml(每一个条目的布局)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="horizontal"android:gravity="center_vertical"android:minHeight="80dp"><ImageViewandroid:id="@+id/iv_item_icon"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src=<span style="color:#ff0000;">"@drawable/ic_launcher" </span>/><TextViewandroid:id="@+id/tv_item_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="应用名称"android:textSize="20sp" />
</LinearLayout>


pw_back_selector.xml(点击手机某个应用,点击popupwindow按钮的切换效果)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" ><item android:state_pressed="true"><shape><corners android:radius="2dp"/><solid android:color="#EE7600"/></shape></item>
</selector>

popoup_window_view.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="230dp"android:layout_height="70dp"android:background="@drawable/local_popup_bg"android:gravity="center_horizontal"android:orientation="horizontal" ><LinearLayoutandroid:id="@+id/ll_pw_uninstall"android:layout_width="0dp"android:layout_height="match_parent"android:layout_marginLeft="20dp"android:layout_weight="1"android:background="@drawable/pw_back_selector"android:gravity="center_horizontal"android:orientation="vertical" ><ImageViewandroid:layout_width="wrap_content"android:layout_height="35dp"android:src="@drawable/img1" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="卸载" /></LinearLayout><Viewandroid:layout_width="1dp"android:layout_height="fill_parent"android:layout_margin="10dp"android:background="#EE6AA7" /><LinearLayoutandroid:id="@+id/ll_pw_run"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center_horizontal"android:orientation="vertical" ><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/img2" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="运行" /></LinearLayout><Viewandroid:layout_width="1dp"android:layout_height="fill_parent"android:layout_margin="10dp"android:background="#EE6AA7" /><LinearLayoutandroid:id="@+id/ll_pw_share"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center_horizontal"android:orientation="vertical" ><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/img3" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="分享" /></LinearLayout></LinearLayout>


对象封装类AppInfo.java

package com.example.getallappinfos;import android.graphics.drawable.Drawable;public class AppInfo {private Drawable icon;private String appName;private String packageName;public Drawable getIcon() {return icon;}public void setIcon(Drawable icon) {this.icon = icon;}public String getAppName() {return appName;}public void setAppName(String appName) {this.appName = appName;}public String getPackageName() {return packageName;}public void setPackageName(String packageName) {this.packageName = packageName;}public AppInfo(Drawable icon, String appName, String packageName) {super();this.icon = icon;this.appName = appName;this.packageName = packageName;}public AppInfo() {super();}@Overridepublic String toString() {return "AppInfo [icon=" + icon + ", appName=" + appName+ ", packageName=" + packageName + "]";}	
}

MainActivity.java

package com.example.getallappinfos;import java.util.ArrayList;
import java.util.List;import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.ScaleAnimation;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends Activity implements OnItemClickListener,OnClickListener {// 初始化ListView视图文件、appName的集合private ListView lv_main_apps;private List<AppInfo> data;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 获取listview视图对象lv_main_apps = (ListView) findViewById(R.id.lv_main_apps);// 获取信息列表data = getAllAppInfos();// 设置适配器lv_main_apps.setAdapter(new MyAdapter());// 为每一个itemView添加点击监听事件lv_main_apps.setOnItemClickListener(this);// 设置滑动的监听--滑动操作触发就会dismiss--itemViewlv_main_apps.setOnScrollListener(new AbsListView.OnScrollListener() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {if (popupWindow != null && popupWindow.isShowing()) {popupWindow.dismiss();}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {}});}// itemView点击监听的实现方法private PopupWindow popupWindow;private View pwView;@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {// 如果popupWindow是空的话,就先创建popupWindow对象if (popupWindow == null) {// 先加载布局视图文件pwView = View.inflate(this, R.layout.popoup_window_view, null);pwView.findViewById(R.id.ll_pw_run).setOnClickListener(this);pwView.findViewById(R.id.ll_pw_share).setOnClickListener(this);pwView.findViewById(R.id.ll_pw_uninstall).setOnClickListener(this);// 1、创建popupWindow视图文件popupWindow = new PopupWindow(pwView, view.getWidth() - 80,view.getHeight());// 指定背景图片popupWindow.setBackgroundDrawable(new BitmapDrawable());}Object tag = pwView.getTag();if (tag != null && Integer.parseInt(tag.toString()) == position) {return;}pwView.setTag(position);// 如果popupWindow显示的话,就移除--但是popupWindow对象还存在,没有消失if (popupWindow.isShowing()) {popupWindow.dismiss();}// 2、设置显示方式--移除后扔可以显示,因为对象没有消失,只是移除了popupWindow.showAsDropDown(view, 50, 0 - view.getHeight());// 保存点击的下标// 启动动画ScaleAnimation animation = new ScaleAnimation(0f, 1f, 0f, 1f);animation.setDuration(1000);pwView.startAnimation(animation);}// 添加点击事件@Overridepublic void onClick(View v) {int position = Integer.parseInt(pwView.getTag().toString());String appName = data.get(position).getAppName();switch (v.getId()) {case R.id.ll_pw_run:Toast.makeText(this, "运行" + appName, 0).show();break;case R.id.ll_pw_share:Toast.makeText(this, "分享" + appName, 0).show();break;case R.id.ll_pw_uninstall:Toast.makeText(this, "卸载" + appName, 0).show();break;default:break;}}// 内部类适配器private class MyAdapter extends BaseAdapter {@Overridepublic int getCount() {return data.size();}@Overridepublic Object getItem(int position) {return data.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// 取当前行的数据AppInfo appInfo = data.get(position);// 加载动态布局if (convertView == null) {convertView = View.inflate(MainActivity.this,R.layout.activity_main_item, null);}// 讲数据设置到对应的视图ImageView iv = (ImageView) convertView.findViewById(R.id.iv_item_icon);TextView tv = (TextView) convertView.findViewById(R.id.tv_item_name);iv.setImageDrawable(appInfo.getIcon());tv.setText(appInfo.getAppName());return convertView;}}// 得到手机应用列表protected List<AppInfo> getAllAppInfos() {List<AppInfo> list = new ArrayList<AppInfo>();// 得到应用的packgeManagerPackageManager packageManager = getPackageManager();// 创建一个主界面的intentIntent intent = new Intent();intent.setAction(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_LAUNCHER);// 得到包含应用信息的列表List<ResolveInfo> ResolveInfos = packageManager.queryIntentActivities(intent, 0);// 遍历for (ResolveInfo ri : ResolveInfos) {// 得到包名String packageName = ri.activityInfo.packageName;// 得到图标Drawable icon = ri.loadIcon(packageManager);// 得到应用名称String appName = ri.loadLabel(packageManager).toString();// 封装应用信息对象AppInfo appInfo = new AppInfo(icon, appName, packageName);// 添加到listlist.add(appInfo);}return list;}
}




这篇关于getAllAPP+PopupWindow的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125365

相关文章

PopupWindow使用和遮挡虚拟按键处理

PopupWindow顾名思义,就是一个弹出窗口。不过特性倒是挺好玩的: 以弹出窗口的形式展示,可以替代系统的dialog。 可以在任意位置出现,并且会浮动在当前窗口的顶部(获取焦点)。 可以用来装载任意的view。 通过设置背景颜色0xaa000000可以实现半透明效果 关于点击消失: 如果需要点击外部消失,只需设置背景,foucs,outSideTouchable。 this.s

Android中 popupWindow 点击外部消失的问题 以及其他内容的小总结

Android中PopupWindow的使用是非常常见的弹窗形式,主要得益于其灵活的位置处理。 一、而最难受的地方在于outsideTouchable的处理。 如果你遇到了点击外部不消失/ 点击外部后消失了但是点击事件透传到了Activity/Fragment的控件中,可以参考一下步骤设置: 1. popupWindow.setBackgroundDrawable(new ColorDra

Android PopupWindow 的使用

<pre name="code" class="java"> /*** 弹出选择头像框*/public void showPop(View parent) {/** if (mPop != null) { int[] location = new int[2];* parent.getLocationOnScreen(location); mPop.showAtLocation(parent,*

Android UI:PopupWindow:API

文章目录 类操作 类 PopupWindow 持有一个View对象和一个WindowManager对象,将外部传入的View对象通过WindowManger.addView的方式显示在屏幕上 PopupWindow.OnDismissListener 操作 对PopupWindow的操作 显示操作 boolean    isShowing() void show

PopupWindow 属性,我们的使用的途径

今天看到了,比人写的一个Demo,看到了之后感觉还不错,自己也是仔细的思考了一哈,其实这样的用途也是比较的多的嘛。 使用PopupWindow可实现弹出窗口效果,,其实和AlertDialog一样,也是一种对话框,两者也经常混用,但是也各有特点。下面就看看使用方法。 showAsDropDown的用法属性介绍 首先初始化一个PopupWindow,指定窗口大小参数。(这下面的东西看起来都

Popupwindow 属性设置

1、<item name="android:windowBackground">@android:color/transparent</item>窗口背景色  2、<item name="android:windowFrame">@null</item>Dialog的windowFrame框为无  4、<item name="android:windowIsFloating">

用PopupWindow实现从底部滑出选择菜单

在开发中PopupWindow的弹出效果是必不可少的。许多应用的App都喜欢用到PopupWindow。如:新浪微博客户端、微信客户端、大众点评客户端等等。今天给大家 介绍的是微信客户端里用PopupWindow实现的一种从底部滑出选择菜单的效果。 本实例弹出窗口主要是继承PopupWindow类来实现的弹出窗体,布局可以根据自己定义设计。弹出效果主要使用了translate和alpha

DialogFragment——解决PopupWindow中的输入框无法复制粘贴的问题;Android中的两种弹窗PopupWindow和Dialog的区别。

本文旨在介绍Android中的两种弹窗PopupWindow和Dialog的区别。以及关于写代码的一些思考。 其实之前各类弹窗,都是使用PopupWindow来实现的。因为PopupWindow能实现这些需求,虽然有的时候有些麻烦,比如前面的文章有写到PopupWindow去实现蒙版遮罩的问题。它本身是没有蒙版提供的。 我们项目中使用各种方法去给它增加遮盖层。如今看来确实是有些愚蠢的。我不介意

Android对话框(四)PopupWindow

主布局 <RelativeLayout 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"an

Android Fragment 之运行PopupWindow提示 token null is not valid; is your activity running?

Android Fragment 之运行PopupWindow提示 token null is not valid; is your activity running? 由于控件未初始化完成,会导致失败,需要在生命周期方法完成后调用。 建议找一个控件,调用 post方法,进行条用。(post方法可以延迟在所有生命周期完成后执行) bt = (Button)findViewById(R.id.