3.Android中的用户界面(Android interface)

  1. UI的理解
    UI是由View和ViewGroup组件的
    这里写图片描述
    一般的View: 会在屏幕上显示一个效果, 它没有子View
    ViewGroup: 控制子View/ViewGroup的布局(layout), 它本身并不能显示什么效果
    UI相关API结构
    这里写图片描述
  2. 常用的UI组件
    TextView : 文本视图
    TextView
    id=”@+id/xxx”
    layout_width=”fill_Parent/wrap_Content/100dp”
    layout_height=”fill_Parent/wrap_Content/100dp”
    text=”显示的内容”
    textColor=”#ff0000”
    textSize=”20sp”
    background=”背景颜色”
    gravity=”left/rigth/center/top/bottom”>
    EditText : 输入框
    EditText
    hint=”提示”
    inputType=”phone”
    maxLines=”最大行数”>
    Button : 按钮
    Button
    ImageVIew : 图片视图
    ImageView
    backaground=”@android:drawable/xxxx” //引用系统的图片
    src=”@drawable/xxxx” //引用自己的图片
    imageView.setBackgroudResource(android.R.drawable.yyy) //设置背景图片
    imageView.setImageResource(R.drawable.yyy) //设置前景图片
    CheckBox : 多先框
    CheckBox
    checked=”true”
    checkBox.setCheckedChangeListener(listener);//设置选中状态改变的监听
    RadioButton/RadioGroup : 单选框
    RadioGroup
    oritation=”horizental”
    RadioButton
    checked=”true”
    radioGroup.setCheckedChangeListener(listener);//设置选中状态改变的监听
    Menu : 菜单
    分类: OptionMenu, ContextMenu
    显示方式: 纯java代码(menu), 菜单文件+MenuInflater
    如何显示:
    OptionMenu : onCreateOptionMenu(Menu menu)
    ContextMenu:
    view.setOnCreateContextMenuListener(this)
    onCreateContextMenu(Menu menu)
    选择某个item时的响应
    OptionMenu : onOptionItemSelected(MenuItem item)
    ContextMenu: onContextItemSelected(MenuItem item)
    ProgressBar : 进度条
    分类: 圆形的进度, 水平的
    ProgressBar
    style=”” //指定样式
    progress=”20” //指定进度, 默认为0
    max=”200” //指定进度的最大值, 默认是100
    setProgress(progress)
    getProgress()
    setMax(max)
    getMax()
    SeekBar : 可滑动进度条
    SeekBar: 可以手动设置进度
    setOnSeekBarChangeListener(listener)
    onStartTrackingTouch() : 按下
    onStopTrackingTouch() : 离开
    onProgressChanged(): 滑动变化

    Dialog : 对话框
    AlertDialog
    基本的
    带单选列表
    自定义显示View的
    new AlertDialog.Builder()
    .setTitle(title)
    .setMessage(message)
    .setSingleChoiceItems(String[] items, int itemIndex, Listener)
    .setView(view)
    .setPositiveButton(String text, listener)
    .setNegativeButton(String text, listener)
    .show();

           dialog.dismiss();
    
      ProgressDialog : 带进度条的对话框
           圆形的: ProgressDialog.show(context, title, message);
           水平进度的
                ProgressDialog dialog = new ProgressDialog(context);
                dialog.setProgressStyle(ProgressDialog.STYLE_HORIZENTAL);
                dialog.show();
    
  3. 常用的UI布局
    LinearLayout: 线性布局
    1). 方向(oritation): 水平和垂直
    2). 权重(weight)
    =0(默认), 指定多大占用多大

    0, 剩余多大就占用多大, 如果多个的权重相同就平均分配
    RetiveLayout: 相对布局
    1). 一个视图默认是从左顶点开始布局的
    2). 与兄弟之间的
    a. 同方向对齐 align_xxx (left/top/right/bottom) @id/id值
    b. 反方向对齐 toLeftOf / toRight / above / below @id/id值
    3). 与父亲之间的
    同方向对齐 align_parent_xxx(left/top/right/bottom) true/false
    居中: cent_xxx
    FrameLayout: 帧布局
    TableLayout: 表格式布局

  4. 常用的视图配置的属性
    id
    layout_width
    layout_hight
    background=”颜色/图片”
    src=”前景图片”
    textSize
    text
    textColor
    hint
    inputtype
    maxLines
    layout_grarity: 控制自己在父亲中的位置
    grarity: 控制孩子在自己中的位置
    内边距
    padding 10dp
    padding_xxx(left/top/right/bottom) 10dp
    外边距
    margin 10dp
    margin_xxx(left/top/right/bottom) 10dp

    同方向对齐 align_xxx (left/top/right/bottom) @id/id值
    反方向对齐 toLeftOf / toRight / above / below @id/id值
    同父亲方向对齐 align_parent_xxx(left/top/right/bottom) true/false
    在父亲居中: cent_xxx

  5. ListView的使用
    ListView
    listView.setAdapter(adapter);
    listView.setOnItemClick(listener); //position
    listView.setOnItemLongClick(listener); //position
    Adapter
    ArrayAdapter(context, layout, data)
    SimplAdapter(context, layout, data, from, to)
    List”Map”String, Object”” data //保存要显示的数据
    String[] from //保存map中key
    int[] to //保存view的id
    BaseAdapter
    int getCount() //返回data中数据的个数
    Object getItem(int position) //返回data中position对应的某项数据
    View getView(int position, View itemView) //返回Position所对应的某项view
  6. 得到view对象
    1). 利用复用的itemView
    2). 动态加载view View.inflate(layout)
  7. 得到对应的数据
    Object obj = data.get(postion);
  8. 设置数据
    1). 找到子视图: itemView.findViewById(id)
    2). 取出数据设置进去
  9. 应用练习
    这里写图片描述


  10. 功能描述:
    1). 以列表的形式显示手机内安装的所有应用的程序信息(应用图标和应用名称)
    2). 点击某一项显示应用的名称

  11. 技术点:
    1). 得到手机内安装的所有应用的程序应用图标和应用名称信息的集合(暂时不需要)
    2). 使用ListView和BaseAdapter显示列表
    3). 使用相对布局设计Item的布局
    4). 给每行添加点击事件, 显示应用的名称

测试代码:
主代码

package com.meng.app_graphic;

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.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;

import com.meng.app_bean.AppInfo;

public class MainActivity extends Activity implements OnItemClickListener, OnScrollListener{
    private List<AppInfo> data;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView view = (ListView)findViewById(R.id.list_View_apps);
        MyAdapter adapter =  new MyAdapter();

        data = getAllAppInfos();

        view.setAdapter(adapter);
        view.setOnItemClickListener(this);
        view.setOnScrollListener(this);
    }

    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 MyAdapter extends BaseAdapter{

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

        @Override
        public AppInfo getItem(int position) {
            // TODO Auto-generated method stub
            return data.get(position);
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if(convertView==null){
                convertView = View.inflate(MainActivity.this , R.layout.app_iteam, null);
            }
            AppInfo app = data.get(position);
            ((ImageView)convertView.findViewById(R.id.tv_iteam_icon)).setImageDrawable(app.getIcon());
            ((TextView)convertView.findViewById(R.id.tv_iteam_appname)).setText(app.getAppName());
            return convertView;
        }
    }

//AppInfo代码

package com.meng.app_bean;

import android.graphics.drawable.Drawable;

public class AppInfo {
    private Drawable icon;
    private String appName;
    private String packageName;


    public AppInfo() {
        super();
    }


    public AppInfo(Drawable icon, String appName, String packageName) {
        super();
        this.icon = icon;
        this.appName = appName;
        this.packageName = 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;
    }


    @Override
    public String toString() {
        return "AppInfo [icon=" + icon + ", appName=" + appName
                + ", packageName=" + packageName + "]";
    }


}

//XML配置文件代码
// Activity_main

<”LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:orientation=”vertical” >

<TextView
    android:id="@+id/textView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="应用列表" 
    android:textSize="25sp"
    android:background="#aaffee"
    android:gravity="center"/>

<ListView
    android:id="@+id/list_View_apps"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</ListView>

<”/’LinearLayout>


//_________________________________

//app_iteam
<”?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=”horizontal”
android:layout_gravity=”center_vertical”>

<ImageView
    android:id="@+id/tv_iteam_icon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_launcher" />

<TextView
    android:id="@+id/tv_iteam_appname"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:text="TextView" 
    android:gravity="center"/>

<”/LinearLayout>

//<”应该写为:<
“`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值