Сделайте размер кнопки изображения квадратным всегда. Android - PullRequest
4 голосов
/ 22 июня 2011

У меня есть кнопка изображения. Я могу заменить это пользовательским представлением, если требуется. Мне нужно указать высоту кнопки изображения как Fill_parent. Так что изображение растягивается до доступной высоты на экране. Делая это, я не хочу терять ширину. Я хочу, чтобы он был минимальным по высоте, а если больше высоты, то это не проблема. Я не хочу этого так и долго. Пока я делаю это, я также хочу сохранить соотношение сторон. Пожалуйста, дайте мне знать параметры, которые мне нужно настроить, чтобы получить такой вид. Любая помощь в этом отношении приветствуется. Спасибо за вашу помощь и время.

Редактировать: Ниже приведен полный XML-файл, в котором я пытаюсь получить горизонтальный вид прокрутки с высотой в качестве fill_parent и пытаюсь заполнить его изображениями, которые соответствуют его высоте и увеличивают или уменьшают ширину согласно соотношению сторон. Даже если изображение маленькое, я хочу увеличить его, чтобы высота всегда занимала горизонтальную прокрутку.

<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:orientation="vertical" android:layout_weight="3"
        android:background="#666666">
    </LinearLayout>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:orientation="vertical" android:layout_weight="7"
        android:background="#888888">
        <HorizontalScrollView android:id="@+id/horizontalScrollView1"
            android:layout_width="fill_parent" android:layout_height="fill_parent">
            <LinearLayout android:id="@+id/linearLayout1"
                android:layout_width="fill_parent" android:layout_height="fill_parent"
                android:orientation="horizontal">

                <ImageView android:src="@drawable/image1"
                    android:layout_weight="1" android:layout_width="wrap_content"
                    android:layout_height="fill_parent" android:adjustViewBounds="true"
                    android:id="@+id/attachimagebutton_2" />

                <ImageView android:src="@drawable/image2"
                    android:layout_weight="1" android:layout_width="wrap_content"
                    android:layout_height="fill_parent" android:adjustViewBounds="true"
                    android:id="@+id/attachimagebutton_2" />

            </LinearLayout>
        </HorizontalScrollView>
    </LinearLayout>
</LinearLayout>

Ответы [ 3 ]

2 голосов
/ 22 июня 2011

Ну, нет необходимости, чтобы он был ImageButton, так как вы можете сделать что-нибудь в андроиде кнопкой ...

Вы можете добавить ImageView в свой XML, дать ему id, источник изображения, высота как fill_parent, ширина как wrap_content, и вы фиксируете соотношение сторон android:adjustViewBounds="true".Затем вы также можете добавить android:clickable="true" и найти его в коде по вашему id.Затем вы можете добавить onClickListener.

Надеюсь, это работает

1 голос
/ 17 июня 2013

Я рекомендую использовать другой подход, применить родительский макет gravity="center_horizontal", а следующим шагом будет создание собственного представления, расширяющего класс ImageButton для установки его размера в виде квадрата, это действительно просто.

Итак, создайте новый класс, назовем его SquareImageButton и расширим ImageButton. добавьте конструктор по умолчанию с контекстом и атрибутами и позвольте ему вызывать суперфункцию, вам больше ничего не нужно добавлять.

Теперь переопределите метод onMeasure() (который дает измеренную ширину и высоту в значениях int), примите минимальное значение и (как требует метод) вызовите setMeasuredDimension(w, h) с новым минимальным значением, чтобы оно было квадратным. Это сработало для меня, и вот код, если вы немного потерялись:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int minDimension = Math.min(widthMeasureSpec, heightMeasureSpec);
    setMeasuredDimension(minDimension, minDimension);
}
0 голосов
/ 20 января 2016

Попробуйте этот код, он у меня работает.

public class ButtonSquare extends Button {
public ButtonSquare(Context context) {
    super(context);
}

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

public ButtonSquare(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    int height = MeasureSpec.getSize(heightMeasureSpec);
    super.onMeasure(
            MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY),
            MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
}

}

...