android控件大全及用法_学双人舞一步一步教学

android控件大全及用法_学双人舞一步一步教学GridView用于显示二维滚动网格的View。同ListView一样,他的数据项也是从ListAdapter中产生。关于他的使用方法可参见官网的示例GridView 。下面先了解下GridView中常用到的属性:1、android:numColumn:指定GridView的列数,如果指定为auto_fit,则可能根据控件的大小自动调整每行显示的列数。2、android:st

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

GridView 用于显示二维滚动网格的View。同ListView一样,他的数据项也是从ListAdapter中产生。关于他的使用方法可参见官网的示例GridView 。

下面先了解下GridView中常用到的属性:

1、android:numColumn : 指定GridView的列数,如果指定为auto_fit , 则可能根据控件的大小自动调整每行显示的列数。

2、android:strechMode : 伸缩模式 , 值为none (不可伸缩)、 spacingWidth(伸缩列之间的间隔空隙) 、 columnWidth(每列伸缩大小一样) 、 spacingWidthUniform(均匀拉伸各列之间的距离) 。

3、 android:columnWidth :  指定列宽度。

关于GridView属性的介绍就到这里。今天通过做一个类似于launcher功能的小程序来学习GridView。先看看程序效果:

android控件大全及用法_学双人舞一步一步教学

下面一步一步实现该功能:

1、activity使用的布局文件,文中指定显示3列 。widget_gridview_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <GridView
        android:id="@+id/show_app_grid_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:numColumns="3"
        android:smoothScrollbar="true"
        android:verticalSpacing="10dp" >
    </GridView>

</LinearLayout>

Jetbrains全家桶1年46,售后保障稳定

2、GridView中每个Item的布局文件grid_item_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/application_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@string/app_name"
        android:src="@drawable/toggle" />

    <TextView
        android:id="@+id/application_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"
        android:singleLine="true"
        android:textAppearance="?android:attr/textAppearanceSmall" />
    <!--
        android:focusable="true"
        android:focusableInTouchMode="true"


    -->

</LinearLayout>

注意:在代码中如果添加了上面注释的部分,则不会响应GridView 的onItemClick 方法。

3、WidgetGridViewActivity.java

package com.xy.zt.selfdefinewieget;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

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

public class WidgetGridViewActivity extends Activity {
    private GridView mAppGrid;
    private BaseAdapter mAdapter;
    PackageManager mPackManager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.widget_gridview_layout);
        init();
    }

    private void init() {
        mAppGrid = (GridView) findViewById(R.id.show_app_grid_view);
        mPackManager = getPackageManager();
        List<ApplicationInfo> packInfo = mPackManager
                .getInstalledApplications(PackageManager.COMPONENT_ENABLED_STATE_ENABLED);

        mAdapter = new ApplicationAdapter(this, packInfo);
        mAppGrid.setAdapter(mAdapter);
        mAppGrid.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> adaper, View v, int position, long id) {
                ApplicationInfo pInfo = (ApplicationInfo) mAdapter.getItem(position);
                Intent appIntent = mPackManager.getLaunchIntentForPackage(pInfo.packageName);
                if (appIntent == null) {
                    Toast.makeText(v.getContext(), "this is not a launcher activity !...",
                            Toast.LENGTH_SHORT).show();
                    return;
                }
                appIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(appIntent);
            }

        });
    }

    private static class ApplicationAdapter extends BaseAdapter {
        private List<ApplicationInfo> mAppList;
        private LayoutInflater mInflater;
        private PackageManager mPackageManager;
        private Context mContext;

        public ApplicationAdapter(Context context, List<ApplicationInfo> appList) {
            if (context == null || appList == null)
                throw new IllegalArgumentException(
                        "exits null arguments  in constructor method of ApplicationAdapter ! ");
            mInflater = LayoutInflater.from(context);
            mAppList = new ArrayList<ApplicationInfo>();
            int len = appList.size();
            ApplicationInfo app;
            mPackageManager = context.getPackageManager();
            for (int i = 0; i < len; i++) {
                app = appList.get(i);
                if (mPackageManager.getLaunchIntentForPackage(app.packageName) == null) {
                    continue;
                }
                mAppList.add(app);
            }
            mContext = context;
        }

        public int getCount() {
            return mAppList.size();
        }

        public Object getItem(int position) {
            return mAppList.get(position);
        }

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

        public View getView(int position, View convertView, ViewGroup parent) {
            AppHolder holder;
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.grid_item_view, null);
                holder = new AppHolder();
                convertView.setTag(holder);
            } else {
                holder = (AppHolder) convertView.getTag();
            }
            holder.mAppIcon = (ImageView) convertView.findViewById(R.id.application_icon);
            holder.mAppName = (TextView) convertView.findViewById(R.id.application_name);
            initGridViewItem(mAppList.get(position), holder.mAppIcon, holder.mAppName);
            return convertView;
        }

        private void initGridViewItem(ApplicationInfo pInfo, ImageView img, TextView name) {
            String appName =
                    mPackageManager.getApplicationLabel(pInfo).toString();
            Drawable appIcon =
                    mPackageManager.getApplicationIcon(pInfo);
            img.setImageDrawable(appIcon);
            name.setText(appName);
//            final String packageName = pInfo.packageName;
            // name.setOnClickListener(new OnClickListener() {
            // public void onClick(View arg0) {
            // doLaunchApp(packageName);
            // }
            // });
            // img.setOnClickListener(new OnClickListener() {
            // public void onClick(View arg0) {
            // doLaunchApp(packageName);
            // }
            // });
        }

        // private void doLaunchApp(String packageName) {
        // Intent appIntent =
        // mPackageManager.getLaunchIntentForPackage(packageName);
        // Log.d("app_info", "start app from packageName : " + packageName);
        // mContext.startActivity(appIntent);
        // }

        private static class AppHolder {
            public ImageView mAppIcon;
            public TextView mAppName;
        }
    }
}

注意:上述代码中的注释部分的代码,添加后效果类似于XML文件中的android:focusable=”true” .

该部分代码主要使用到了PackageManager。PackManager.getInstalledApplications(PackageManager.COMPONENT_ENABLED_STATE_ENABLED);获取系统安装的应用程序信息。

在ApplicationAdapter的构造函数中有这么一段代码:

ApplicationInfo app;
            mPackageManager = context.getPackageManager();
            for (int i = 0; i < len; i++) {
                app = appList.get(i);
                if (mPackageManager.getLaunchIntentForPackage(app.packageName) == null) {
                    continue;
                }
                mAppList.add(app);
            }

它对初始的List做了一个简单的过滤,使得所有的图标点击后都能够进入响应的app。

下面代码加载应用的名称和图标信息:

String appName =
       mPackageManager.getApplicationLabel(pInfo).toString();
Drawable appIcon =
       mPackageManager.getApplicationIcon(pInfo);

在代码

ApplicationInfo pInfo = (ApplicationInfo) mAdapter.getItem(position);
                Intent appIntent = mPackManager.getLaunchIntentForPackage(pInfo.packageName);
                if (appIntent == null) {
                    Toast.makeText(v.getContext(), "this is not a launcher activity !...",
                            Toast.LENGTH_SHORT).show();
                    return;
                }
                appIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(appIntent);

中通过packageManager获取category为Launcher 的Activity的intent。 如果intent == null , 给出一个提示(系统中有些应用是没有入口activity的)。

4、在ViewData.java中添加如下内容(此部分内容可选,如有不清楚的地方参见一步一步学android控件(之一) —— 开始篇

public static final int GRID_ID = EXPANDABLE_LIST_VIEW_ID + 1;
    public static final String GRID_NAME = "GridView";
private static final ViewData mGridView = new ViewData(GRID_NAME,
            GRID_ID);
View_Datas.add(mGridView);

WidgetsAdapter的handleItemClicked中添加如下内容:

case ViewData.GRID_ID:
                intent.setClass(mContext, WidgetGridViewActivity.class);
                mContext.startActivity(intent);
                break;

以上就是GridView的全部内容,下一个控件progressBar。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234973.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • goland2021.7.20激活码_在线激活

    (goland2021.7.20激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月21日
    40
  • 全角字符和半角字符的区别和操作方法_手机有半角全角的区别吗

    全角字符和半角字符的区别和操作方法_手机有半角全角的区别吗全角字符的由来#全角符号是双字节中文编码的历史遗留问题。当年在纯文本的界面中,为了让西文和中日韩的方块字对齐,就让西文字母、数字和标点也占用一个汉字的视觉空间,并使用2个字节存储。后来,其中的一些全角字符因为比较有用,就得到了广泛应用(比如全角的逗号「,」、问号「?」、感叹号「!」、空格「 」等),专用于中日韩文本,成为了标准的中日韩标点字符。而其它的许多全角符号失去了价值,因为我们现在很少需要让纯文本的中文和西文字字对齐了,就很少再用了。另外需要说明的是:现在全球文本编码的事实标准是UTF-

    2022年10月22日
    0
  • ssl证书绑定域名还是ip_ssl证书类型

    ssl证书绑定域名还是ip_ssl证书类型答案:IP地址可以申请SSL证书实现IP的https加密,快速拿到IP证书,请直接联系本站右侧在线客服。环度网信是可以帮助您的IP实现https加密的,只需要您满足如下几个条件:1、您的IP地址是公网IP,暂不支持内网IP申请可信的SSL证书,因为只有公网IP是全球唯一的,能够验证IP所有者的管理权限。2、您的IP需要开通或者临时开通80或者443端口,因为我们在验证您的IP管理权限的时候,会给您…

    2022年9月30日
    0
  • 如何利用js生成二维码_前端生成二维码

    如何利用js生成二维码_前端生成二维码问题来源最近在做一个项目,有这么个需求,通过生成二维码来实现网页的分享。问题分析脑海的第一反应,当然是用js来实现,自己手写?当然不是。解决方案使用QRCode.js。QRCode.js是一个用于生成二维码的JavaScript库。主要是通过获取DOM的标签,再通过HTML5Canvas绘制而成,不依赖任何库。QRCode.js:使用JavaScript生成二维码代码编写<!DOCTYPEhtml><htmllang=”en.

    2022年10月18日
    0
  • neo4j如何安装_neo4j环境变量配置

    neo4j如何安装_neo4j环境变量配置一、neo4j简介最近开始学习知识图谱,所以首先想先学习一下neo4j的使用。Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。由于知识图谱中存在大量的关系型信息(实体—关系—实体),使用结构化数据库进行存储将产生大量的冗余存储信息,因此将图数据库作为知识图谱的存储容器成为流行的选择。当前较为常用的图数据库主要有Neo4j等。二、neo4j的安装功能快捷键撤销:Ctrl/Command+Z重做:Ctrl/Command+Y加粗:Ctrl/Co

    2022年10月26日
    0
  • eclipse安装android_安卓studio怎么打包apk

    eclipse安装android_安卓studio怎么打包apkEclipseandroid开发更改apk名字有以下几步:第一步,修改工程包名在eclipse里,找到项目包和java包(原则上都一样),就可以按”F2″修改名字,随之,源.java也会得到相应的修改;然而每个.java文件都需要把如下图内容,再额外修改一下第二步,修改AndroidManifest.xml文件AndroidManifest.xml里的内容是android工程的相关配置文件。工程文件的解析具体可参考:某鸟教程.第三步,修改Strings.xml文件然后是…

    2022年10月5日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号