我想创建具有自定义形状的Button,它会在主题 " Base.Widget.AppCompat.Button.Colored" 中作出反应
然而,因为我必须自定义它的形状(圆角我必须覆盖它的android:background
- 这是迄今为止我知道的唯一方法(不...不,我不会使用的FrameLayout )。
目前,我们可以通过在xml文件中提供我们的自定义<shape>
作为背景绘制来 。
最有希望的代码,启用 selectableItemBackground - 对我来说非常重要,是:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="@color/colorAccent"/>
<corners android:topLeftRadius="@dimen/button_shape_radius"
android:topRightRadius="@dimen/button_shape_radius"/>
</shape>
</item>
<item android:drawable="?attr/selectableItemBackground">
<shape>
<solid/>
<corners android:topLeftRadius="@dimen/button_shape_radius"
android:topRightRadius="@dimen/button_shape_radius"/>
</shape>
</item>
</layer-list>
不幸的是,我无法用<item android:drawable="?attr/selectableItemBackground">
塑造第二项,因此最终按下的项目的形状是矩形。
如果有人会给我这个问题的答案,我会说。 我使用API_MIN = 16,所以不能使用涟漪效应。我也不想使用FrameLayout或外部库来强迫我用一些东西包装Button。
答案 0 :(得分:1)
如果纹波低于21,您可以使用此库Ripple Effect使用没有纹波标记的形状并使用RippleView
围绕视图以获取更多详细信息,您可以查看Usage
部分
21+你可以尝试这个我没有测试但它应该工作,把它放在文件夹drawable-v21
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlHighlight">
<item>
<shape>
<solid android:color="@color/colorAccent"/>
<corners android:topLeftRadius="@dimen/button_shape_radius"
android:topRightRadius="@dimen/button_shape_radius"/>
</shape>
</item>
<item android:drawable="?attr/selectableItemBackground">
<shape>
<solid/>
<corners android:topLeftRadius="@dimen/button_shape_radius"
android:topRightRadius="@dimen/button_shape_radius"/>
</shape>
</item>
</ripple>
<强>更新强>
我将Ripple Effect的源代码更改为按钮
您可以获取代码here
<强> USAGE 强>
就像任何普通按钮一样
XML
<path.to.the.RippleButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/button_rounded_top_blue"
android:id="@+id/mybutton"/>
<强>爪哇强>
RippleButton button = (RippleButton) findViewById(R.id.mybutton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainScreen.this, "You did it", Toast.LENGTH_SHORT).show();
}
});
如果您需要其他视图,您只需对源代码进行一些调整就很容易(在我看来)