0
我有一個文件layers.xml中的某一層列表:Android的:如何在層列表中更改GradientDrawable的大小編程
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/outer_rect">
<shape android:shape="rectangle">
<stroke
android:width="3dp"
android:color="@color/gray4"/>
<solid android:color="@color/white"/>
</shape>
</item>
<item android:top="10dp" android:bottom="10dp" android:left="10dp" android:right="10dp"
android:drawable="@drawable/dot_pattern_bitmap"/>
</layer-list>
這是在自定義的FrameLayout customView.xml使用:
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/layers"/>
</merge>
它本身被用於例如在
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/space_m"
android:orientation="vertical">
<my.namespace.customView
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</FrameLayout>
此外,我有CustomView.java類來編輯自定義視圖(特別是圖層)的行爲。
在那裏,我試圖根據customView的大小(和參數'ratio')實現層列表大小的更新。我試過這樣:
// ...
@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
layoutWidth = MeasureSpec.getSize(widthMeasureSpec);
layoutHeight = MeasureSpec.getSize(heightMeasureSpec);
readjustSize(ratio);
}
private void readjustSize(final double ratio) {
if (layoutHeight != 0 && layoutWidth != 0) {
// determine desired width and height using the layout width
int desiredWidth = layoutWidth;
int desiredHeight = (int) (layoutWidth/ratio);
// if it does not fit, adjust using the layout height
if (desiredHeight > layoutHeight) {
desiredHeight = layoutHeight;
desiredWidth = (int) (layoutHeight * ratio);
}
// get the basic layer
final LayerDrawable ld =
(LayerDrawable) ContextCompat.getDrawable(getContext(), R.layers);
final GradientDrawable outerRectShape =
(GradientDrawable) ld.findDrawableByLayerId(R.id.outer_rect);
// and adapt the size
outerRectShape.setSize(desiredWidth, desiredHeight);
outerRectShape.setBounds(0, 0, desiredWidth, desiredHeight);
// redraw
invalidate();
requestLayout();
}
}
所以,那是很多代碼...不幸的是,這不能正常工作。如果第一次加載框架佈局,我只能看到一個非常小的矩形。
是否有人有想法:
只有當我來回切換這個觀點,因爲我想規模應用?
將ImageView設置爲match_parent的寬度。 –
ImageView本身的寬度上有match_parent。包含視圖不會,但我已經嘗試了寬度和高度的match_parent,僅限寬度或沒有(如發佈)。這沒有任何改變。 – Caro
在FrameLayout中,它是wrap_content。 –