Android 按钮样式在不同设备(AOSP 和 Samsung Galaxy)上看起来不同
Android button styling looks different on different devices (AOSP and Samsung Galaxy)
我正在开发一个应用程序,我正在 OnePlus 3 和 Samsung Galaxy Tab A 上进行测试。这款平板电脑是我最近添加的列表,到目前为止所有的开发都是在 OnePlus 3 上进行的。
我的问题是同一个按钮在 Galaxy 平板电脑上的显示方式与在 OnePlus 3 上的显示方式不同。
之前,我曾在 Android Studio 中的 Nexus 9 模拟器上试用过该应用程序,它得到了应有的重现。这让我觉得三星搞砸了一些东西,改变了我按钮的外观。
更准确地说,按钮背景填满了平板电脑上的整个视图,如屏幕截图所示。我想让它像一个普通的 android 按钮。
我的按钮代码是这样的
<Button
android:id="@+id/outputButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-4dp"
android:text=""
android:textSize="13sp"/>
如果我在按钮上指定背景 (btn_default),我可以获得相同的外观。但这显然会导致按钮的动画不再起作用。
根据我的理解,默认样式(Widget.AppCompat.Button;我也尝试明确说明)也应该使用默认背景(btn_default),但我对此的理解似乎存在一些缺陷。
那么如何在两个设备上获得相同的外观?
银河标签 A -
一加 3 -
<android.support.v7.widget.AppCompatButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-4dp"
android:text=""
android:textSize="13sp" />
大多数情况下它会起作用,因为 AppCompatButton
这个 Button
的子类并且可以压缩所有设备。
好吧,我明白了。不是最干净的解决方案,但它有效。
将其用于按钮的可绘制背景。我提到的值直接取自 material 设计源文件。您可以修改它们以更改按钮的外观。
最重要的是,我必须添加 ripple 标签以允许标准动画。
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetBottom="6dp"
android:insetLeft="4dp"
android:insetRight="4dp"
android:insetTop="6dp">
<ripple
android:color="?attr/colorControlHighlight">
<item>
<shape android:shape="rectangle">
<corners android:radius="2dp"/>
<solid android:color="?attr/colorButtonNormal"/>
<padding
android:bottom="4dp"
android:left="8dp"
android:right="8dp"
android:top="4dp"/>
</shape>
</item>
</ripple>
</inset>
一开始我还是不明白为什么会出现这个问题,但这解决了问题。
我正在开发一个应用程序,我正在 OnePlus 3 和 Samsung Galaxy Tab A 上进行测试。这款平板电脑是我最近添加的列表,到目前为止所有的开发都是在 OnePlus 3 上进行的。
我的问题是同一个按钮在 Galaxy 平板电脑上的显示方式与在 OnePlus 3 上的显示方式不同。
之前,我曾在 Android Studio 中的 Nexus 9 模拟器上试用过该应用程序,它得到了应有的重现。这让我觉得三星搞砸了一些东西,改变了我按钮的外观。
更准确地说,按钮背景填满了平板电脑上的整个视图,如屏幕截图所示。我想让它像一个普通的 android 按钮。
我的按钮代码是这样的
<Button
android:id="@+id/outputButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-4dp"
android:text=""
android:textSize="13sp"/>
如果我在按钮上指定背景 (btn_default),我可以获得相同的外观。但这显然会导致按钮的动画不再起作用。 根据我的理解,默认样式(Widget.AppCompat.Button;我也尝试明确说明)也应该使用默认背景(btn_default),但我对此的理解似乎存在一些缺陷。
那么如何在两个设备上获得相同的外观?
银河标签 A -
一加 3 -
<android.support.v7.widget.AppCompatButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-4dp"
android:text=""
android:textSize="13sp" />
大多数情况下它会起作用,因为 AppCompatButton
这个 Button
的子类并且可以压缩所有设备。
好吧,我明白了。不是最干净的解决方案,但它有效。
将其用于按钮的可绘制背景。我提到的值直接取自 material 设计源文件。您可以修改它们以更改按钮的外观。 最重要的是,我必须添加 ripple 标签以允许标准动画。
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetBottom="6dp"
android:insetLeft="4dp"
android:insetRight="4dp"
android:insetTop="6dp">
<ripple
android:color="?attr/colorControlHighlight">
<item>
<shape android:shape="rectangle">
<corners android:radius="2dp"/>
<solid android:color="?attr/colorButtonNormal"/>
<padding
android:bottom="4dp"
android:left="8dp"
android:right="8dp"
android:top="4dp"/>
</shape>
</item>
</ripple>
</inset>
一开始我还是不明白为什么会出现这个问题,但这解决了问题。