在AppCompat 23.1.0中,Android SeekBar不能是全宽甚至设置填充0

Spa*_*Bao 25 android seekbar android-support-library

当我将android支持lib从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>
Run Code Online (Sandbox Code Playgroud)

它在支持lib 23.0.1下运行良好,如下面的截图.SeekBar有默认填充,当我设置padding = 0 manual时,它可以是全宽.和AppCompatSeekBar尚不存在.

在此输入图像描述

但是在lib 23.1.0的支持下,我是否设置了多少填充,SeekBar和AppCompatSeekBar没有任何变化,如下面的截图.

在此输入图像描述

所以,这是支持lib的bug,任何机构遇到这个问题以及如何解决它?

谢谢〜!

更新:
它让我很困惑,我只是有另一个测试,我创建了一个新项目,无论我使用的是AppCompat 23.0.1还是23.1.0,SeekBar在设置padding = 0之后都不能是全宽,(compileSdkVersion是23,buildToolsVersion是"23.0.1",targetSdkVersion是23).无论如何,我想知道当padding = 0不起作用时如何使SeekBar全宽.

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'
}
Run Code Online (Sandbox Code Playgroud)

Spa*_*Bao 31

最后,我突然想到了.为什么不尝试用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);

    // ...
}
Run Code Online (Sandbox Code Playgroud)


bho*_*ika 24

设置此属性 XML

android:paddingStart="0dp" 
Run Code Online (Sandbox Code Playgroud)


小智 19

尝试添加参数paddingStart,并paddingEnd0dp在XML文件中.如果您的应用程序与Rtl兼容,则需要添加这些内容以便在没有填充的情况下可视化seekBar,否则即使在Ltr语言中使用它也会显示填充.

  • 但是,请注意,设置为0dp的填充将在外部位置时剪切拇指(例如,当搜索栏占据屏幕的整个宽度时). (8认同)
  • 好叫安东。要解决此问题,请在父视图中添加 android:clipChildren="false" 。 (2认同)

Osa*_*awi 5

尝试这个

android:paddingStart="0dp"
android:paddingEnd="0dp"
Run Code Online (Sandbox Code Playgroud)