使用垂直图像调整网格大小 - android
Resize grid with images vertical - android
我需要图像根据尺寸"GridLayout"设置容器尺寸。
只是抓住它们的水平尺寸,但我还需要垂直尺寸。
我错过了什么?谢谢
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/fondo_01">
<GridLayout
android:layout_width="match_parent"
android:layout_height="250dp"
android:useDefaultMargins="false"
android:background="@drawable/corners_main_layout"
android:animationCache="false"
android:layout_margin="@dimen/padding_white"
tools:layout_margin="@dimen/padding_white"
android:columnOrderPreserved="false"
android:columnCount="3">
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="0dp"
android:orientation="vertical"
android:layout_columnWeight="1"
android:id="@+id/linearLayout">
<ImageView
android:src="@drawable/ic_skinav"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:id="@+id/idskinav" />
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/skinav"
android:layout_gravity="center"
android:textColor="@android:color/black"
/>
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="0dp"
android:orientation="vertical"
android:layout_columnWeight="1"
android:id="@+id/linearLayout9">
<ImageView
android:src="@drawable/ic_social"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:id="@+id/idsocial" />
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/social"
android:layout_gravity="center"
android:textColor="@android:color/black"
/>
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="0dp"
android:orientation="vertical"
android:layout_columnWeight="1"
android:id="@+id/linearLayout8">
<ImageView
android:src="@drawable/ic_stats"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:id="@+id/idstats" />
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/stats"
android:layout_gravity="center"
android:textColor="@android:color/black" />
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="0dp"
android:orientation="vertical"
android:layout_columnWeight="1"
android:id="@+id/linearLayout10"
>
<ImageView
android:src="@drawable/ic_alerts"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:id="@+id/idalerts" />
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/alerts"
android:layout_gravity="center"
android:textColor="@android:color/black" />
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="0dp"
android:orientation="vertical"
android:layout_columnWeight="1"
android:id="@+id/linearLayout2">
<ImageView
android:src="@drawable/ic_inbox"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:id="@+id/idinbox" />
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/inbox"
android:layout_gravity="center"
android:textColor="@android:color/black"
/>
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="0dp"
android:orientation="vertical"
android:layout_columnWeight="1"
android:id="@+id/linearLayout3">
<ImageView
android:src="@drawable/ic_info"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:id="@+id/idinfo" />
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/info"
android:layout_gravity="center"
android:textColor="@android:color/black"
/>
</LinearLayout>
</GridLayout>
</LinearLayout>
还有其他更简单的方法吗?我尝试使用新的 ConstraintLayout 但我没有成功。
------更新----
您可以使用方形图像视图来适当调整网格项目的大小。
创建一个单独的 class 来为您的 ImageView 动态定义尺寸,它应该继承 ImageView class,如下所示:
public class SquareImageView extends ImageView {
public SquareImageView(Context context) {
super(context);
}
public SquareImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SquareImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
int width = getMeasuredWidth();
setMeasuredDimension(width, width);
}
}
setMeasuredDimension(width, width);将自动将您的高度设置为宽度。
在 xml 文件中使用此 class 作为视图代替 ImageView,如下所示:
<com.packagepath.SquareImageView
android:id="@+id/Imageview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
我需要图像根据尺寸"GridLayout"设置容器尺寸。
只是抓住它们的水平尺寸,但我还需要垂直尺寸。
我错过了什么?谢谢
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/fondo_01">
<GridLayout
android:layout_width="match_parent"
android:layout_height="250dp"
android:useDefaultMargins="false"
android:background="@drawable/corners_main_layout"
android:animationCache="false"
android:layout_margin="@dimen/padding_white"
tools:layout_margin="@dimen/padding_white"
android:columnOrderPreserved="false"
android:columnCount="3">
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="0dp"
android:orientation="vertical"
android:layout_columnWeight="1"
android:id="@+id/linearLayout">
<ImageView
android:src="@drawable/ic_skinav"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:id="@+id/idskinav" />
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/skinav"
android:layout_gravity="center"
android:textColor="@android:color/black"
/>
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="0dp"
android:orientation="vertical"
android:layout_columnWeight="1"
android:id="@+id/linearLayout9">
<ImageView
android:src="@drawable/ic_social"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:id="@+id/idsocial" />
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/social"
android:layout_gravity="center"
android:textColor="@android:color/black"
/>
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="0dp"
android:orientation="vertical"
android:layout_columnWeight="1"
android:id="@+id/linearLayout8">
<ImageView
android:src="@drawable/ic_stats"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:id="@+id/idstats" />
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/stats"
android:layout_gravity="center"
android:textColor="@android:color/black" />
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="0dp"
android:orientation="vertical"
android:layout_columnWeight="1"
android:id="@+id/linearLayout10"
>
<ImageView
android:src="@drawable/ic_alerts"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:id="@+id/idalerts" />
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/alerts"
android:layout_gravity="center"
android:textColor="@android:color/black" />
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="0dp"
android:orientation="vertical"
android:layout_columnWeight="1"
android:id="@+id/linearLayout2">
<ImageView
android:src="@drawable/ic_inbox"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:id="@+id/idinbox" />
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/inbox"
android:layout_gravity="center"
android:textColor="@android:color/black"
/>
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="0dp"
android:orientation="vertical"
android:layout_columnWeight="1"
android:id="@+id/linearLayout3">
<ImageView
android:src="@drawable/ic_info"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:id="@+id/idinfo" />
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/info"
android:layout_gravity="center"
android:textColor="@android:color/black"
/>
</LinearLayout>
</GridLayout>
</LinearLayout>
还有其他更简单的方法吗?我尝试使用新的 ConstraintLayout 但我没有成功。
------更新----
您可以使用方形图像视图来适当调整网格项目的大小。
创建一个单独的 class 来为您的 ImageView 动态定义尺寸,它应该继承 ImageView class,如下所示:
public class SquareImageView extends ImageView {
public SquareImageView(Context context) {
super(context);
}
public SquareImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SquareImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
int width = getMeasuredWidth();
setMeasuredDimension(width, width);
}
}
setMeasuredDimension(width, width);将自动将您的高度设置为宽度。
在 xml 文件中使用此 class 作为视图代替 ImageView,如下所示:
<com.packagepath.SquareImageView
android:id="@+id/Imageview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />