样式和主题

image.png

主题(Theme)


image.png

---------------效果图------------


image.png

--------------------代码------------------
封装一个AppInfo类
package com.example.app03_allaopp;

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();
    }

}
-------------MainActivity----------------
package com.example.app03_allaopp;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
private ListView lv_main;//列表控件
private List<AppInfo> data;//数据的集合
private AppAdapter adpater;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

    lv_main=(ListView) findViewById(R.id.lv_main);
    data=getAllAppInfos();
    adpater=new AppAdapter();
    //显示列表
    lv_main.setAdapter(adpater);
    //给ListView设置条目的点击监听
    lv_main.setOnItemClickListener(new OnItemClickListener() {
        /**
         * Parent listView
         * view 当前行的Item视图对象
         * position 当前行下标
         * */
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            //提示当前行的应用名称
            String appName = data.get(position).getAppName();
            //提示
            Toast.makeText(MainActivity.this, appName, Toast.LENGTH_SHORT).show();
        }
    });
    //给ListView设置条目的长按监听
    lv_main.setOnItemLongClickListener(new OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view,
                int position, long id) {
            /**
            //       删除当前行 数据
            //       * */
                data.remove(position);
                //更新列表
               adpater.notifyDataSetChanged();//通知适配器更新列表



            return true;//事件消费  点击监听不会吐司
        }
    });
}
/*
 * 得到手机中所有应用信息的列表
 * AppInfo
 *  Drawable icon 图片对象
 *  String appName  应用名称
 *  String packageName   包名
 */
protected List<AppInfo> getAllAppInfos() {

    List<AppInfo> list = new ArrayList<AppInfo>();
    // 得到应用的packgeManager
    PackageManager packageManager = getPackageManager();
    // 创建一个主界面的intent
    Intent 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);
        // 添加到list
        list.add(appInfo);
    }
    return list;
}
//适配器
class AppAdapter extends BaseAdapter{

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        return data.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override//返回带有数据当前行的Item试图对象
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder=null;

        if (convertView==null) {
            //1. 如果convertView 为null 加载布局
            convertView=View.inflate(MainActivity.this, R.layout.item_main, null);

            holder= new ViewHolder();
            //2.得到当前行需要更新的子view的对象
            holder.imageview=(ImageView) convertView.findViewById(R.id.iv_item_icon);
            holder.textview=(TextView) convertView.findViewById(R.id.tv_item_name);
            convertView.setTag(holder);
        }else{
            holder=(ViewHolder) convertView.getTag();//如果不为空就取
        }
        //3.得到当前行的对象
        AppInfo info=data.get(position);
        //4.给视图绑定数据
        holder.imageview.setImageDrawable(info.getIcon());
        holder.textview.setText(info.getAppName());
        //5.返回convertView
        return convertView;
    }
    class ViewHolder{
        ImageView imageview;
        TextView textview;

    }
}
// public void dialog(View v){
// 
// new AlertDialog.Builder(this)
// .setTitle("删除数据")
// .setMessage("要删除数据吗")
// .setPositiveButton("删除", new DialogInterface.OnClickListener() {
//  
//  @Override
//  public void onClick(DialogInterface dialog, int which) {
//      /**
//       删除当前行 数据
//       * */
//      data.remove(position);
//  //更新列表
//      adpater.notifyDataSetChanged();//通知适配器更新列表
//      Toast.makeText(MainActivity.this, "删除数据", Toast.LENGTH_SHORT).show();
//  }
//  }

//}
}
---------------GridView的应用-------------


image.png

-------------效果图---------------------


image.png

-----------------代码----------------
package com.example.app04_gridview;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.GridView;

public class MainActivity extends Activity {
private GridView gv_main;
private MainAdapter adapter;
String [] names=new String[]{"手机防盗","通讯卫士","软件管理","流量管理","进程管理","手机杀毒","22","33","44"};
int [] icons=new int[]{R.drawable.widget01,
R.drawable.widget02,R.drawable.widget03,
R.drawable.widget04,R.drawable.widget05,R.drawable.widget06,
R.drawable.widget07,R.drawable.widget08,R.drawable.widget09};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

    gv_main=(GridView) findViewById(R.id.gv_main);
    adapter=new MainAdapter(MainActivity.this,names,icons);
    gv_main.setAdapter(adapter);
    
}

}
-------------自定义的封装类MainAdpater-----------
···
package com.example.app04_gridview;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class MainAdapter extends BaseAdapter{
private String[] names;
private int[] icons;
private Context context;
public MainAdapter(Context context,String[] names,int[] icons) {
this.context=context;
this.names=names;
this.icons=icons;

}
@Override
public int getCount() {
return names.length;
}

@Override
public Object getItem(int position) {
    return names[position];
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolser holder=null;
    if (convertView==null) {
        convertView=View.inflate(context, R.layout.item_main, null);
        holder=new ViewHolser();
        holder.imageView = (ImageView) convertView.findViewById(R.id.iv_id1);
        holder.textView = (TextView) convertView.findViewById(R.id.tv_id1);
        convertView.setTag(holder);
          
    }else{
        holder = (ViewHolser) convertView.getTag();
    }
    holder.imageView.setImageResource(icons[position]);
    holder.textView.setText(names[position]);
    
    return convertView;
}

class ViewHolser{
ImageView imageView;
TextView textView;
}
}

···
*************item.xml*****
···
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="80dp"
android:layout_height="80dp"
android:orientation="vertical"
android:gravity="center"
>

<ImageView
    android:id="@+id/iv_id1"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:src="@drawable/ic_launcher" />

<TextView
    android:id="@+id/tv_id1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="16sp"
    
    android:text="名称" />

</LinearLayout>

···
--------activity.xml-----------------
···
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gv_main"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="3"
>

</GridView>
···

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,373评论 0 17
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,810评论 25 707
  • 距离期末越来越近,然而跟着舍友的节奏玩了一下午的我。 3门主科每周都只剩下一节课,上周讲的什么如果没有好好预习复习...
    bu良青阅读 274评论 3 1
  • 今天这个雨从我中午回家来以后就没停过,滴滴答答,淅淅沥沥,有一段时间没有病过了,昨天晚上就开始的肚子疼,凌晨发热拉...
    Esther米尔米儿阅读 301评论 0 0
  • 只是简单的黑白简笔画,加以线条点面的修饰就很美了。 画画是修心,也是画出内心的自我。
    皎皎未眠阅读 270评论 0 3