gpt4 book ai didi

android - 结合 layout_weight 和 maxHeight

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:47:14 27 4
gpt4 key购买 nike

我是 Android 编程的新手,我被困在一个简单的问题上。

我有一个带有一些按钮和 Logo 的基本主页。我使用 LinearLayoutlayout_weight 属性来分配所有组件。

这是我的代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="iut.project.findmeapp.MainActivity" >

<ImageView
android:id="@+id/activityMainAppLogoIv"
android:layout_width="match_parent"
android:layout_height="@dimen/null_height"
android:contentDescription="@string/description_logo"
android:layout_weight="1"
android:maxHeight="@dimen/img_maxHeight"
android:layout_margin="@dimen/img_margin"
android:src="@drawable/ic_launcher" />

<Button
android:id="@+id/activityMainMyEventsBtn"
android:layout_width="match_parent"
android:layout_height="@dimen/null_height"
android:layout_marginTop="@dimen/button_margin_vertical"
android:layout_marginBottom="@dimen/button_margin_vertical"
android:layout_weight="1"
android:text="@string/my_events" />

<Button
android:id="@+id/activityMainMyContactsBtn"
android:layout_width="match_parent"
android:layout_height="@dimen/null_height"
android:layout_marginTop="@dimen/button_margin_vertical"
android:layout_marginBottom="@dimen/button_margin_vertical"
android:layout_weight="1"
android:text="@string/my_contacts" />

<Button
android:id="@+id/activityMainLastNotifBtn"
android:layout_width="match_parent"
android:layout_height="@dimen/null_height"
android:layout_marginTop="@dimen/button_margin_vertical"
android:layout_marginBottom="@dimen/button_margin_vertical"
android:layout_weight="1"
android:text="@string/last_notification" />

<TextView
android:id="@+id/activityMainCopyrightTv"
android:layout_width="match_parent"
android:layout_height="@dimen/null_height"
android:gravity="center"
android:layout_weight="0.5"
android:layout_margin="@dimen/tw_margin"
android:text="@string/copyright" />

</LinearLayout>

(注意:@dimen/null_height0dp)

我的问题是我希望图像随屏幕尺寸缩放,但我不希望它像素化:我已将最大高度设置为 200 像素

以下几行似乎不起作用,因为图像没有限制并且完全忽略了 maxHeight 属性。

android:layout_weight="1"
android:maxHeight="@dimen/img_maxHeight"

实际上它看起来像这样(示例图片):

Homepage

它工作得很好,但是当我将 maxHeight 设置为 10px 时,没有任何变化。

我怎样才能做到这一点?我非常喜欢使用 LinearLayout

提前谢谢你。

最佳答案

感谢 Evripidis Drakos 为我指明了正确的方向。只需要检查以仅在实际需要时设置最大高度。

public class MaxHeightImageView extends ImageView {

public static final int MAX_HEIGHT_NOT_SET = -1;
public static final int INDEX_MAX_HEIGHT = 0;
private static final int[] STYLE_ATTRIBUTE_ARRAY = {
android.R.attr.maxHeight,
};

private int myMaxHeight;

public MaxHeightImageView(Context context) {
super(context);
init(context, null);
}

public MaxHeightImageView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}

public MaxHeightImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public MaxHeightImageView(Context context, AttributeSet attrs, int defStyleAttr,
int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context, attrs);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int size = MeasureSpec.getSize(heightMeasureSpec);
if(MAX_HEIGHT_NOT_SET != myMaxHeight && size > myMaxHeight) {
heightMeasureSpec = MeasureSpec.makeMeasureSpec(myMaxHeight, MeasureSpec.AT_MOST);

}

super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

private void init(Context context, AttributeSet attrs) {
if(context != null) {
TypedArray ta = context.obtainStyledAttributes(attrs,
STYLE_ATTRIBUTE_ARRAY);
myMaxHeight = ta.getDimensionPixelSize(INDEX_MAX_HEIGHT, 0);
} else {
myMaxHeight = MAX_HEIGHT_NOT_SET;
}
}
}

关于android - 结合 layout_weight 和 maxHeight,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29695701/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com