用textview包装布局

时间:2015-12-01 05:50:33

标签: android layout

我有一个如下所示的布局:

ALTER TABLE GB
ADD COLUMN spread INT;

UPDATE GB
SET spread = (home_score-away_score)
WHERE GB.team = GB.home;

UPDATE GB
SET spread = (away_score-team_score)
WHERE GB.team = GB.away;

我使用FlowLayout来显示文本视图列表(它可能包含10-15个文本视图)。因此,基于可用的空屏幕空间,我想显示文本视图的数量。例如,如果要在那里显示15个文本视图,并且在大屏幕中有10个文本视图的空间,我想显示9个文本视图并在最后一个文本视图中显示“+6”。在一个小屏幕空间可能只有5个textviews可用,因为我想在最后一个textview中显示4个带有“+11”的文本视图。为了清楚理解,这是截图。如您所见,要显示的实际文本视图数为5.但显示的是2,并且添加了+3。同样,根据可用的屏幕空间,我想在布局中添加多个textview。

如何以编程方式实现这一目标?

enter image description here

3 个答案:

答案 0 :(得分:9)

尝试以编程方式将TextView添加到for循环中的linearLayout,其中在添加每个textView后,获得剩余宽度可用(可以使用[ScreenWidth-](添加的textviews宽度+ [no.of textviews * margin / padding]计算每个])] *)

如果宽度小于某个最小值(假设每个文本视图最少需要100px),则打破循环并添加计数指示符文本。

我可以想到下面的代码,它可能不准确但只是为了向您展示我在想什么

int screenWidth = getScreenWidth();
    int currentWidth=0;
    int minimumWidthForAChildWithOffset = 100;//offset should include width of indicator 
    int childCount = 10;
    int paddingForEachChild = 15;
    for (int i = 0; i <childCount; i++) {
        TextView label= getChildView();
        parent.addView(label, i);
        currentWidth += parent.getChildAt(i).getWidth() + paddingForEachChild;
        if(i!=childCount-1/*ignore if this is the last item*/ && screenWidth-currentWidth<=minimumWidthForAChildWithOffset){
            //add indicator label to layout here
            break;
        }
    }

答案 1 :(得分:2)

尝试在循环中添加textviews,在新的OnPreDrawListener中单独添加每个textview。添加每个后,检查它是否超过行上的空格,如果是,请将其删除并添加计数器。如果它仍超过该行,请再删除一行并增加计数器。

关键是在单独的OnPreDrawListener中测试每个,所以这一切都在显示视图之前发生,但之后视图的布局和大小已经计算出来。

答案 2 :(得分:2)

如果我必须实现你所描述的内容,我会尝试fork / subclass FlowLayout并更新其onMeasureonLayout方法。

这里是FlowLayout:https://github.com/blazsolar/FlowLayout/blob/develop/FlowLayout/src/main/java/com/wefika/flowlayout/FlowLayout.java

1)第一步是在onMeasure中限制FlowLayout的高度。此外,这样做可能就足够了:

<LinearLayout android:orientation="vertical" ... >
    <RelativeLayout ... />    
    <FlowLayout android:layout_height="0dp" android:layout_weight="1" ... />        
    <RelativeLayout ... />
</LinearLayout>

2)第二步是更新onLayout,以便在达到最大高度时停止添加线条和线条视图,然后添加显示隐藏视图数量的视图