`
yansaibo
  • 浏览: 64056 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Android android控件动态使用

阅读更多
核心提示:android控件动态使用 通常android里的界面布局都是在XML里设定好的 也就是说 在程序中,不能更改界面上的元素数量等, 比如上图所示的一个


android控件动态使用


通常android里的界面布局都是在XML里设定好的
也就是说
在程序中,不能更改界面上的元素数量等,
比如上图所示的一个 聊天会话界面
当有人发言就要增加一个TextView,
这就是动态增加控件,
这就不能在XML里事先布局了!

不过还好,ANDROID使用控件也不是只有XML这一种方式
以下代码就是动态生产控件的JAVA程序
实现效果如上图


Java代码
1.  1.  package com.fetion.android;      
2.  2.      
3.  3. import android.app.Activity;      
4.  4. import android.content.Context;      
5.  5. import android.graphics.Color;      
6.  6. import android.os.Bundle;      
7.  7. import android.text.Layout;      
8.  8. import android.text.format.DateFormat;      
9.  9. import android.util.Log;      
10. 10. import android.view.KeyEvent;      
11. 11. import android.view.ViewGroup.LayoutParams;      
12. 12. import android.widget.*;      
13. 13.      
14. 14. import java.util.Calendar;      
15. 15.      
16. 16. /**    
17. 17.  * 测试动态使用android控件    
18. 18.  * @author gaolei by 20090827    
19. 19.  */     
20. 20. public class fetion2009 extends Activity      
21. 21. {      
22. 22.     /** Called when the activity is first created. */     
23. 23.     ProgressBar pb;                 //进度条控件,但拿出来是为了可控,动态改变其进度      
24. 24.     //聊天对话的底色是间隔的      
25. 25.     private static final int[] bg = { Color.WHITE, Color.GRAY };      
26. 26.     private static int bgIndex=0;   //聊天对话的底色 当前色应该是bg中的索引值      
27. 27.           
28. 28.     //以下 布局参数 标识当前控件的宽高情况FILL_PARENT=占据全部父控件,WRAP_CONTENT=仅包裹控件中的内容//还有其他作用比如左右边距,这里我们使用默认的      
29. 29.     private LinearLayout.LayoutParams LP_FF = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);      
30. 30.     private LinearLayout.LayoutParams LP_FW = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);      
31. 31.     private LinearLayout.LayoutParams LP_WW = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);      
32. 32.           
33. 33.     @Override     
34. 34.     public void onCreate( Bundle savedInstanceState )      
35. 35.     {      
36. 36.         super.onCreate( savedInstanceState );      
37. 37.               
38. 38.         //聊天对白窗口需要滚动      
39. 39.         ScrollView sv   = new ScrollView(this);      
40. 40.         sv.setLayoutParams( LP_FF );      
41. 41.               
42. 42.         LinearLayout layout = new LinearLayout(this);   //线性布局方式      
43. 43.         layout.setOrientation( LinearLayout.VERTICAL ); //控件对其方式为垂直排列      
44. 44.         layout.setBackgroundColor( 0xff00ffff );        //设置布局板的一个特殊颜色,这可以检验我们会话时候是否有地方颜色不正确!      
45. 45.      
46. 46.         //丰富聊天页面,也顺带测试页面滚动效果,增加了10个重复的对话内容      
47. 47.         for( int i=0; i<10; i++ )      
48. 48.         {      
49. 49.             setSendMsg( layout, this, getCurrColor(), i+"聊天内容在这里。。" );      
50. 50.         }      
51. 51.               
52. 52.         //发送文件效果1,圆环进度条,也是ProgressBar默认的效果      
53. 53.         setSendFile( layout, this, getCurrColor(),"我的照片.jpg");      
54. 54.               
55. 55.         //发送文件效果 2,矩行进度条,也是ProgressBar的风格设置成 style="?android:attr/progressBarStyleHorizontal"的效果      
56. 56.         setSendFile2( layout, this, getCurrColor(),"我的照片.jpg");      
57. 57.               
58. 58.         for( int i=0; i<10; i++ )      
59. 59.         {      
60. 60.             setSendMsg( layout, this, getCurrColor(), i+"聊天内容在这里。。" );      
61. 61.         }      
62. 62.         sv.addView( layout );   //把线性布局加入到ScrollView中      
63. 63.         setContentView(sv);     //设置当前的页面为ScrollView      
64. 64.     }      
65. 65.           
66. 66.     /**    
67. 67.      * 获取当前聊天对白的底色值    
68. 68.      * @return 当前聊天对白的底色值    
69. 69.      */     
70. 70.     private int getCurrColor()      
71. 71.     {      
72. 72.         return bg[ (++bgIndex)% bg.length ];      
73. 73.     }      
74. 74.           
75. 75.     /**    
76. 76.      * 动态增加一个聊天内容    
77. 77.      * 这里为了简化编程把 某人说 和 内容放到一个TextView中,可以根据设计文档拆成2个TextView分别显示,设置字体等    
78. 78.      * @param layout    TextView 控件欲添加到的目标layout    
79. 79.      * @param context   构建View控件的必须参数 既View控件的环境    
80. 80.      * @param bgColur   TextView 控件的背景色    
81. 81.      * @param MSG       TextView 控件要现实的文本内容    
82. 82.      */     
83. 83.     private void setSendMsg(LinearLayout layout, Context context, int bgColur, String MSG)      
84. 84.     {      
85. 85.         TextView tv = new TextView(context);    //普通聊天对话      
86. 86.         //获取一个全局的日历实例,用于获取当前系统时间并格式化成小时:分钟形式,仅用于测试,这里的时间应该是由其他程序提供      
87. 87.         tv.setText( "某人  说: ["+DateFormat.format( "kk:mm" , Calendar.getInstance())+"]\n"+MSG );      
88. 88.         tv.setBackgroundColor( bgColur );      
89. 89.         layout.addView( tv );      
90. 90.     }      
91. 91.           
92. 92.     /**    
93. 93.      * 动态增加一个发送文件的会话条目    
94. 94.      * 这里因为是发送进度条与取消按钮的水平对其方式,所以需要增加一个LinearLayout    
95. 95.      * @param layout    欲添加到的目标layout    
96. 96.      * @param context   构建 View控件的必须参数 既View控件的环境    
97. 97.      * @param bgColur   控件的背景色    
98. 98.      * @param MSG       控件要现实的文本内容    
99. 99.      */     
100.100.     private void setSendFile(LinearLayout layout, Context context, int bgColur, String fileName)      
101.101.     {      
102.102.         //把 某人说 [时间]      
103.103.         //要发送的文件信息 全都交给 setSendMsg 绘制吧!      
104.104.         setSendMsg( layout, context, bgColur, "正在发送"+fileName );      
105.105.         //水平排列2个控件需要一个LinearLayout,排列方式默认的就是水平排列      
106.106.         LinearLayout myLayout = new LinearLayout(context);      
107.107.         //这个 LinearLayout控件的背景色需要设置,要不就会显示出主LinearLayout的颜色了,即0xff00ffff      
108.108.         myLayout.setBackgroundColor( bgColur );      
109.109.      
110.110.         //动态创建一个 ProgressBar,以默认属性加入到myLayout中      
111.111.         ProgressBar pb = new ProgressBar(context);      
112.112.         pb.setLayoutParams( LP_WW );      
113.113.         myLayout.addView( pb );      
114.114.      
115.115.         //动态创建一个 Button,以默认属性加入到myLayout中      
116.116.         Button bt = new Button(context);      
117.117.         bt.setLayoutParams( LP_WW );      
118.118.         bt.setText( " 取消" );      
119.119.         myLayout.addView( bt );      
120.120.         //将水平布局的 LinearLayout及其内如所有控件添加到主layout中      
121.121.         layout.addView( myLayout );      
122.122.     }      
123.123.           
124.124.     /**    
125.125.      * 动态增加一个发送文件的会话条目    
126.126.      * 但为了保障ProgressBar和 Button的底色符合设计要求,增加了一个LinearLayout,并设置其背景色    
127.127.      * @param layout    欲添加到的目标layout    
128.128.      * @param context   构建 View控件的必须参数 既View控件的环境    
129.129.      * @param bgColur   控件的背景色    
130.130.      * @param MSG       控件要现实的文本内容    
131.131.      */     
132.132.     private void setSendFile2(LinearLayout layout, Context context, int bgColur, String fileName)      
133.133.     {      
134.134.         setSendMsg( layout, context, bgColur, "正在发送"+fileName );      
135.135.      
136.136.         LinearLayout myLayout = new LinearLayout(context);       
137.137.         myLayout.setBackgroundColor( bgColur );      
138.138.         myLayout.setOrientation( LinearLayout.VERTICAL );//控件对其方式为垂直,默认为水平      
139.139.               
140.140.         //ProgressBar 的默认风格是圆环型,这里需要设置她的风格为Horizontal(水平线)      
141.141.         pb = new ProgressBar(context,null,android.R.attr.progressBarStyleHorizontal);      
142.142.         pb.setLayoutParams( LP_FW );      
143.143.         pb.setProgress( 45 );           // 设置第1进度为45      
144.144.         pb.setSecondaryProgress( 0 );   //这里我们不需要第2进度,所以为0      
145.145.         myLayout.addView( pb );      
146.146.               
147.147.         Button bt = new Button(context);      
148.148.         bt.setLayoutParams( LP_WW );      
149.149.         bt.setText( "取消" );      
150.150.         myLayout.addView( bt );      
151.151.               
152.152.         layout.addView( myLayout );      
153.153.     }      
154.154.           
155.155.     @Override     
156.156.     public boolean onKeyDown(int keyCode, KeyEvent event)      
157.157.     {      
158.158.         Log.d("onKeyDown:", " keyCode=" + keyCode + " KeyEvent=" + event);      
159.159.         switch (keyCode)      
160.160.         {      
161.161.             case KeyEvent.KEYCODE_DPAD_UP:      
162.162.      
163.163.             break;      
164.164.             case KeyEvent.KEYCODE_DPAD_DOWN:      
165.165.      
166.166.             break;      
167.167.             case KeyEvent.KEYCODE_DPAD_LEFT:      
168.168.                 //右左按键可以控制第一进度的增减      
169.169.                 pb.setProgress( pb.getProgress()-5 );      
170.170.             break;      
171.171.             case KeyEvent.KEYCODE_DPAD_RIGHT:      
172.172.                 pb.setProgress( pb.getProgress()+5 );      
173.173.             break;      
174.174.             case KeyEvent.KEYCODE_DPAD_CENTER:      
175.175.      
176.176.             break;      
177.177.             case KeyEvent.KEYCODE_0:      
178.178.             break;      
179.179.         }      
180.180.         return super.onKeyDown(keyCode, event);      
181.181.     }      
182.182. }    
分享到:
评论

相关推荐

    Android动态改变控件的位置

    在Android开发中,有时我们需要根据用户的操作或者特定的业务需求,动态地改变界面中的控件位置。这在创建可交互、灵活多变的用户界面时非常常见,例如游戏中的元素布局调整、聊天应用的消息气泡定位等。这篇博客...

    Android 表格控件-动态实现表格效果(内容、样式可扩展)

    总结,实现一个动态且样式可扩展的Android表格控件,关键在于理解TableLayout的基本用法,以及如何在代码中动态创建和管理视图。同时,结合自定义View和样式设计,可以构建出满足各种需求的表格组件。在实际开发中,...

    Android自定义导航控件动态添加控件一

    本教程将深入探讨如何在Android应用中创建一个自定义的导航控件,并通过动态添加控件来实现功能的扩展。我们将主要关注以下几个方面: 1. **自定义视图类**: 自定义导航控件的第一步是创建一个新的视图类,继承自...

    Android自定义组合控件

    本文将深入探讨如何根据【标题】"Android自定义组合控件"和【描述】中的内容,结合【标签】"android 自定义控件 组合控件 自定义属性",来创建一个自己的自定义组合控件。 首先,我们要明白什么是自定义控件。在...

    Android 动态生成多个控件并实现点击

    在Android开发中,有时我们需要根据特定需求动态地创建和管理UI元素,比如在用户交互时按需生成按钮、文本输入框等控件。这个过程涉及到Android的布局管理、控件的实例化、事件监听以及视图层次结构的构建。下面我们...

    Android 流程步骤控件

    本篇文章将深入探讨如何在Android中实现这样的控件,以及其在实际应用中的设计和使用。 一、步骤控件的基本概念 步骤控件通常由一系列表示步骤的小图标或文字组成,每个步骤代表一个具体的操作或状态。用户在完成每...

    android表格控件动态生成表格源码

    本资源"android表格控件动态生成表格源码"提供了一种解决方案,它基于Eclipse IDE,可以帮助开发者实现动态生成表格的功能,同时解决了表格内容显示不全的问题,通过集成滚动条确保所有数据都能被用户查看。...

    android文件上传控件

    总之,Android文件上传涉及到Android的文件操作、HTTP请求、服务器端交互以及UI控件的使用。通过合理利用现有的库和工具,可以高效实现这一功能。在实际开发中,注意处理网络异常、权限问题以及用户界面的优化,确保...

    android完美下拉框控件

    在布局XML文件中,可以使用`&lt;Spinner&gt;`标签来声明一个Spinner控件,然后通过设置`android:entries`属性来指定显示的列表项。例如: ```xml android:id="@+id/my_spinner" android:layout_width="match_parent" ...

    android 程序中动态添加删除控件或布局

    在Android应用程序开发中,动态添加和删除控件或布局是一项常用且重要的技能。这使得我们的应用能够根据用户交互或者特定条件灵活地改变界面。本文将深入探讨如何在Android程序中实现这一功能,以及如何设置控件的...

    android一款仪表盘控件

    描述中提到“测试可以安装”,这可能意味着该控件作为一个库项目,可以通过Gradle等依赖管理工具添加到Android项目中,以便开发者在自己的应用中方便地使用。通常,开发者会在build.gradle文件中添加对应的依赖,如...

    如何让安卓(Android)子控件超出父控件的范围显示

    通过使用`android:layout_gravity="bottom"`,我们可以确保这些子控件在父控件的底部对齐,即使它们的部分内容超出了父控件的边界。 例如,最后一个`RelativeLayout`具有一个圆形背景和一个指向上的箭头图标,这...

    android自定义IP控件

    在Android开发中,自定义控件是提升用户体验和界面独特性的重要手段。...通过深入理解其内部实现,我们可以学习到如何在Android中创建和使用自定义控件,以及如何处理输入验证和格式化等常见问题。

    android基础控件使用

    以下是一些主要的Android基础控件及其使用方法的详细说明: 1. **按钮(Button)** - `Button`控件用于实现点击事件,用户可以触发某种操作。可以通过`setOnClickListener`设置监听器,如: ```java Button button...

    android自定义分页控件

    在Android开发中,分页控件是不可或缺的一部分,它能够帮助用户更有效地浏览大量数据,同时减轻服务器压力。本教程将深入探讨如何在Android中创建一个自定义分页控件,以便实现高效、用户友好的界面。 首先,我们...

    Android控件大全以及各布局控件的使用方式

    ### Android控件大全及各布局控件的使用详解 #### 一、Android控件概述 Android控件是指在Android应用程序中用于实现用户界面的各种组件。这些控件包括但不限于按钮、文本框、列表视图等。熟悉并掌握这些控件对于...

    Android随意拖动控件视图

    本文将深入探讨如何实现这一功能,涉及的知识点主要包括Android控件触摸事件处理、坐标转换以及布局更新。 首先,我们要了解Android中的触摸事件处理机制。在Android中,触摸事件由MotionEvent类来表示,包括ACTION...

    android常用UI控件的使用例子

    这篇博文“android常用UI控件的使用例子”可能会深入探讨一些常见的Android UI组件及其用法,帮助开发者更好地理解和应用这些控件。由于没有具体的博文内容,我将根据一般知识和经验,详细介绍一些Android开发中的...

    Android 分层级筛选控件

    总的来说,创建一个分层级筛选控件涉及到了Android UI组件的使用、数据绑定、事件处理、动画制作等多个方面,是提升Android开发技能的良好实践。通过不断学习和实践,开发者可以更好地满足用户对复杂交互功能的需求...

    Android-一个Android图片缩放查看控件支持手势

    这个名为"Android-一个Android图片缩放查看控件支持手势"的项目,旨在提供一个自定义的视图控件,它允许用户通过手势进行图片的放大、缩小以及平移操作,提升用户体验。下面我们将深入探讨这个控件的关键知识点和...

Global site tag (gtag.js) - Google Analytics