Как сделать Percent динамическим в PercentRelativeLayout?

Я использую PercentRelativeLayout из библиотеки поддержки дизайна, и я хочу установить другой процент для 7-дюймового и 10-дюймового планшета.

Например, если у меня есть ImageView как ниже.

<ImageView
     android:id="@+id/contactDoc"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     app:layout_widthPercent="70%"
     app:layout_heightPercent="70%"
     android:layout_centerHorizontal="true"
     android:clickable="true"
     android:src="@drawable/dashboard_contactdoctor" />

Теперь, если я хочу установить 70% для 7-дюймового планшета и 60% для 10-дюймового планшета, не создавая другую папку макета, например sw720dp . Могу ли я это сделать? Помощь приветствуется.

4 ответа

Решение

Эти проценты fraction Ресурсы. Вы должны быть в состоянии настроить res/values/fractions.xml а также res/values-sw720dp/fractions.xmlгде вы определяете значения для фракций. Затем используйте @fraction/whatever_you_called_it в макете.

Прежде всего, вам нужно будет обнаружить 7"или 10" планшет. Я предполагаю, что вы уже знаете, как это сделать, основываясь на вашем вопросе. Если нет, проверьте этот отличный ответ.

После того, как вы знаете, с каким устройством вы имеете дело, используйте следующий код для if условие (или где-то еще), чтобы определить процент вашего просмотра в коде:

    View view = findViewById(R.id.yourView);
    PercentLayoutHelper.PercentLayoutParams params =
            (PercentRelativeLayout.LayoutParams) view.getLayoutParams();
    PercentLayoutHelper.PercentLayoutInfo info = params.getPercentLayoutInfo();
    info.heightPercent = 0.60f;
    view.requestLayout();

На основании другого отличного ответа.

Попробуйте использовать макет ограничения, он доступен на Android Studio 2.2 и более поздних версиях.

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

Вы можете использовать разные макеты для разных размеров экрана. Вы можете прочитать больше об этом в документации: https://developer.android.com/training/multiscreen/screensizes.html

Возможность без предоставления нескольких макетов будет размещать ImageView внутри LinearLayout с android:weightSum 10, а затем установите вес ImageView программно:

LinearLayout.LayoutParams layoutParams = yourView.getLayoutParams();
layoutParams.weight = WHATEVER;
yourView.setLayoutParams(layoutParams);
Другие вопросы по тегам