2017-04-24 50 views
0

我造屏用3份与weightSum与划分:现在有没有办法在android中计算字符串高度/重量?

 android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight=".....my choose" 

,我成功通过变化动态地改变分工布局PARAM。我的问题是,我的第一部分包含textView包含字符串,我不知道他的长度(它每次都会改变)。它可能很短或很长,所以对于正常情况下的一切都好,但如果字符串非常长,我想给第一部分更多来自屏幕的“重量”,我希望它与字符串的长度有关。

问题是,如果我能知道某个字符串的“高度”,并从那里计算出字符串需要多少重量,那么我可以再次更改分区,或者也许还有另一种方法来处理我的情况?

谢谢大家!

+0

的android:layout_width =“WRAP_CONTENT”仅适用于文本情况下..希望工程......如果文字较小的权重1意志工作 –

+0

@AbhishekSingh谢谢,但它没有帮助,因为它包含TextView的布局也已android:layout_weight:“..”所以它总是一样的大小... – OriEng

回答

0

更好的使用算法来查找字符串的长度,一旦找到长度,然后以编程方式更改文本大小或重量。

+0

我知道字符串的长度,但问题是什么大小才能改变重量?我需要一些关于此字符串长度的细节(可能是高度或其他内容...) – OriEng

+0

字符串的高度和宽度随文本大小和字体系数而变化。所以请根据字体系列进行更改。 http://alvinalexander.com/photos/android-roboto-fonts-examples。 –

+0

谢谢,我尝试了一些不同的解决方案,使用Paint和Rect对象通过字体和大小进行计算,但总是改变它的宽度,高度始终与此相同。 – OriEng

0

这是一种破解。您可以使用getWidthTextView其中您设置String并在该宽度的基础上,分配您的weight

例如,如果您的TextViewyourTextView

yourTextView.setText(yourString); 
int width = yourTextView.getWidth; 
if(width > THRESHOLD) 
    setWeight(YOUR_VALUE) 
else setWeight(YOUR_VALUE) 

注意

如果你不能马上找到宽度,你可以使用Handler,因为它需要一段时间来设置文本。

yourTextView.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     width = yourTextView.getWidth(); 
    } 
}, 300); 
+0

谢谢您的回答。我测试它,尝试获取我的TextView的宽度和高度。宽度总是相同的(这是有道理的,因为它不是变化),但问题在于高度 - 我测试了不同长度的字符串:20,40,80,120,200个字符。在20结果是68,在40结果是127,然后在80,120,200它是相同的结果-128。所以也许它是有限的或什么,但我认为从getHeight /宽度返回与TextView中的字符串不相关.. – OriEng

相关问题