Android開發(fā)(5) 代碼方式生成表單

前言

我們以前的幾個例子中都是直接使用設計器來制作的表單視圖苹丸,實際在開發(fā)中經(jīng)常會遇到使用代碼來動態(tài)的添加控件到視圖中愤惰。

一般步驟是:

1.生成一個控件,比如new Button赘理。
2.設置控件的各種屬性宦言,比如 設置某個Button的顯示文字,綁定事件等商模。
3.將這個控件追加到一個容器控件中奠旺,作為這個容器控件的子控件。比如:view.AddView(...).
4.在追加的父控件內時施流,可以指定布局的方式响疚。

在動態(tài)添加完畢后,我們還需要能夠獲得對這些動態(tài)添加后的控件的值瞪醋。比如我添加一個文本框忿晕,我還想獲得用戶在這個文本框里填入的值。android的view控件里银受,都有個屬性Tag践盼,我們可以很方便的使用這個屬性來存放我們的特殊標記鸦采,用這個特殊標記來標記我們的控件。

獲取控件的步驟:

1.獲得容器控件

2.遍歷容器控件的包含的所有子控件咕幻,根據(jù)我們設置的標識Tag屬性渔伯,或者判斷控件的類型來找到我們想要的控件

3.從找到的控件里讀取到我們想要的值。

4.將收集到的值存儲或其他處理

下面是生成表單的操作

    for(int i = 0; i< 5 ; i++)
    {
        TableRow row = new TableRow(this);
        TextView txtView1 = new TextView(this);
        EditText edit1 = new EditText(this);
        
        txtView1.setText("lable"+i+":");
        txtView1.setTag("lable"+i);
        txtView1.setPadding(3, 3, 3, 3);
        edit1.setTag("text"+i);
        edit1.setPadding(3, 3, 3, 3);
        
        //LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
        row.addView(txtView1);
        row.addView(edit1); 
      
        LayoutParams layoutParams2 = new LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
        _pnlContent.addView(row,layoutParams2);
    }
    _pnlContent.setColumnStretchable(1,true);

上面的代碼演示了創(chuàng)建多個TableRow控件的過程谅河,TableRow是TableLayout的子控件咱旱。我們會在界面上放置一個TableLayout控件,然后在動態(tài)創(chuàng)建TableRow绷耍,TableLayout是個表格布局吐限,TableRow表格里的行。也就是說褂始,我們放置了一個靜態(tài)的表格诸典,然后動態(tài)的創(chuàng)建這個表格里的行。

LayoutParams 是布局參數(shù)的意思崎苗。在將創(chuàng)建好的子控件添加到它的父容器控件時狐粱,可以同時指定一個布局參數(shù)。這個布局參數(shù)指示了這個子控件如何在父容器控件里呈現(xiàn)胆数。

LayoutParams 的其中一個構造方法接受兩個參數(shù)肌蜻,指示了寬和高的布局,我們可以指定

    ViewGroup.LayoutParams.WRAP_CONTENT必尼,以自身內容大小自動適應

    ViewGroup.LayoutParams.FILL_PARENT蒋搜, 填充父容器



    setColumnStretchable是TableRow的方法,它指示了第2列(列索引為1)是可以拉伸的判莉。

從視圖中讀取控件的內容:

我們在一個按鈕的單擊事件里寫下這樣的代碼

  StringBuffer sb = new StringBuffer();
for(int i = 0 ; i< _pnlContent.getChildCount();i++)
{
 TableRow tr = (TableRow)_pnlContent.getChildAt(i);
 
 TextView txt1  = (TextView)tr.getChildAt(0);
 EditText et1  = (EditText)tr.getChildAt(1);
 sb.append(String.format("{%s}={%s}\n", txt1.getTag().toString(),
   et1.getText() ));
}
Toast.makeText(getApplicationContext(), sb.toString(), 0).show();

如上面的代碼顯示豆挽。我們遍歷容器控件,使用方法getChildAt(0);獲得指定索引的子控件券盅,合理轉型后為我們所用帮哈。我們還可以使用Tag存放我們的額外信息。

單元格的合并

在開發(fā)過程中還會遇到使用代碼的方式來設置單元格的合并锰镀,方法如下:

LayoutParams layoutParams2 = null;
    layoutParams2 = new LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
    
    // 判斷 typeDesc的類型生成控件
    TableRow row = null;
    Button btnRemove = null;
    row = new TableRow(getContext());
    
    EditText editText = null;
    editText = new EditText(getContext());

    TableRow.LayoutParams rowSpanLayout = new TableRow.LayoutParams(
            TableRow.LayoutParams.FILL_PARENT, 
            TableRow.LayoutParams.WRAP_CONTENT);          
    rowSpanLayout.span = 2; 
    editText.setLayoutParams(rowSpanLayout);
    
    btnRemove = new Button(getContext());
    btnRemove.setText("-");
    
    row.addView(editText);
    row.addView(btnRemove);
    
    tablleLayout.addView(row,layoutParams2);

全文完娘侍,代碼下載

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市互站,隨后出現(xiàn)的幾起案子私蕾,更是在濱河造成了極大的恐慌,老刑警劉巖胡桃,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踩叭,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機容贝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門自脯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斤富,你說我怎么就攤上這事膏潮。” “怎么了满力?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵焕参,是天一觀的道長。 經(jīng)常有香客問我油额,道長叠纷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任潦嘶,我火速辦了婚禮涩嚣,結果婚禮上,老公的妹妹穿的比我還像新娘掂僵。我一直安慰自己航厚,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布锰蓬。 她就那樣靜靜地躺著幔睬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芹扭。 梳的紋絲不亂的頭發(fā)上溪窒,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音冯勉,去河邊找鬼。 笑死摹芙,一個胖子當著我的面吹牛灼狰,可吹牛的內容都是我干的。 我是一名探鬼主播浮禾,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼交胚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了盈电?” 一聲冷哼從身側響起蝴簇,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匆帚,沒想到半個月后熬词,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年互拾,在試婚紗的時候發(fā)現(xiàn)自己被綠了歪今。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡颜矿,死狀恐怖寄猩,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情骑疆,我是刑警寧澤田篇,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站箍铭,受9級特大地震影響泊柬,放射性物質發(fā)生泄漏。R本人自食惡果不足惜坡疼,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一彬呻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柄瑰,春花似錦闸氮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至授翻,卻和暖如春或悲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背堪唐。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工巡语, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人淮菠。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓男公,卻偏偏與公主長得像,于是被迫代替她去往敵國和親合陵。 傳聞我的和親對象是個殘疾皇子枢赔,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,756評論 25 707
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,365評論 0 17
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案拥知? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,737評論 1 92
  • 一.四大組件: Android四大組件分別為activity肮塞、service、content provider镀琉、b...
    Ludiwgbet閱讀 1,707評論 0 39
  • 第一次峦嗤,在這里發(fā)布文章,認識許多不認識但是和我有相同志向的朋友屋摔。 此時此刻烁设,我 ,與你產(chǎn)生共鳴钓试。 初來乍到装黑,我叫演...
    演繹歲月閱讀 728評論 5 2