如何在android中仅扩展textview

Posted

技术标签:

【中文标题】如何在android中仅扩展textview【英文标题】:how to expand only textview in android 【发布时间】:2015-03-24 17:23:00 【问题描述】:

我正在尝试在 android 中扩展 textview,我有一些带有批量内容的 textview,我的要求是仅显示批量内容中的两行并完成 (...)。如果我点击它,我的全部内容将不得不显示。如何 实现这一目标。你能帮帮我吗?

public class MainActivity extends ActionBarActivity        
TextView t1;
@Override
protected void onCreate(Bundle savedInstanceState) 
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);  
   t1 = (TextView) findViewById(R.id.text);
   String str = "If your view subclass is displaying its own Drawable objects, it should override this function and return true for any Drawable it is displaying. This allows animations for those drawables to be scheduled." +
                "I made the expandable list view acc to your tutorial but what i have to do if I want to populate Expandable List View with values from database?Means what changes I have to do in ";
    t1.setText(str);                               
    t1.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View v) 
        t1.setMaxLines(Integer.MAX_VALUE);
    
 );


【问题讨论】:

【参考方案1】:

您可以在布局xml中将textview的android:maxLines属性默认设置为2..

在将文本设置为 textview (t1) 后,在 onCreate() 函数中。 添加以下内容

 boolean isTextViewClicked = false;

t1.setOnClickListener(new OnClickListener() 
    if(isTextViewClicked)
      //This will shrink textview to 2 lines if it is expanded.
       t1.setmaxLines(2);
       isTextViewClicked = false;
     else 
       //This will expand the textview if it is of 2 lines
       t1.setMaxLines(Integer.MAX_VALUE);
       isTextViewClicked = true;
    
);

这将根据内容展开文本视图

【讨论】:

我没有得到确切的信息,请您编辑我的代码 你没有得到哪一部分? @Ichigo Kurosaki 我在我的 xml 文件中添加了 android:maxLines="2"。我必须放置此代码“textview.setMaxLines(Integer.MAX_VALUE);”如果我在 textview onclick 中添加此代码,我会得到空指针异常 @Ichigo Kurosaki 我明白了,非常感谢,但我的最后一个问题是如何在两行末尾添加 (...),因为那时只知道那里有一些内容。通常这三个 (...) 应该在内容仅显示两行时出现。如果我点击它,这个应该(...)隐藏,如何带来它。抱歉,这是我的最后一个问题 将 **android:ellipsize="end" ** 属性添加到布局 xml 中的 textview【参考方案2】:

我在medium article 中描述了最佳和优化方法。

您需要做的是在 TextView.post 函数中运行以下函数:

private fun TextView.setCaption(senderName: String, caption: String) 
    text = getFullCaption(senderName, caption)

    if (lineCount > DEFAULT_LINES) 
        val lastCharShown = layout.getLineVisibleEnd(DEFAULT_LINES - 1)
        maxLines = DEFAULT_LINES
        val moreString = context.getString(R.string.read_more)
        val suffix = " $moreString"
        // 3 is a "magic number" but it's just basically the length of the ellipsis we're going to insert
        val actionDisplayText = context.getString(R.string.more_dots) + suffix

        text = SpannableStringBuilder()
            .bold  append(senderName) 
            .append("  ")
            .append(
                caption.substring(
                    0,
                    lastCharShown - suffix.length - 3 - moreString.length - senderName.length
                )
            )
            .color(Color.GRAY)  append(actionDisplayText) 
    

在 TextView 的扩展函数中调用 setCapton 函数并设置点击监听器使其展开,是拥有可展开 TextView 的最后一步:

private fun TextView.setExpandableText(senderName: String, caption: String) 
    post 
        setCaption(senderName, caption)
        setOnClickListener 
            let 
                it.maxLines = MAX_LINES
                it.text = getFullCaption(senderName, caption)
            
        
    

【讨论】:

很遗憾,当文本包含“\n”字符时它会崩溃

以上是关于如何在android中仅扩展textview的主要内容,如果未能解决你的问题,请参考以下文章

android 自定义控件继承TextView

在 Android Java 中由另一个线程更新 textView

如何在 TextView Android 中将渐变设置为文本颜色以及在其周围添加描边?

在 TextView 中仅隐藏部分文本

在Android中的edittext中从textview获取价值

如何在 Dart 中仅使用级联或链式调用干净地映射/排序/折叠/排序/扩展?