我正在尝试创建一个总是平方的textview,所以我已经实现了这个自定义类.
public class SquareTextView extends TextView {
public SquareTextView(Context context) {
super(context);
}
public SquareTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SquareTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int max = Math.max(getMeasuredWidth(), getMeasuredHeight());
setMeasuredDimension(max, max);
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个示例布局,说明了问题:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="8dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="8dp">
<com.mypackage.SquareTextView
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_gravity="right|top"
android:background="#000"
android:gravity="center"
android:padding="4dp"
android:text="1"
android:textColor="#FFF"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这是一张图片
这对于使视图平方很有效,然而,似乎重力变得混乱了.有了这个,文本似乎总是在左上角.如何才能使TextView始终保持平方但仍保持重力或至少能够使文本居中?
编辑:经过一些测试,我注意到如果你将宽度或高度设置为特定的dp大小,重力似乎再次起作用.所以它可能与WRAP_CONTENT属性有关.是否会在onmeasure方法中以另一种方式处理,这可能导致我自己的方法无法按预期工作?