根据xml设置自定义视图的高度和宽度

时间:2018-07-11 08:44:57

标签: android view

我已经成功制作了一个自定义PinView类。 现在的问题是我想根据XML中指定的PinView大小来设置Pin View按钮的大小。像按钮一样,PinView的宽度和高度为5%。

当前,我通过执行以下操作来设置PinView的高度和宽度groups返回80%的屏幕高度和70%的屏幕宽度

getPinPadHeight()

但是现在的问题是,当我在这样的主要活动XML文件中使用此自定义PinView视图时。

@Override
protected void onAttachedToWindow() {
    super.onAttachedToWindow();
    pinView.getLayoutParams().height = ViewUtil.getPinPadHeight();
    pinView.getLayoutParams().width = ViewUtil.getPinPadWidth();
}

并且我想更改其高度和宽度,而不更改其始终根据屏幕高度和宽度百分比设置的方式,如何使该视图像某些库一样,以便我可以根据自己的喜好以及其内部的视图自动设置高度和宽度当我将使用此自定义视图时,自己会评估xml属性

<RelativeLayout 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:id="@+id/parent_view"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="@color/colorPrimary"
     android:orientation="vertical"
     tools:context=".MainActivity">

     <production.kado.lock.views.PinView
         android:id="@+id/pinView"
         android:layout_centerInParent="true"
         android:layout_width="300dp"
         android:layout_height="200dp"
         app:changePassword="true" />
</RelativeLayout>

2 个答案:

答案 0 :(得分:0)

如何在onSizeChanged中进行计算?

答案 1 :(得分:0)

Res/values/attrs.xml

添加另一个属性
<declare-styleable name="PinView">
    <attr name="changePassword" format="boolean" />
    <attr name="customSize" format="boolean" />
</declare-styleable>

在具有属性的构造函数中,检索customSize布尔值

TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.PinView, 0, 0);
//Set CustomSize boolean Global Variable
customSize = a.getBoolean(R.styleable.PinView_customSize, false);

然后更改您的onAttachedToWindow方法:

protected void onAttachedToWindow() {
    super.onAttachedToWindow();
    if(!customSize) {
        pinView.getLayoutParams().height = ViewUtil.getPinPadHeight();
        pinView.getLayoutParams().width = ViewUtil.getPinPadWidth();
    }
}

通过这种方式,如果app:customSize="true",它将跳过ViewUtil.getPinPadHeight()ViewUtil.getPinPadWidth()