我正在开发一款我正在OnePlus 3和三星Galaxy Tab A上测试的应用程序。这款平板电脑是我最近的一个新增功能,直到现在所有的开发都在OnePlus 3上。
我的问题是Galaxy Tablet上的按钮与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),但我对此的理解似乎存在一些缺陷。
那么如何在两个设备上获得相同的外观?
Galaxy Tab A -
OnePlus 3 -
答案 0 :(得分:0)
<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
的{{1}}子类可以与所有设备兼容。
答案 1 :(得分:0)
好吧,我明白了。不是最干净的解决方案,但它确实有效。
将此选项用于按钮的背景可绘制。我提到的值直接取自材料设计源文件。你可以修改它们来改变按钮的外观。 最重要的是,我必须添加纹波标记以允许标准动画。
<?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>
我仍然不明白为什么问题首先发生,但这解决了这个问题。