[英]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);
- 如何使標題行高度更像行?
使用默認Button
沒有太多事情要做。 Button
使用九個補丁圖像,在按鈕的文本和您看到的邊框之間有一些空格。 你可以使用較小的字體,但你可能看起來很難看。 另一件事是使用自己的Button背景並擺脫默認的額外空間(默認的9補丁圖像),因此最終高度接近TextView
文本的高度。 或者嘗試使用固定值強制所有行的標准高度。
- 如何使按鈕占據行的整個寬度?
我認為你在MessageRow
有多個TextView
,所以當你添加Button
它會移動到第一列(對應於第一個TextView
)。 如果是這種情況,請將您的Button
跨越表示MessageRow
中TextViews
數量的列數:
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);
如果不是這種情況,請添加更多詳細信息。
- 如何使行填充屏幕寬度? (MATCH_PARENT沒有這樣做)
正如我之前提到的一個問題,我不知道為什么會這樣(但我在那里給你一些解決方案來解決這個問題)。 也:
mHeader
和其他MessageRow
是Tablelayout
並且要在它們上使用的正確LayoutParams
是父代的LayoutParams
: TableLayout.LayoutParams
而不是 TableRow.LayoutParams
。
您在MessageRow
添加了一些TextView
(從我之前的問題中看到的),將這些子視圖與TableRow.LayoutParams
一起添加到MessageRow
。
在代碼中的任何地方只使用WRAP_CONTENT
作為LayoutParams
,您可能希望將寬度(構造函數中的第一個參數)設置為FILL_PARENT
/ MATCH_PARENT
- 如何在表格行之間畫一條細線?
您可以使用一個簡單的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作為TableRow
( header
和MessageRow
)的背景,而不是上面的方法,它將另外100個視圖添加到布局。
額外注意:
您有很多視圖要添加到單個活動布局中,您說的是100行,如果您的MessageRow
比簡單的TextView
(我認為它)更復雜,您可能會遇到一些性能問題。 我建議你看看精彩的ListView
小部件。
這里沒有編程環境,但我會嘗試回答你的一些問題。
標題行(按鈕)比基於測試的行高的原因是因為按鈕需要更多空間而行可以容納它。 默認按鈕在文本的頂部/底部都有填充。 我認為您最好的選擇是創建自己的按鈕,這為您提供了控制外觀和感覺的額外好處。 似乎其他人之前遇到過這個問題: 無法擺脫按鈕上的底部填充
你的按鈕被設置為wrap_content,這意味着它不會比它需要的大(它會增長/縮小,所以它可以適合文本“Column1”或你放在那里的任何東西)。 而不是制作按鈕WRAP,我懷疑你需要使它成為FILL_PARENT。
表格行不是需要填充屏幕寬度,而是需要填滿屏幕的表格。 無論您在何處定義表,它都可能設置為水平維度的WRAP_CONTENT。 將它設置為FILL_PARENT,你的表應該擴展到它的容器的整個寬度(在這種情況下,它應該擴展屏幕的整個寬度)
可能有幾種不同的方法可以做到這一點。 我最近使用的一種方法是使用View標簽,它基本上看起來就像屏幕上的水平條。 以下是如何實現它的鏈接。 http://sonnygill.net/android/horizontal-rule/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.