我必须为TextView添加背景形状,但是我不知道这个尺寸,因为我需要设置宽度以匹配父级。我无法设置dp dp,因为这会导致我在调整大小,键盘显示等方面遇到更多问题。 我会在创建时得到有效的宽度,并在高度上设置相同的宽度,但是当我这样写的时候:
TextView tCircle = findViewById(R.id.tCircle);
tCircle.getLayoutParams().width
它给我-1。 怎么画这个圆圈? button_shape是:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
<corners android:radius="10dp"/>
<stroke android:color="@color/colorPrimaryDark"
android:width="2dp"/>
<solid android:color="@color/colorAccent"/>
</shape>
布局片段
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="6.5"
android:baselineAligned="false"
android:orientation="horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:text="Name" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:id="@+id/tCircle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoSizeTextType="uniform"
android:background="@drawable/button_shape"
android:text="TextView"
android:textAlignment="center" />
</LinearLayout>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
编辑: 根据Mohamed Mohaideen AH的建议,我在onCreate中写道:
tCircle.post(new Runnable() {
@Override
public void run() {
int width = tCircle.getWidth();
int heigth = tCircle.getHeight();
Log.d(TAG_LOG, "Dim cerchio: W" + String.valueOf(width)+" H:"+String.valueOf(heigth));
if(width>=heigth){
Log.d(TAG_LOG, "A");
tCircle.setWidth(heigth);
tCircle.setHeight(heigth);
}
else{
Log.d(TAG_LOG, "B");
tCircle.setWidth(width);
tCircle.setHeight(width);
}
}
});
TextView是:
<TextView
android:id="@+id/tCircle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoSizeTextType="uniform"
android:background="@drawable/button_shape"
android:text="TextView"
android:textAlignment="center" />
但是集合不会改变尺寸。为什么?
答案 0 :(得分:0)
您可以根据屏幕的宽度动态设置高度。使用此方法来获取屏幕的宽度:
public static int getScreenWidth(Context mContext) {
DisplayMetrics metrics = new DisplayMetrics();
((Activity) mContext).getWindowManager().getDefaultDisplay().getMetrics(metrics);
return metrics.widthPixels;
}
然后,您可以使用用于设置高度和宽度的布局参数。
希望这会有所帮助。
答案 1 :(得分:0)
您得到的问题-1是视图是否未初始化。使用OnCreate
方法时,在加载视图之前,您无法获取layoutparameter的值。因此,请尝试下面的代码来获取视图的宽度。
textview.post(new Runnable() {
@Override
public void run() {
int width = textview.getWidth();
}
}
已编辑
为您的textview创建一个圆圈背景。
tv.post(new Runnable() {
@Override
public void run() {
int value = tv.getWidth();
tv.setWidth(value);
tv.setHeight(value);
}
});
希望有帮助。