web-dev-qa-db-ja.com

Android AppCompat 23.1.0で埋め込み0を設定してもSeekBarを全幅にすることはできません

Android 23.0.1から23.1.0にlibをサポートすると、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>

次のスクリーンショットのように、サポートライブラリ23.0.1の下でうまく機能します。 SeekBarにはデフォルトのパディングがあります。padding= 0を手動で設定すると、フル幅になります。 AppCompatSeekBarはまだ存在しません。

enter image description here

しかし、サポートライブラリ23.1.0の下では、次のスクリーンショットのように、SeekBarとAppCompatSeekBarにパディングの量を設定しても変更はありません。

enter image description here

だから、これはサポートライブラリのバグですか、誰もがこの問題に遭遇し、それを解決する方法はありますか?

ありがとう〜!

更新:
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'
}
24
Spark.Bao

最後に、私は突然考えました。 Java 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

XMLでこの属性を設定します

Android:paddingStart="0dp" 
24
bhoomika

パラメータpaddingStartpaddingEndをxmlファイルの0dpに追加してみてください。アプリがRtlと互換性がある場合は、パディングなしでseekBarを視覚化するためにそれらを追加する必要があります。

17

Didacが述べたように、xmlでパディングを0に設定できます。

ただし、progressTintまたはprogressDrawableを設定した後、必ずパディングを設定してください。

私は同様の問題を抱えていました(progressDrawableを設定していました)。 progressDrawableを設定した後、パディングを0に設定すると、seekbarパディングがなくなりました

3
Punnya Cipson

seekBar.setPadding(0、0、0、0);の場合親指が完全に表示できない場合があります。まず、これがどのような結果になるかを見つける必要があります。実際、シークバースタイルでは、これを見つけることができます。

<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でスタイルを変更します

1
Longalei