Android SeekBar не может быть полной ширины, даже если в AppCompat 23.1.0 установлен отступ 0

Когда я обновляю lib поддержки Android с 23.0.1 до 23.1.0, я обнаруживаю, что SeekBar больше не является полной шириной.

это тестовый XML-файл:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:divider="@drawable/space_divider"
    android:orientation="vertical"
    android:padding="8dp"
    android:showDividers="middle">

    <View
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:background="@android:color/black"/>

    <!-- default SeekBar -->
    <SeekBar
        android:layout_width="match_parent"
        android:layout_height="10dp"
        android:progress="50"
        android:progressTint="@android:color/holo_red_dark"/>

    <!-- padding=0 -->
    <SeekBar
        android:layout_width="match_parent"
        android:layout_height="10dp"
        android:padding="0dp"
        android:progress="50"
        android:progressTint="@android:color/holo_red_dark"/>

    <!-- padding=40 -->
    <SeekBar
        android:layout_width="match_parent"
        android:layout_height="10dp"
        android:padding="40dp"
        android:progress="50"
        android:progressTint="@android:color/holo_red_dark"/>

    <android.support.v7.widget.AppCompatSeekBar
        android:layout_width="match_parent"
        android:layout_height="10dp"
        android:padding="0dp"
        android:progress="50"/>

</LinearLayout>

Хорошо работает при поддержке lib 23.0.1, как на следующем скриншоте. SeekBar имеет заполнение по умолчанию, когда я устанавливаю заполнение вручную =0, оно может быть полной ширины. и AppCompatSeekBar еще не существует.

но при поддержке lib 23.1.0, я установил, сколько отступов, SeekBar и AppCompatSeekBar не имеют никаких изменений, как на следующем скриншоте.

Итак, является ли это ошибкой поддержки lib, любое тело сталкивалось с этой проблемой и как ее решить?

спасибо ~!

Обновить:
Это полностью смутило меня, у меня просто еще один тест, я создаю новый проект, использую ли я AppCompat 23.0.1 или 23.1.0, SeekBar также не может быть полной ширины после set padding=0, (compileSdkVersion равен 23, buildToolsVersion равен "23.0.1", targetSdkVersion - 23). Во всяком случае, я хочу знать, как сделать SeekBar полной ширины, когда set padding =0 не работает.

build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.test.seekbar"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.0.1'
}

7 ответов

Решение

Наконец, у меня просто внезапная мысль почему бы не попробовать изменить его с помощью кода Java. Оно работает! Ниже приведен пример кода:

protected void initViews(Context context) {
    LayoutInflater.from(context).inflate(getLayoutResId(), this);
    ButterKnife.bind(this);

    // set style, just once
    seekBar.setProgress(0);
    seekBar.setMax(0);

    seekBar.setPadding(0, 0, 0, 0);

    // ...
}

Установите эти атрибуты в XML

android:paddingStart="0dp" 

Попробуйте добавить параметры "PadingStart" и "PaddingEnd" в 0dp в файле XML. Если ваше приложение совместимо с Rtl, вам нужно будет добавить их, чтобы визуализировать seekBar без отступов, иначе оно будет отображаться с отступами, даже если вы используете его на языке Ltr.

Надеюсь, поможет. С уважением

Попробуй это

      android:paddingStart="0dp"
android:paddingEnd="0dp"

Как упоминал Дидак, вы можете установить отступ в 0 в xml.

Но убедитесь, что вы установили отступы после того, как progressTint или же progressDrawable,

У меня была похожая проблема (где я устанавливал progressDrawable). После того, как я установил отступ в 0 после установки progressDrawable, seekbar заполнение прошло

Если вы ищете Bar.setPadding(0, 0, 0, 0); может быть, большой палец не может показать полный complete Во-первых, вы должны найти, какой результат это. На самом деле, в стиле бара поиска, вы можете найти это.

<style name="Base.Widget.AppCompat.SeekBar" parent="android:Widget">
    <item name="android:indeterminateOnly">false</item>
    <item name="android:progressDrawable">@drawable/abc_seekbar_track_material</item>
    <item name="android:indeterminateDrawable">@drawable/abc_seekbar_track_material</item>
    <item name="android:thumb">@drawable/abc_seekbar_thumb_material</item>
    <item name="android:focusable">true</item>
    <item name="android:paddingLeft">16dip</item>
    <item name="android:paddingRight">16dip</item>
</style>

поэтому измените стиль с paddingLeft и paddingRight

Вы можете установить отступ в 0, но тогда вам нужно android:clipChildren="false" в макете контейнера. Или вы можете использовать отрицательные поля на SeekBar.

Другие вопросы по тегам