当内容无法容纳时,如何创建默认形状为正方形,高度可自动调整的TextView?

iit*_*ant 5 android textview android-layout

我要创建一个默认情况下为正方形的自定义TextView,但是如果文本无法容纳,则高度会自动增加以容纳内容。

我尝试将高度设置为wrap_content并覆盖onMeasure()这样的高度:

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

但这没有用。

当内容较少时,就可以了。 内容较小时的SquareView


但是,当内容更多时,高度应该扩大,但事实并非如此。大量文字被删去 在此处输入图片说明

Tar*_*nko 3

你可以用它setMinHeight来达到这个目的

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

并在布局中设置wrap_contentlayout_height

<com.test.SquareTextView
        android:id="@+id/squareTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center" />
Run Code Online (Sandbox Code Playgroud)

RecyclerView 更新:

1.在Activity类中获取屏幕宽度:

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int screenWidth = size.x;
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)