web-dev-qa-db-fra.com

Android SeekBar ne peut pas être pleine largeur, même définir le remplissage 0 dans AppCompat 23.1.0

quand je mets à jour Android supporte la lib du 23.0.1 au 23.1.0, je trouve que la SeekBar n'est plus pleine largeur.

voici le fichier XML de test:

<?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>

Cela fonctionne bien sous le support lib 23.0.1, comme la capture d'écran suivante. SeekBar a un rembourrage par défaut, lorsque je mets padding = 0 manuellement, il peut être pleine largeur. et AppCompatSeekBar n'existe pas encore.

enter image description here

mais sous la prise en charge de la bibliothèque 23.1.0, que je définisse la quantité de rembourrage, SeekBar et AppCompatSeekBar n'ont aucun changement, comme la capture d'écran suivante.

enter image description here

alors, est-ce le bug de support lib, n'importe quel organisme rencontre ce problème et comment le résoudre?

merci ~!

mettre à jour:
. 23, buildToolsVersion est "23.0.1", targetSdkVersion est 23). de toute façon, je veux savoir comment faire SeekBar pleine largeur lorsque set padding = 0 ne fonctionne pas.

le 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'
}
27
Spark.Bao

enfin, j'ai juste une pensée soudaine. pourquoi ne pas essayer de le modifier par Java code. Cela fonctionne! voici l'exemple de code:

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);

    // ...
}
31
Spark.Bao

Définissez ces attributs dans XML

Android:paddingStart="0dp" 
24
bhoomika

Essayez d'ajouter les paramètres paddingStart et paddingEnd à 0dp dans le fichier xml. Si votre application est compatible avec Rtl, vous devrez en ajouter afin de visualiser la barre de recherche sans remplissage, sinon elle s'affichera avec remplissage même si vous l'utilisez dans un langage Ltr.

17

Comme Didac l'a mentionné, vous pouvez définir le remplissage à 0 en xml.

Mais assurez-vous de définir le remplissage après avoir défini le progressTint ou progressDrawable.

J'ai eu un problème similaire (où je définissais progressDrawable). Une fois que j'ai défini le remplissage à 0 après avoir défini le progressDrawable, le rembourrage seekbar a disparu

3
Punnya Cipson

si vous recherchezBar.setPadding (0, 0, 0, 0); peut être le pouce ne peut pas montrer complet。 Tout d'abord, vous devriez trouver le résultat. En fait, dans le style de barre de recherche, vous pouvez le trouver.

<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>

alors changez le style avec paddingLeft et paddingRight

1
Longalei