在Android中保持按钮的固定宽高比可以通过以下几种方式实现:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:text="Button" />
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="2:1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:text="Button" />
</androidx.constraintlayout.widget.ConstraintLayout>
public class FixedRatioButton extends Button {
private static final float RATIO = 2.0f; // 宽高比例
public FixedRatioButton(Context context) {
super(context);
}
public FixedRatioButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public FixedRatioButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = (int) (width / RATIO);
int newHeightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, newHeightMeasureSpec);
}
}
然后,在布局文件中使用自定义View替代原来的Button。
<com.example.myapplication.FixedRatioButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button" />
以上是在Android中保持按钮的固定宽高比的几种方法。根据具体的需求和场景,选择合适的方法来实现即可。
领取专属 10元无门槛券
手把手带您无忧上云