为什么 Button 在更改颜色后会失去其原始行为?
Why does a Button loses its original behaviour after changing its color?
我正在编写一个 Android 应用程序,现在我正在设计它的样式。我正在使用自定义主题,它是 Theme.Holo.Light
的子主题。我很喜欢Theme.Holo.Light
,因为它的按钮在你点击并按住它的时候有一种特殊的效果。如下图下方按钮:
未点击:
点击:
上方按钮已更改颜色。现在当我点击那个按钮时,它没有那种效果。我真的不明白为什么。谁能告诉我为什么会发生这种情况以及如何使用彩色按钮获得相同的效果?
而且,彩色按钮看起来更胖了。
那是material设计的"ripple effect"。
你已经为那个效果定义了你自己的风格。
Link下面可能对你有帮助或者您可以在 Whosebug 上搜索许多其他答案。
Material effect on button with background color
这是因为按钮使用选择器根据点击的状态显示不同的colors/effects/drawables。您可以查看 Color State List Resource 上的 link。
要创建您自己的选择器,您必须创建一个 slecetor cml 文件并将其放入您的 drawables 文件夹中。
例如.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_btn_default_normal_gray" android:state_enabled="true" android:state_pressed="false"/>
<item android:drawable="@drawable/shape_btn_default_pressed_gray" android:state_pressed="true"/>
<item android:drawable="@drawable/shape_btn_default_disabled_gray"/>
</selector>
或有颜色
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/dark_green" android:state_enabled="true" android:state_pressed="false"/>
<item android:drawable="@color/light_green" android:state_pressed="true"/>
<item android:drawable="@color/gray"/>
</selector>
要应用它,您必须像这样在布局中设置可绘制背景 xml。
<Button
android:id="@+id/my_btn"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Some text"
android:background="@drawable/selector_btn_default_gray"/>
单击后您可以看到它的行为 (在您的第二张图片中) 按钮显示与上面相同的比例...所以默认情况下背景是设置为显示它是 button
(类似于 padding
左右) 并且可以更改以显示 oncklick
效果...
因此,当您将您想要的背景设置为按钮时...它会完全改变当前的内容,然后您必须手动设置 onclick
效果..
我正在编写一个 Android 应用程序,现在我正在设计它的样式。我正在使用自定义主题,它是 Theme.Holo.Light
的子主题。我很喜欢Theme.Holo.Light
,因为它的按钮在你点击并按住它的时候有一种特殊的效果。如下图下方按钮:
未点击:
点击:
上方按钮已更改颜色。现在当我点击那个按钮时,它没有那种效果。我真的不明白为什么。谁能告诉我为什么会发生这种情况以及如何使用彩色按钮获得相同的效果?
而且,彩色按钮看起来更胖了。
那是material设计的"ripple effect"。
你已经为那个效果定义了你自己的风格。
Link下面可能对你有帮助或者您可以在 Whosebug 上搜索许多其他答案。
Material effect on button with background color
这是因为按钮使用选择器根据点击的状态显示不同的colors/effects/drawables。您可以查看 Color State List Resource 上的 link。
要创建您自己的选择器,您必须创建一个 slecetor cml 文件并将其放入您的 drawables 文件夹中。
例如.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_btn_default_normal_gray" android:state_enabled="true" android:state_pressed="false"/>
<item android:drawable="@drawable/shape_btn_default_pressed_gray" android:state_pressed="true"/>
<item android:drawable="@drawable/shape_btn_default_disabled_gray"/>
</selector>
或有颜色
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/dark_green" android:state_enabled="true" android:state_pressed="false"/>
<item android:drawable="@color/light_green" android:state_pressed="true"/>
<item android:drawable="@color/gray"/>
</selector>
要应用它,您必须像这样在布局中设置可绘制背景 xml。
<Button
android:id="@+id/my_btn"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Some text"
android:background="@drawable/selector_btn_default_gray"/>
单击后您可以看到它的行为 (在您的第二张图片中) 按钮显示与上面相同的比例...所以默认情况下背景是设置为显示它是 button
(类似于 padding
左右) 并且可以更改以显示 oncklick
效果...
因此,当您将您想要的背景设置为按钮时...它会完全改变当前的内容,然后您必须手动设置 onclick
效果..