Android:TextView 占用空间,没有文字

Posted

技术标签:

【中文标题】Android:TextView 占用空间,没有文字【英文标题】:Android: TextView takes up space with no text 【发布时间】:2011-12-05 03:40:00 【问题描述】:

当没有要显示的文本时,我的 TextView 仍在占用空间。这仅在 OS 1.6 上发生。当我的应用程序在 2.2 上运行时,TextView 的高度会塌陷,因此它不会占用任何空间。是否可以在 TextView 中设置一些属性以在未设置文本时使其折叠或消失?这是我的 xml 代码。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_
  android:layout_
  android:gravity="center"
  android:layout_marginTop="3dp"
  android:layout_marginRight="3dp" 
  android:background="#ff737373"
  android:padding="3dp"
  android:minWidth="64dp" >
  <ImageView
    android:layout_
    android:layout_
    android:tag="tabImage"></ImageView>
  <TextView
    android:layout_
    android:layout_
    android:textSize="16sp"
    android:tag="tabCaption"
    android:textColor="#ffd9d9d9" />
</LinearLayout>

【问题讨论】:

【参考方案1】:

如果你想让一个文本视图消失如果它的文本是null然后使用android:visibility或以编程方式使用textview.setVisibility(View.INVISIBLE);textview.setVisibility(View.GONE);

【讨论】:

但这使它总是不可见或消失。我希望 textview 仅在未设置为任何文本时才消失。 所以你不能测试textview是否有文字吗? 但是View.INVISIBLEView.GONE有很大区别。 我只是提出了功能,可以根据他的要求实现。还是让我说清楚:看不见的意思是那里有视野,但没有视野。而在 GONE 中,两者都不存在。 我正在寻找在 xml 中设置的东西,当它检测到没有可用的文本时,它会自动删除或隐藏 textview。正如我所指出的,这会在 OS 2.2 中自动发生,但不会在 1.6 中发生,因此 Google 改变了这种行为。无论如何,我决定在没有文本可用时以编程方式删除 TextView。【参考方案2】:

对于你的要求,你必须使用TextWatcher,然后当文本为空时,只需让 TextView 消失:

    your_text_view.addTextChangedListener(new TextWatcher() 

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) 

        

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) 

        

        @Override
        public void afterTextChanged(Editable s) 
            if(your_text_view.getText().toString().equals(""))
                your_text_view.setVisibility(View.GONE);
            
        
    );

并且任何时候你想更改其中的文本,只需在设置新文本之前使用your_text_view.setVisibility(View.VISIBLE);,如果新文本为空,它将不会显示,因为它会在你之前消失注意,如果它已经可见,这条线不会造成任何伤害或影响。

只需确保将您的 TextView 声明为通用变量,以便能够在 TextWatcher 中使用它。

【讨论】:

【参考方案3】:
textview.setVisibility(View.INVISIBLE);
textview.setHeight(0);

【讨论】:

【参考方案4】:

只是为了给出更完整的答案。您可以通过检查通过 TextChangedListener 更改时显示的文本来提供 TextView AutoCollapse 功能

我会简单地使用

.addTextChangedListener(new TextWatcher() 
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) 

            

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) 
                if(charSequence.length()>0)
                    textView.setVisibility(View.VISIBLE);
                else textView.setVisibility(View.INVISIBLE);
            

            @Override
            public void afterTextChanged(Editable editable) 

            
        );

它现在具有您正在寻找的功能。 我在 android UI 中没有遇到很多没有可行的更改监听器的事情,这适用于向视图添加功能的大多数问题。

【讨论】:

以上是关于Android:TextView 占用空间,没有文字的主要内容,如果未能解决你的问题,请参考以下文章

如何调整文字字距在Android的TextView的

如何调整文字字距在Android的TextView的

Android,在TextView中调整我的文本大小的问题[重复]

如何调整文字字距在Android的TextView的

如何调整文字字距在Android的TextView的

Android 和 TextView