我不知道如何以正确的方式调整自定义视图的大小。我是Android编程的新手,所以请保持冷静!
我已经在自己的xml文件中定义了棋盘qazxsw poi:
board.xml
然后我定义了一个布局,其中董事会被粘贴为<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/BoardLayout"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center">
<TableRow>
<de.xyz.ChessField android:id="@+id/A8" />
<de.xyz.ChessField android:id="@+id/B8" />
....
:
fragment
现在,我想实现<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout_editor_absoluteY="81dp">
<fragment
android:id="@+id/fragmentBoard"
android:name="de.xyz.BoardFragment"
android:layout_width="300dp"
android:layout_height="00dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
的onMeasure(int widthMeasureSpec, int heightMeasureSpec)
方法来设置每个de.xyz.ChessField
programmaticaly的大小。
我尝试过类似的东西:
Field
但protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
Log.i("widthMeasureSpec, heightMeasureSpec", String.valueOf(widthMeasureSpec) + ", " + String.valueOf(heightMeasureSpec));
setMeasuredDimension(widthMeasureSpec / 8, heightMeasureSpec / 8);
}
值非常奇怪:
MeasureSpec
要么
I/widthMeasureSpec, heightMeasureSpec: 788, 788
你能帮助我做正确的方法吗?另一种可能性是从课堂外设置每个I/widthMeasureSpec, heightMeasureSpec: 1073742218, -2147482860
的LayoutParam
,或者?什么是最好的方法??
谢谢您的帮助!!
P.S。:更新,使用ChessField
。为什么没有确切的高度?我怎么计算呢?
MeasureSpec
然后计算这些值的高度和宽度,并使用[MeasureSpec.getSize(int measureSpec
)](View.setMeasuredDimension()
,int))来设置高度和宽度