我需要椭圆化多行文本视图.我的组件足够大,可以显示椭圆至少4行,但只显示2行.我试图改变组件的最小和最大行数,但它什么都没改变.
我的TextView
宽度为wrap content
.在这个TextView
我设置文本,但文本每次都不是相同的长度.当文本很长时,我使用单行true和ellipsize
:end.但现在我有一个问题.我想设置其他布局的可见性,但这取决于我的文本的长度.如果文本太长而无法放入屏幕我想setVisible为true,但是当文本很短并且我不需要ellipsize时,我想将可见性设置为false.所以我需要检查TextView的状态.当它的椭圆形时我想要setVisible
真实,当它不是setVisible
假的.我怎么能这样做 这就是我得到的:
tvAle.post(new Runnable() {
@Override
public void run() {
int lineCount = tvAle.getLineCount();
Paint paint = new Paint();
paint.setTextSize(tvAle.getTextSize());
final float size = paint.measureText(tvAle.getText().toString());
Log.v("a", ""+size+" "+tvAle.getWidth());
if ((int)size > (tvAle.getWidth()+10)) {
allergiesLayout.setVisibility(View.VISIBLE);
}
else
allergiesLayout.setVisibility(View.GONE);
}
Run Code Online (Sandbox Code Playgroud)
但这个解决方案不起作用.
我需要监听确切的一个全局布局事件,以初始设置正确的滚动位置.在搜索了一些为什么我的调用scrollTo(x,y)
似乎被忽略之后,我发现只有在知道整个布局后才能以有意义的方式调用它们.所以我正在注册GlobalLayoutListener
并推迟致电scrollTo()
.
问题是,我只想滚动一次.所以我想我可以简单地打电话removeGlobalOnLayoutListener()
来停止听.这导致了例外:IllegalStateException: This ViewTreeObserver is not alive, call getViewTreeObserver() again
.所以我认为我很好,如果观察者不活着它将不会发生任何事件.但遗憾的是:每当布局以某种方式改变时,我的视图都会滚动.
我当前的代码迭代看起来像这样.我可以更改什么以确保scrollToGridPos()
只进行一次调用?我知道我可以mHasFired
在内部类中添加一个本地字段,但这对我来说似乎非常脏!
final ViewTreeObserver vto = mLayout.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
scrollToGridPos(getCenterPoint(), false);
if (vto.isAlive()) {
vto.removeGlobalOnLayoutListener(this);
}
}
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试设置布局,textview
所以我可以使用getEllipsisCount()
方法.但是下面的代码返回null作为布局值.如何进行布局然后使用getEllipsisCount(0)
方法.
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView mytextview =(TextView) findViewById(R.id.textView1);
mytextview.setText(myText);
Layout layout = mytextview.getLayout();
if(layout != null){
mytextview.settext("very good layout worked\n");
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个maxlines = 3的TextView,我想使用自己的省略号,而不是
"Lore ipsum ..."
Run Code Online (Sandbox Code Playgroud)
我需要
"Lore ipsum ... [See more]"
Run Code Online (Sandbox Code Playgroud)
为了给用户一个线索,点击视图将扩展全文.
可能吗 ?
我正在考虑检查TextView是否有省略号,并且在这种情况下添加文本"[查看更多]"并在之后设置省略号,但我找不到这样做的方法.
也许如果我找到文本被剪切的位置,我可以禁用省略号并创建子字符串,然后添加"... [查看更多]",但我又不知道如何获得该位置.