我有一个从3个数组中随机选择的应用程序,并从随机选择的数组中随机选择一个事实。
我遇到的问题是TextView大小,因为有些事实比显示器上的布局更长,特别是在分辨率低的设备上。
目前我认为最好的解决方法是使条件在事实包含多于n个字母(包括空格)时将TextView大小更改为更小的大小。
这是获取随机字符串的代码。我现在如何动态改变大小?
String[] Array = this.getResources().getStringArray(com.xyz.example.R.array.Facts);
randomFact = Array[new Random().nextInt(Array.length)];
另外,如果我需要实现字符计数,我还需要拆分字符串吗?
答案 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)。