本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!