Как создать TextView с формой по умолчанию в виде квадрата и автоматически регулируемой высотой, когда содержимое не помещается в? - PullRequest
5 голосов
/ 30 марта 2019

Я хочу создать собственный TextView, который по умолчанию имеет квадратную форму, но если текст не помещается, высота автоматически увеличивается, чтобы вместить содержимое.

Я попытался установить высоту wrap_content и переопределитьonMeasure() примерно так:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int newHeight = heightMeasureSpec > widthMeasureSpec ? heightMeasureSpec : widthMeasureSpec;
    super.onMeasure(widthMeasureSpec, newHeight);
}

Но это не сработало.

Когда содержимое меньше, это нормально. SquareView when content is small


Но когда контента больше, высота должна увеличиваться, но не увеличивается.Много текста вырезано enter image description here

1 Ответ

2 голосов
/ 30 марта 2019

Вы можете использовать setMinHeight для достижения этой цели

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    int minHeight = MeasureSpec.getSize(widthMeasureSpec);
    setMinHeight(minHeight);
}

И установите wrap_content на layout_height в макете:

<com.test.SquareTextView
        android:id="@+id/squareTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center" />

Обновление для RecyclerView:

1.Получить ширину экрана внутри класса занятий:

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int screenWidth = size.x;

2.Передать его в адаптер и установить при создании представления элемента:

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View root = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.my_item, viewGroup, false);
    root.setMinimumHeight(screenWidth);
    return new ViewHolder(root);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...