Android: TextView занимает место без текста - PullRequest
5 голосов
/ 11 октября 2011

У меня есть 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_width="fill_parent"
  android:layout_height="fill_parent"
  android:gravity="center"
  android:layout_marginTop="3dp"
  android:layout_marginRight="3dp" 
  android:background="#ff737373"
  android:padding="3dp"
  android:minWidth="64dp" >
  <ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:tag="tabImage"></ImageView>
  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="16sp"
    android:tag="tabCaption"
    android:textColor="#ffd9d9d9" />
</LinearLayout>

Ответы [ 4 ]

6 голосов
/ 11 октября 2011

Если вы хотите сделать просмотр текста исчезнуть , если его текст null, то используйте android:visibility или программно используйте textview.setVisibility(View.INVISIBLE); или textview.setVisibility(View.GONE);.

1 голос
/ 19 апреля 2016

для того, что вы спрашиваете, вы должны использовать 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.

0 голосов
/ 13 декабря 2017

Просто чтобы дать более полный ответ.Вы можете предоставить возможности TextView AutoCollapse, проверяя, какой текст отображается при его изменении, с помощью TextChangedListener

. Я бы просто использовал

.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, у которых нет жизнеспособного слушателя изменений, это применимо для большинства проблем добавления функциональности в представления.

0 голосов
/ 18 апреля 2016
textview.setVisibility(View.INVISIBLE);
textview.setHeight(0);
...