国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android控件動態(tài)用法實(shí)例分析

2020-04-11 11:23:45
字體:
供稿:網(wǎng)友

本文實(shí)例講述了Android控件動態(tài)用法。分享給大家供大家參考。具體如下:

通常android里的界面布局都是在XML里設(shè)定好的
也就是說 在程序中,不能更改界面上的元素數(shù)量等,
比如聊天會話界面

當(dāng)有人發(fā)言就要增加一個TextView,這就是動態(tài)增加控件,這就不能在XML里事先布局了!

不過還好,ANDROID使用控件也不是只有XML這一種方式

以下代碼就是動態(tài)生產(chǎn)控件的JAVA程序

package com.fetion.android;import android.app.Activity;import android.content.Context;import android.graphics.Color;import android.os.Bundle;import android.text.Layout;import android.text.format.DateFormat;import android.util.Log;import android.view.KeyEvent;import android.view.ViewGroup.LayoutParams;import android.widget.*;import java.util.Calendar;/** * 測試動態(tài)使用android控件 * @author gaolei by 20090827 */public class fetion2009 extends Activity{  /** Called when the activity is first created. */  ProgressBar pb; //進(jìn)度條控件,但拿出來是為了可控,動態(tài)改變其進(jìn)度  //聊天對話的底色是間隔的  private static final int[] bg = { Color.WHITE, Color.GRAY };  private static int bgIndex=0;  //聊天對話的底色 當(dāng)前色應(yīng)該是bg中的索引值  //以下 布局參數(shù) 標(biāo)識當(dāng)前控件的寬高情況FILL_PARENT=占據(jù)全部父控件,WRAP_CONTENT=僅包裹控件中的內(nèi)容//還有其他作用比如左右邊距,這里我們使用默認(rèn)的  private LinearLayout.LayoutParams LP_FF = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);  private LinearLayout.LayoutParams LP_FW = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);  private LinearLayout.LayoutParams LP_WW = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);  @Override  public void onCreate( Bundle savedInstanceState )  {    super.onCreate( savedInstanceState );    //聊天對白窗口需要滾動    ScrollView sv  = new ScrollView(this);    sv.setLayoutParams( LP_FF );    LinearLayout layout = new LinearLayout(this); //線性布局方式    layout.setOrientation( LinearLayout.VERTICAL ); //控件對其方式為垂直排列    layout.setBackgroundColor( 0xff00ffff ); //設(shè)置布局板的一個特殊顏色,這可以檢驗(yàn)我們會話時候是否有地方顏色不正確!    //豐富聊天頁面,也順帶測試頁面滾動效果,增加了10個重復(fù)的對話內(nèi)容    for( int i=0; i<10; i++ )    {      setSendMsg( layout, this, getCurrColor(), i+"聊天內(nèi)容在這里。。" );    }    //發(fā)送文件效果1,圓環(huán)進(jìn)度條,也是ProgressBar默認(rèn)的效果    setSendFile( layout, this, getCurrColor(),"我的照片.jpg");    //發(fā)送文件效果2,矩行進(jìn)度條,也是ProgressBar的風(fēng)格設(shè)置成style="?android:attr/progressBarStyleHorizontal"的效果    setSendFile2( layout, this, getCurrColor(),"我的照片.jpg");    for( int i=0; i<10; i++ )    {      setSendMsg( layout, this, getCurrColor(), i+"聊天內(nèi)容在這里。。" );    }    sv.addView( layout );  //把線性布局加入到ScrollView中    setContentView(sv);   //設(shè)置當(dāng)前的頁面為ScrollView  }  /**   * 獲取當(dāng)前聊天對白的底色值   * @return 當(dāng)前聊天對白的底色值   */  private int getCurrColor()  {    return bg[ (++bgIndex)% bg.length ];  }  /**   * 動態(tài)增加一個聊天內(nèi)容   * 這里為了簡化編程把 某人說 和 內(nèi)容放到一個TextView中,可以根據(jù)設(shè)計文檔拆成2個TextView分別顯示,設(shè)置字體等   * @param layout  TextView控件欲添加到的目標(biāo)layout   * @param context  構(gòu)建View控件的必須參數(shù) 既View控件的環(huán)境   * @param bgColur  TextView控件的背景色   * @param MSG    TextView控件要現(xiàn)實(shí)的文本內(nèi)容   */  private void setSendMsg(LinearLayout layout, Context context, int bgColur, String MSG)  {    TextView tv = new TextView(context);  //普通聊天對話    //獲取一個全局的日歷實(shí)例,用于獲取當(dāng)前系統(tǒng)時間并格式化成小時:分鐘形式,僅用于測試,這里的時間應(yīng)該是由其他程序提供    tv.setText( "某人 說: ["+DateFormat.format( "kk:mm" , Calendar.getInstance())+"]/n"+MSG );    tv.setBackgroundColor( bgColur );    layout.addView( tv );  }  /**   * 動態(tài)增加一個發(fā)送文件的會話條目   * 這里因?yàn)槭前l(fā)送進(jìn)度條與取消按鈕的水平對其方式,所以需要增加一個LinearLayout   * @param layout  欲添加到的目標(biāo)layout   * @param context  構(gòu)建View控件的必須參數(shù) 既View控件的環(huán)境   * @param bgColur  控件的背景色   * @param MSG    控件要現(xiàn)實(shí)的文本內(nèi)容   */  private void setSendFile(LinearLayout layout, Context context, int bgColur, String fileName)  {    //把 某人說 [時間]    //要發(fā)送的文件信息 全都交給 setSendMsg 繪制吧!    setSendMsg( layout, context, bgColur, "正在發(fā)送"+fileName );    //水平排列2個控件需要一個LinearLayout,排列方式默認(rèn)的就是水平排列    LinearLayout myLayout = new LinearLayout(context);    //這個LinearLayout控件的背景色需要設(shè)置,要不就會顯示出主LinearLayout的顏色了,即0xff00ffff    myLayout.setBackgroundColor( bgColur );    //動態(tài)創(chuàng)建一個ProgressBar,以默認(rèn)屬性加入到myLayout中    ProgressBar pb = new ProgressBar(context);    pb.setLayoutParams( LP_WW );    myLayout.addView( pb );    //動態(tài)創(chuàng)建一個Button,以默認(rèn)屬性加入到myLayout中    Button bt = new Button(context);    bt.setLayoutParams( LP_WW );    bt.setText( "取消" );    myLayout.addView( bt );    //將水平布局的LinearLayout及其內(nèi)如所有控件添加到主layout中    layout.addView( myLayout );  }  /**   * 動態(tài)增加一個發(fā)送文件的會話條目   * 但為了保障ProgressBar和Button的底色符合設(shè)計要求,增加了一個LinearLayout,并設(shè)置其背景色   * @param layout  欲添加到的目標(biāo)layout   * @param context  構(gòu)建View控件的必須參數(shù) 既View控件的環(huán)境   * @param bgColur  控件的背景色   * @param MSG    控件要現(xiàn)實(shí)的文本內(nèi)容   */  private void setSendFile2(LinearLayout layout, Context context, int bgColur, String fileName)  {    setSendMsg( layout, context, bgColur, "正在發(fā)送"+fileName );    LinearLayout myLayout = new LinearLayout(context);    myLayout.setBackgroundColor( bgColur );    myLayout.setOrientation( LinearLayout.VERTICAL );//控件對其方式為垂直,默認(rèn)為水平    //ProgressBar的默認(rèn)風(fēng)格是圓環(huán)型,這里需要設(shè)置她的風(fēng)格為Horizontal(水平線)    pb = new ProgressBar(context,null,android.R.attr.progressBarStyleHorizontal);    pb.setLayoutParams( LP_FW );    pb.setProgress( 45 ); //設(shè)置第1進(jìn)度為45    pb.setSecondaryProgress( 0 ); //這里我們不需要第2進(jìn)度,所以為0    myLayout.addView( pb );    Button bt = new Button(context);    bt.setLayoutParams( LP_WW );    bt.setText( "取消" );    myLayout.addView( bt );    layout.addView( myLayout );  }  @Override  public boolean onKeyDown(int keyCode, KeyEvent event)  {    Log.d("onKeyDown:", " keyCode=" + keyCode + " KeyEvent=" + event);    switch (keyCode)    {      case KeyEvent.KEYCODE_DPAD_UP:      break;      case KeyEvent.KEYCODE_DPAD_DOWN:      break;      case KeyEvent.KEYCODE_DPAD_LEFT:        //右左按鍵可以控制第一進(jìn)度的增減        pb.setProgress( pb.getProgress()-5 );      break;      case KeyEvent.KEYCODE_DPAD_RIGHT:        pb.setProgress( pb.getProgress()+5 );      break;      case KeyEvent.KEYCODE_DPAD_CENTER:      break;      case KeyEvent.KEYCODE_0:      break;    }    return super.onKeyDown(keyCode, event);  }}

希望本文所述對大家的Android程序設(shè)計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 京山县| 桂平市| 巧家县| 万源市| 安平县| 大新县| 登封市| 高雄县| 安宁市| 临汾市| 衡南县| 正安县| 尚义县| 雅江县| 闸北区| 吉安市| 汶川县| 启东市| 萨迦县| 罗定市| 河北省| 腾冲县| 北京市| 遂川县| 遵义市| 罗定市| 启东市| 秭归县| 连山| 通山县| 临西县| 霍山县| 平塘县| 丹寨县| 开远市| 宁陵县| 久治县| 虎林市| 武定县| 司法| 固镇县|