Ширина тире зависит от разных мобильных телефонов в Android

tyson спросил: 28 апреля 2018 в 09:40 в: android

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

    <ImageView
    android:id="@+id/image_story"
    android:layout_width="55dp"
    android:layout_height="55dp"
    android:background="@drawable/border"
    android:padding="3dp"
    android:src="@drawable/default" />

и drawable border.xml:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"
android:useLevel="true">
<stroke
    android:width="5dp"
    android:color="#f62b16"
    android:dashGap="10dp"
    android:dashWidth="200dp" />
<padding
    android:bottom="2dp"
    android:left="2dp"
    android:right="2dp"
    android:top="2dp" />
<corners android:radius="30dp" /></shape>

и в действии

            var dashWidth: Float = 200f
        var dashGap: Float = 0f
        if(posts.size > 1) {
            dashWidth = dashWidth / posts.size
            dashGap = 10f
        }        var drawable = image_story.getBackground() as GradientDrawable
        drawable.setStroke(5, Color.parseColor("#000000"), dashWidth, dashGap)

здесь я беру полную dashwidth как 200f, но ее работа для некоторых мобильных телефонов я не понимаю, почему?

так что, если у кого-нибудь есть идея, пожалуйста, дайте мне знать, как исправить эту ошибку в adavnce

1 ответ

Ahmed M. Abed ответил: 28 апреля 2018 в 10:06

Да, потому что setStroke применяет тире пробела в пикселях, а не в dp. Таким образом, это будет зависеть от разрешения экрана.

Вы можете получить нужное количество пикселей в зависимости от разрешения экрана, чтобы получить тот же результат для всех размеров экрана.

tyson ответил: 28 апреля 2018 в 10:01
Спасибо Ахмеду за ответ. Как мы можем это сделать?
tyson ответил: 28 апреля 2018 в 10:01
здесь мой dashgap - 10, так что теперь мне нужно преобразовать это значение в dp правильно?
Ahmed M. Abed ответил: 28 апреля 2018 в 10:06
@tyson, если у вас есть значение 10 и нужно, чтобы оно было одинаковым во всех размерах экрана, тогда вы должны получить нужное количество пикселей в зависимости от разрешения экрана. Проверьте этот способ: stackoverflow.com/questions/4605527/converting-pixels-to-dp
tyson ответил: 28 апреля 2018 в 10:22
Я использовал метод convertPixelsToDp и попытался, но все равно я получаю по-другому, вот изображение, пожалуйста, проверьте его. 78.media.tumblr.com/8dbed0db1be1347a9433731d0f234837/... ..
tyson ответил: 28 апреля 2018 в 10:29
и здесь мне нужно получить разрешение экрана или разрешение изображения, которое я не понял. Если я получу разрешение экрана, то как я могу применить к просмотру изображения.