Android 即使在 AppCompat 23.1.0 中设置 padding 0,SeekBar 也不能全宽
Android SeekBar can't be full width even set padding 0 in AppCompat 23.1.0
当我将 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有默认的padding,当我手动设置padding=0时,它可以是全宽的。并且 AppCompatSeekBar 还不存在。
但是在支持lib 23.1.0下,无论我设置多少padding,SeekBar和AppCompatSeekBar都没有任何变化,如下图。
所以,这是支持库的错误吗,有人遇到这个问题,如何解决?
谢谢~!
更新:
把我搞糊涂了,刚刚又测试了下,新建工程,无论是AppCompat 23.0.1还是23.1.0,设置padding=0后SeekBar都不能全宽,(compileSdkVersion是23,buildToolsVersion是" 23.0.1", targetSdkVersion 为 23)。无论如何,我想知道当 set 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 代码修改它。有用!以下是示例代码:
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);
// ...
}
尝试将参数 paddingStart
和 paddingEnd
添加到 xml 文件中的 0dp
。如果您的应用程序与 Rtl 兼容,您将需要添加这些以便可视化没有填充的 seekBar,否则即使在 Ltr 语言中使用它也会显示填充。
正如 Didac 提到的,您可以在 xml 中将填充设置为 0。
但是请确保在设置 progressTint
或 progressDrawable
之后设置填充。
我遇到了类似的问题(我正在设置 progressDrawable)。一旦我在设置 progressDrawable
后将填充设置为 0,seekbar
填充就消失了
在 XML
中设置此属性
android:paddingStart="0dp"
如果你 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 改变样式
试试这个
android:paddingStart="0dp"
android:paddingEnd="0dp"
当我将 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有默认的padding,当我手动设置padding=0时,它可以是全宽的。并且 AppCompatSeekBar 还不存在。
但是在支持lib 23.1.0下,无论我设置多少padding,SeekBar和AppCompatSeekBar都没有任何变化,如下图。
所以,这是支持库的错误吗,有人遇到这个问题,如何解决?
谢谢~!
更新:
把我搞糊涂了,刚刚又测试了下,新建工程,无论是AppCompat 23.0.1还是23.1.0,设置padding=0后SeekBar都不能全宽,(compileSdkVersion是23,buildToolsVersion是" 23.0.1", targetSdkVersion 为 23)。无论如何,我想知道当 set 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 代码修改它。有用!以下是示例代码:
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);
// ...
}
尝试将参数 paddingStart
和 paddingEnd
添加到 xml 文件中的 0dp
。如果您的应用程序与 Rtl 兼容,您将需要添加这些以便可视化没有填充的 seekBar,否则即使在 Ltr 语言中使用它也会显示填充。
正如 Didac 提到的,您可以在 xml 中将填充设置为 0。
但是请确保在设置 progressTint
或 progressDrawable
之后设置填充。
我遇到了类似的问题(我正在设置 progressDrawable)。一旦我在设置 progressDrawable
后将填充设置为 0,seekbar
填充就消失了
在 XML
android:paddingStart="0dp"
如果你 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 改变样式
试试这个
android:paddingStart="0dp"
android:paddingEnd="0dp"