画一个宽度与父级匹配的圆

时间:2018-07-15 09:08:33

标签: android android-layout textview android-shape

我必须为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" />

但是集合不会改变尺寸。为什么?

2 个答案:

答案 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创建一个圆圈背景。

enter image description here

tv.post(new Runnable() {
        @Override
        public void run() {
            int value  = tv.getWidth();              
            tv.setWidth(value);
            tv.setHeight(value);         
      }
});

希望有帮助。