簡體   English   中英

Android讓桌子看起來像我想要的

[英]Android Making a table look like I want

我有點麻煩使桌子看起來像我打算。 這些是幾個問題,但由於它們都參考下面的圖片和我提供的細節,我認為它們應該都在一個帖子中。

這是我到目前為止所取得的成就:

在此輸入圖像描述

標題行包含一個Button類型的元素。

    TableRow.LayoutParams params = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
    Button bt = new Button(getContext());
    bt.setText("Column1");
    mHeader.addView(bt, params);
    mHeader.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
    addView(mHeader);

表格的其余部分是這樣的:
(Messagerow擴展TableRow並具有TextView成員)

        for(int i = 0; i < 100; i++) {
            MessageRow mr = new MessageRow(getContext());
            // stuff to set the TexView text and color
            mr.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
            this.addView(mr);
        }



1.如何使標題行高度更像行?

2.如何使按鈕占據行的整個寬度?
如果表是空的,沒有文本行只是標題,那么按鈕匹配行寬。 只要添加一行文本,就會調整列寬,但按鈕寬度不會。

3.如何使行填充屏幕寬度? (MATCH_PARENT沒有這樣做)

4.如何在表格行之間畫一條細線?
我試圖覆蓋MessageRow上的onDraw()函數,但它永遠不會被調用,甚至不會被調用。

別誤會我的意思。 我不是要求你為我做我的工作。 這些是我試圖自己解決的問題,並用谷歌搜索並閱讀類似的帖子,但沒有找到答案。
注意:我發現Javascript for Android中的UI設計缺乏明確的控制,並且清晰地記錄了所有這些細節。

編輯
這是我創建表的方式:

    TableLayout mTable = new TableLayout(this);

    HorizontalScrollView hview = (HorizontalScrollView) findViewById(R.id.hscroll);

    populate(mTable);
    mTable.setLayoutParams(new TableLayout.LayoutParams( TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT));
    mTable.setBackgroundColor(Color.WHITE);

    hview.addView(mTable);
  1. 如何使標題行高度更像行?

使用默認Button沒有太多事情要做。 Button使用九個補丁圖像,在按鈕的文本和您看到的邊框之間有一些空格。 你可以使用較小的字體,但你可能看起來很難看。 另一件事是使用自己的Button背景並擺脫默認的額外空間(默認的9補丁圖像),因此最終高度接近TextView文本的高度。 或者嘗試使用固定值強制所有行的標准高度。

  1. 如何使按鈕占據行的整個寬度?

我認為你在MessageRow有多個TextView ,所以當你添加Button它會移動到第一列(對應於第一個TextView )。 如果是這種情況,請將您的Button 跨越表示MessageRowTextViews數量的列數:

TableRow.LayoutParams params = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
params.span = 3; // if you have 3 `TextView` in the MessageRow
    Button bt = new Button(getContext());
    bt.setText("Column1");
    mHeader.addView(bt, params);

如果不是這種情況,請添加更多詳細信息。

  1. 如何使行填充屏幕寬度? (MATCH_PARENT沒有這樣做)

正如我之前提到的一個問題,我不知道為什么會這樣(但我在那里給你一些解決方案來解決這個問題)。 也:

  1. mHeader和其他MessageRowTablelayout並且要在它們上使用的正確LayoutParams是父代的LayoutParamsTableLayout.LayoutParams不是 TableRow.LayoutParams

  2. 您在MessageRow添加了一些TextView (從我之前的問題中看到的),將這些子視圖與TableRow.LayoutParams一起添加到MessageRow

  3. 在代碼中的任何地方只使用WRAP_CONTENT作為LayoutParams ,您可能希望將寬度(構造函數中的第一個參數)設置為FILL_PARENT / MATCH_PARENT

  1. 如何在表格行之間畫一條細線?

您可以使用一個簡單的View作為分隔符:

for(int i = 0; i < 100; i++) {
   MessageRow mr = new MessageRow(getContext());
   // stuff to set the TexView text and color
   mr.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT, TableLayout.LayoutParams.WRAP_CONTENT));
   this.addView(mr);
   View separator = new View(getContext());
   separator.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT, 3)));
   separator.setBackgroundColor(Color.RED);
   this.addView(separator);
}

因為你有100行,你可以嘗試設置一個帶有分隔線的drawable作為TableRowheaderMessageRow )的背景,而不是上面的方法,它將另外100個視圖添加到布局。

額外注意:

您有很多視圖要添加到單個活動布局中,您說的是100行,如果您的MessageRow比簡單的TextView (我認為它)更復雜,您可能會遇到一些性能問題。 我建議你看看精彩的ListView小部件。

這里沒有編程環境,但我會嘗試回答你的一些問題。

  1. 標題行(按鈕)比基於測試的行高的原因是因為按鈕需要更多空間而行可以容納它。 默認按鈕在文本的頂部/底部都有填充。 我認為您最好的選擇是創建自己的按鈕,這為您提供了控制外觀和感覺的額外好處。 似乎其他人之前遇到過這個問題: 無法擺脫按鈕上的底部填充

  2. 你的按鈕被設置為wrap_content,這意味着它不會比它需要的大(它會增長/縮小,所以它可以適合文本“Column1”或你放在那里的任何東西)。 而不是制作按鈕WRAP,我懷疑你需要使它成為FILL_PARENT。

  3. 表格行不是需要填充屏幕寬度,而是需要填滿屏幕的表格。 無論您在何處定義表,它都可能設置為水平維度的WRAP_CONTENT。 將它設置為FILL_PARENT,你的表應該擴展到它的容器的整個寬度(在這種情況下,它應該擴展屏幕的整個寬度)

  4. 可能有幾種不同的方法可以做到這一點。 我最近使用的一種方法是使用View標簽,它基本上看起來就像屏幕上的水平條。 以下是如何實現它的鏈接。 http://sonnygill.net/android/horizo​​ntal-rule/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM