根据Word或Letter计数动态更改TextView大小

时间:2015-03-29 08:30:37

标签: android textview

我有一个从3个数组中随机选择的应用程序,并从随机选择的数组中随机选择一个事实。

我遇到的问题是TextView大小,因为有些事实比显示器上的布局更长,特别是在分辨率低的设备上。

目前我认为最好的解决方法是使条件在事实包含多于n个字母(包括空格)时将TextView大小更改为更小的大小。

这是获取随机字符串的代码。我现在如何动态改变大小?

String[] Array = this.getResources().getStringArray(com.xyz.example.R.array.Facts);
randomFact = Array[new Random().nextInt(Array.length)];

另外,如果我需要实现字符计数,我还需要拆分字符串吗?

3 个答案:

答案 0 :(得分:0)

只需在wrap_content文件中使用xml即可。

例如:

<TextView
            android:id="@+id/name_here"
            android:layout_width="wrap_content"
            android:layout_gravity="center"
             />

答案 1 :(得分:0)

这将逐行显示文本。

<TextView 
android:scrollHorizontally="false"
android:layout_weight="1" 
android:maxLines="100" 
android:ellipsize="none" /> 

答案 2 :(得分:0)

更新:最佳解决方案@ Edit2

不是一个漂亮的解决方案,但你可以算上角色......

int count = 0;
for(String s: Array)
    count+=s.length();

...然后根据该计数调整大小,可能在启动时计算一个因子,将其相对于屏幕的宽度:

textView.setTextSize(factor/count);

现在,让我们说它应该完全适合,所以如果整个字符串中有一个字符(最好不要发生!),它应该与整个屏幕一样宽,所以(因子/ 1)= maxWidth。< / p>

因此,TextView在xml中获取width = match_parent(或者当然对于您的应用程序来说它的大小),并且在启动时调用maxWidth=textView.getWidth(); - &gt; factor = maxWidth。或MAXWIDTH,可能更好静态(/ final)。

编辑:更漂亮:在计数之后,制作一个if语句,看看你是否需要在if(factor/count > minWidth) resize;完全调整大小以使整个屏幕不占用5个字符串。

Edit2:此解决方案适用于一个TextView,在一行中显示所有字符串。对于一个TextView和几行来

int finalCount = 0;
int count = 0;
for(String s: Array){
    count+=s.length();
    if(count>finalCount) finalCount=count;
}
textView.setTextSize(factor(finalCount));

或者使用不同的TextView,每个String一个,大小不同,IMO是最漂亮的一个:

int count=0;
for(index i=0;i<Array.length();i++){
    count=Array[i].length();
    textViews[i].setTextSize(factor/count);
    //or directly: textViews[i].setTextSize(factor/Array[i].length());
}

Edit4:实际上需要动态数量的TextView,所以在for循环中使用myViewGroup.addChild(anotherTextView)(&lt; -pseudo-code,得到新的textview)。