当前位置: 首页 > 编程日记 > 正文

Android UI Button 和GridView 的设计--优化(2)

Android 按钮的UI设计,ListView 以及GridView的UI设计

一.按钮的状态

我们一般搞UI设计,按钮通常有三个状态:normal(正常状态);focus(焦点状态),pressed(按下状态)。如下图所示:


                                                                 

我们会在res/drawable目录下定义一个资源文件,比如我们本例中要用到的handle.xml,在里面定义三种状态,每种状态对应一张图片。

代码如下:

按钮Selector
1
<?xml version="1.0" encoding="utf-8"?>
2
<selector xmlns:android="http://schemas.android.com/apk/res/android">
3<item android:state_window_focused="false"  android:drawable="@drawable/handle_normal" />
4<item android:state_focused="true" android:drawable="@drawable/handle_focused" />
5<item android:state_pressed="true" android:drawable="@drawable/handle_pressed" />
6
</selector>

而我们使用这个资源文件的用法只需要引用drawable里的资源文件(android:background="@drawable/handle")代码如下:

View Code
1 <Button  
2     android:id="@+id/handle"  
3     android:layout_width="wrap_content"  
4     android:layout_height="fill_parent"  
5     android:background="@drawable/handle"  
6 /> 

二.android的ListView,GridView   UI设计

Android中的层:

看过《盗梦空间》的人都知道,梦境有多少层,而Android中也有层次之分,在Android中第一层"梦境",我们可以认为是壁纸。第二层就是 应用的Activity,第三层就是放在Activity上的容器(ViewGroup以及它的子类FrameLayout,LinearLayout等 布局对象),当然容器中还可以放容器,你也可以放到N层(最多放多少我还没验证过),总之最后一层就是那些继承于View的控件了(诸 如,Button,TextView等.)

而ListView以及GridView中UI是怎么设计的呢,下面我们看一下效果图:


上图是一个ListView的效果图,正常状态下是白色背景黑色字体,当我们点击一列时会出现黄色背景。这一效果是如何做到的呢?

ListView单元格显示的内容其实是我们事先定义在Layout目录下的一个布局文件,从这个效果来看,我们可以看出它一共有三个“层”

第一层容器(LinearLayout) 背景色为白色:

第二层也是容器(LinearLayout)当按下时,背景色为黄色,把第一层挡住(具体做法可以参照按钮):

第三层是控件(TextView)。

实例 :

上面说了一些,有些人肯定会云里雾里,所以我们直接来个实例,实例做完后,再看一下,效果会更好,大家按照步骤跟我来:

第一步:首先准备素材,准备三个按钮,以及ListView的背景图(上面三个按钮已经有了,下面我只贴一个ListView背景图片):

第二步:新建一个Android工程,命名为UIDemo.目录结构如下图所示:

第三步:在res目录下新建一个drawable文件夹,定义两个资源文件一个是handle.xml另一个为listview_selected.xml,其中handle.xml代码已经在上面贴出,listview_selected.xml代码如下:

listview item selector
1 <?xml version="1.0" encoding="utf-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3     <item android:state_pressed="true" android:drawable="@drawable/list_selector_background_pressed" />
4 </selector>

第四步:修改main.xml布局文件,这里我用到了SliddingDrawer控件,代码如下:

main布局
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="fill_parent"
 5     android:layout_height="fill_parent"
 6     >
 7  <SlidingDrawer  
 8      android:id="@+id/slidingdrawer"  
 9      android:layout_width="fill_parent"  
10      android:layout_height="fill_parent"  
11      android:orientation="horizontal"  
12      android:handle="@+id/handle"  
13      android:content="@+id/content">  
14       <Button  
15              android:id="@+id/handle"  
16              android:layout_width="wrap_content"  
17              android:layout_height="fill_parent"  
18              android:background="@drawable/handle"  
19         /> 
20        <ListView
21                 android:id="@+id/content" 
22                 android:layout_width="fill_parent"  
23              android:layout_height="wrap_content" 
24        />
25  </SlidingDrawer>
26 </LinearLayout>

我们这里用到了ListView控件,而我们ListView控件显示的内容我事先在layout目录下定义两个TextView,命名为listview_layout.xml,代码如下(这里有三层哦!)

listview item 布局
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="fill_parent"
 5     android:layout_height="fill_parent"
 6     android:background="#ffffff"    
 7     >  
 8     <LinearLayout
 9         android:orientation="vertical"
10         android:layout_width="fill_parent"
11         android:layout_height="fill_parent"
12         android:background="@drawable/listview_selected"
13         android:padding="6px"
14     >
15     <TextView
16         android:id="@+id/bookname"  
17         android:layout_width="fill_parent" 
18         android:layout_height="wrap_content" 
19         android:textSize="20px"
20         android:textColor="#000000"
21         />
22     <TextView
23         android:id="@+id/author"  
24         android:layout_width="fill_parent" 
25         android:layout_height="wrap_content" 
26         android:textSize="16px"
27         android:textColor="#000000"
28         />
29         </LinearLayout>
30 </LinearLayout>

第五步:修改主核心程序UIDemo.java,代码如下:

核心代码
 1 package com.tutor.uidemo;
 2 import android.app.Activity;
 3 import android.os.Bundle;
 4 import android.view.LayoutInflater;
 5 import android.view.View;
 6 import android.view.ViewGroup;
 7 import android.widget.BaseAdapter;
 8 import android.widget.ListView;
 9 import android.widget.TextView;
10 public class UIDemo extends Activity {
11    
12     private ListView mListView;
13     @Override
14     public void onCreate(Bundle savedInstanceState) {
15         super.onCreate(savedInstanceState);
16         setContentView(R.layout.main);
17         
18         setupViews();
19     }
20      
21     private void setupViews(){
22         mListView = (ListView)findViewById(R.id.content);
23         mListView.setAdapter(new ListViewAdapter());
24     }
25        
26     private class ListViewAdapter extends BaseAdapter{
27         //这里返回10行,ListView有多少行取决于getCount()方法
28         public int getCount() {
29             return 10;
30         }
31         public Object getItem(int arg0) {
32             return null;
33         }
34         public long getItemId(int arg0) {
35             return 0;
36         }
37         public View getView(int position, View v, ViewGroup parent) {
38             
39             final LayoutInflater inflater = LayoutInflater.from(getApplicationContext());
40             
41             if(v == null){
42                 v = inflater.inflate(R.layout.listview_layout, null);
43             }            
44             TextView mBookName = (TextView)v.findViewById(R.id.bookname);
45             TextView mBookAuthor = (TextView)v.findViewById(R.id.author);
46             
47             mBookName.setText("Android傻瓜教程" + position);
48             mBookAuthor.setText("Frankiewei" + position);
49             return v;
50         }
51         
52     }
53 }

第六步:运行上述工程,查看效果:

运行效果1:


点击按钮效果2:

ListView正常效果3:

ListView点击效果4:

相关文章:

玩转社区开源贡献,看这篇就够了!

来源 | TensorFlow本文来自社区投稿与征集。作者唐源&#xff0c;现任蚂蚁集团技术专家&#xff0c;目前专注于建立 AI 基础架构和自动机器学习平台。本文转自&#xff1a;https://zhuanlan.zhihu.com/p/165098355作为最早一批非谷歌的 TensorFlow 社区贡献者&#xff0c;同时也…

grub2 命令行进入系统

有时候grub引导可能出问题&#xff0c;因此我们需要在grub界面利用命令行进入系统。下边就做一个简单的介绍。1、在grub界面&#xff0c;按c进入命令行界面2、命令行输入“ grub>set root(hd ”之后按tab键&#xff0c;查看你的硬盘&#xff0c;hd0表示第一块硬盘&#xf…

梯度中心化,一行代码加速训练并提升泛化能力

来源 | 晓飞的算法工程笔记优化器(Optimizer)对于深度神经网络在大型数据集上的训练是十分重要的&#xff0c;如SGD和SGDM&#xff0c;优化器的目标有两个&#xff1a;加速训练过程和提高模型的泛化能力。目前&#xff0c;很多工作研究如何提高如SGD等优化器的性能&#xff0c;…

Microsoft程序员测试题

原创&#xff1a;onefi http://www.frontfree.net/2003年6月1日 最近大家在网站上看到不少Microsoft的测试题&#xff0c;引来不少的眼光。我在这里把所有的测试题加以整理&#xff0c;再附上自己的答案。&#xff08;个别题目答案有多种&#xff0c;文本仅代表作者的思路&a…

裸centos安装PCRE时报错解决

2019独角兽企业重金招聘Python工程师标准>>> no acceptable C compiler found in $PATH由于没有gcc的编译环境引起的&#xff0c;yum install gcc就ok unrecognized option -DHAVE_CONFIG_H由于没有gcc-c的编译环境引起的&#xff0c;yum -y install gcc-c 转载于:…

mysql删除开放用户权限

来访用户ODBC 1,在本地的cmd中用root用户进入mysql2,创建一个ODBC的用户create user ODBClocalhost;查看用户是否创建成功select user,host from mysql.user;3,将所有的权限开放给ODBC用户grant all on *.* to ODBClocalhost;查看ODBC用户的权限show grants for ODBC localhost…

AI不止能美颜,美妆迁移这样做 | 赠书

本文内容节选自《深度学习之人脸图像处理&#xff1a;核心算法与案例实践》&#xff0c;作者言有三。美颜和美妆是人脸中很常见的技术&#xff0c;在网络直播以及平常的社交生活中都有很多应用场景。本文重点介绍的是人脸妆造迁移的核心技术及其相关资源。想要了解关于深度学习…

ASP.Net中自定义Http处理及应用之HttpModule篇

HttpHandler实现了类似于ISAPI Extention的功能&#xff0c;他处理请求(Request)的信息和发送响应(Response)。HttpHandler功能的实现通过实现IHttpHandler接口来达到。而HttpModule实现了类似于ISAPI Filter的功能。 HttpModule的实现HttpModules实现了类似于ISAPI Filter的功…

未处理的异常导致基于 ASP.NET 的应用程序意外退出

问题具体见&#xff1a;http://q.cnblogs.com/q/34874/ 相应站点的w3wp.exe 会意外终止 EventLog中的信息&#xff1a; An unhandled exception occurred and the process was terminated. Application ID: DefaultDomain Process ID: 43644 Exception: System.Runtime.Seri…

Git 执行更改

Jerry 克隆库&#xff0c;他决定实现基本字符串操作。于是&#xff0c;他创建文件string.c&#xff0c;在添加内容到 string.c 会这个样子。 #include <stdio.h> int my_strlen(char *s) { char *p s; while (*p) p; return (p - s); } int main(void) { int i; char *s…

静态属性和静态方法2 - C++快速入门22

静态属性和静态方法2 让编程改变世界 Change the world by program 静态方法 嗯&#xff0c;还是静态方法&#xff1f;&#xff01;这阵子有鱼油表示对该方法的特色还是有点云里雾里还有那个神神兮兮的this指针。。。 所以小甲鱼保持务必让你彻底领悟的精神继续和大家探讨&…

浅析.Net共享程序集编程

作者&#xff1a;宋华 赛迪网Net结构里的程序集Assembly是自我描述的安装单元&#xff0c;它在应用程序域(AppDomain)中运行。您必须首先将程序集加载到应用程序域中&#xff0c;然后才能运行该应用程序&#xff0c;并且&#xff0c;同一程序集可以加载到多个应用程序域中&a…

“崩溃!我再也不搞 AI 了”谷歌 AI 专家:别让你的方法打败你!

今天&#xff0c;想跟大家聊聊 Python 人工智能。最近几年&#xff0c;我看过市面上很多 Python和人工智能的教程&#xff0c;基本都是先介绍Python基本语法、dict、tuple 等基本库的使用&#xff0c;最后学习机器学习、深度学习的常用算法......但我与 Google 人工智能开发专家…

Spring MVC 相关资料整理

来源于&#xff1a;http://www.cnblogs.com/ylhssn/p/4062757.html 1、概述 Spring MVC是一种基于Java实现MVC设计模式的请求驱动类型的轻量级Web框架&#xff0c;即使用了MVC架构模式的思想&#xff0c;将web层进行解耦&#xff0c;基于请求-响应模型帮助我们简化日常web系统的…

Wireless-N Configuration

Wireless-N Configuration/Zh CnContents [hide]1 关于Wireless N的一般信息2 基本设置2.1 20 MHz vs 40 MHz2.1.1 2.4GHz频段的描述2.1.2 2.4GHz频段表2.2 无线安全设置2.3 高级设置3 Problems and Resolution3.1 Actual Speeds3.2 Testing3.3 Device Drivers4 Device Specifi…

为.Net程序集添加资源

作者&#xff1a;宋华 本文选自&#xff1a;赛迪网 2002年12月06日 在.Net结构中&#xff0c;程序集Assembly(也称着程序集或托管Dll)是自我描述的安装单元&#xff0c;它可以只包括一个PE&#xff08;可移植可执行&#xff09;格式的Dll或exe文件&#xff0c;也可以由多…

这5个 AI 用例,转变了传统商务沟通

作者&#xff5c;Lanre Onibalusi译者 |天道酬勤&#xff0c;责编 | 晋兆雨封图 | CSDN 付费下载自视觉中国很少有人会想到这样一种情景&#xff1a;世界上几乎有一半的国家处于封锁状态&#xff08;可能长达数周或几个月&#xff09;&#xff0c;并且大多数人的工作能力也受到…

cocos2dx 3.x(动态改变精灵的背景图片)

//更换精灵CCSprite的图片有两种方式。 //直接通过图片更换 //使用setTexture(CCTexture2D*)函数&#xff0c;可以重新设置精灵类的纹理图片。 // auto bg Sprite::create(); Texture2D* texture Director::getInstance()->getTextureCache()->addImage("bg2.png&…

如何在.NET中创建服务型组件

作者&#xff1a;张劲松 本文选自&#xff1a;赛迪网 2002年12月03日 对于在WINDOWS上作过一些开发的程序员来说&#xff0c;COM&#xff0b;应该是不会感到陌生的吧。COM&#xff0b;代表了Microsoft在COM技术平台上的最高水平&#xff0c;也是Microsoft藉以和J2EE抗衡的…

flex viewstack的简单应用

1 Flex API里面介绍viewstack&#xff1a; MX ViewStack 导航器容器由一组彼此上下堆叠的子容器组成&#xff0c;其中一次只可以显示一个子容器。选择另一个子容器后&#xff0c;它将显示在原来子容器的位置处&#xff0c;所以看起来好像此子容器替换了原来的子容器。…

在线等:“实习拿到两个不太好的offer,去腾讯还是去阿里?”

“你永远都不知道明天和‘公司的意外’哪个先来。”疫情期间&#xff0c;这是我们最战战兢兢的心情。但是显然&#xff0c;有些人体会不了。这份行业数据&#xff0c;让笔者“柠檬”了。1疫情下&#xff0c;有的公司宣布破产有的公司增长413%疫情期间&#xff0c;人工智能的价值…

如何成功地在亚洲植入敏捷和DevOps

\关键要点\\首先要植入西方文化的要素。\\t使用价值流映射有助于打破文化障碍。\\t让上层管理者参与进来。\\t黑客节&#xff08;Hackfest&#xff09;将有助于减少前置期时间。\\t理解文化差异的影响。\\\我读过的一篇文章说Scrum并不适合于亚洲。作者所说的非常正确&#xff…

浅析.Net下的AppDomain编程

作者&#xff1a;宋华 发文时间&#xff1a;2002 我们知道&#xff0c;进程是操作系统用于隔离众多正在运行的应用程序的机制。在&#xff0e;Net之前&#xff0c;每一个应用程序被加载到单独的进程中&#xff0c;并为该进程指定私有的虚拟内存。进程不能直接访问物理内存&…

AI 医生正式上岗了?AI 医疗结合迎爆发点!

作者 | 硬核云顶宫责编 | 晋兆雨封图 | CSDN 付费下载自视觉中国这些年&#xff0c;人工智能应用于医学界是非常热的话题。在医学三大杂志——新英格兰医学杂志、柳叶刀、JAMA上&#xff0c;AI与医疗相结合的论文&#xff0c;占比越来越高。其中最明显的趋势是将医生从繁重的诊…

Android之解析Android Map地图返回的Json数据

先上一下需要解析的Json数据&#xff1a;{"results" : [{"address_components" : [{"long_name" : "荔湾区","short_name" : "荔湾区","types" : [ "sublocality", "political" ]}…

9成P2P平台面临出局,千亿资本何去何从?

【阅读原文】作者&#xff1a;楠沨据研究院数据中心统计&#xff0c;截至2016年10月底&#xff0c;我国 P2P贷款余额已经攀升至7,470亿元左右&#xff0c;环比增长6.0%。进入10月份百强榜的平台&#xff0c;其贷款余额总计3,275亿元&#xff0c;占到整个行业的44%&#xff1b;榜…

关于Transformer,那些的你不知道的事

作者 | 小莫来源 | 阿泽的学习笔记&#xff08;ID: aze_learning&#xff09;引言本博客主要是本人在学习 Transformer 时的「所遇、所思、所解」&#xff0c;通过以 「十六连弹」 的方式帮助大家更好的理解该问题。十六连弹为什么要有 Transformer?Transformer 作用是什么&am…

用ASP.NET上传大文件

作者&#xff1a;思归 微软MVP http://blog.joycode.com/saucer/我们在上传大文件时都遇到过这样或那样的问题。设置很大的maxRequestLength值并不能完全解决问题&#xff0c;因为ASP.NET会block直到把整个文件载入内存后&#xff0c;再加以处理。实际上&#xff0c;如果…

中国最齐全的主要电子商务网站(B2C)

中国最齐全的主要电子商务网站(B2C)------[连载之电子商务网站架构]访问量超过100万的电子商务网站技术架构版本&#xff1a;V1出处&#xff1a;http://jimmyli.blog.51cto.com/ 我站在巨人肩膀上Jimmy Li作者&#xff1a;Jimmy Li关键词&#xff1a;中国 电子商务 网站 B2C连接…

怎么安装MYSQL5.0的JDBC驱动

1、下载mysql for jdbc driver. http://dev.mysql.com/downloads/connector/j/3.1.htmlMySQL Connector/J is distributed as a .zip or .tar.gz archive containing the sources and class files as well as a class-file only "binary" .jar archive named "…