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はまだ存在しません。
しかし、サポートライブラリ23.1.0の下では、次のスクリーンショットのように、SeekBarとAppCompatSeekBarにパディングの量を設定しても変更はありません。
だから、これはサポートライブラリのバグですか、誰もがこの問題に遭遇し、それを解決する方法はありますか?
ありがとう〜!
更新:
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'
}
最後に、私は突然考えました。 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);
// ...
}
XML
でこの属性を設定します
Android:paddingStart="0dp"
パラメータpaddingStart
とpaddingEnd
をxmlファイルの0dp
に追加してみてください。アプリがRtlと互換性がある場合は、パディングなしでseekBarを視覚化するためにそれらを追加する必要があります。
Didacが述べたように、xmlでパディングを0に設定できます。
ただし、progressTint
またはprogressDrawable
を設定した後、必ずパディングを設定してください。
私は同様の問題を抱えていました(progressDrawableを設定していました)。 progressDrawable
を設定した後、パディングを0に設定すると、seekbar
パディングがなくなりました
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でスタイルを変更します