Button内的自定义视图

时间:2018-01-25 18:37:18

标签: android

有没有办法将custom_view.xml放在Button而不是标题中?我希望我的按钮的标题有两个不同的字符串,都使用不同的字体。我认为唯一的方法是在我的按钮内部有一个自定义视图?

修改

当我点击按钮时,我需要从Button组件派生以产生连锁效果。我不想将FrameLayout与触摸侦听器一起使用。

编辑2

是否有办法获得按钮的阴影/边框效果?我非常想让它看起来/感觉像一个自然的Android按钮,点击时具有相同的外观/感觉,但内部有自定义视图。

3 个答案:

答案 0 :(得分:3)

您可以采用按钮的样式并将其应用于任何ViewGroup。这样可以处理大多数属性(填充,minHeight,背景绘制,波纹绘制,按下时的高度等)。

例如,制作一个带图标的简单彩色按钮(TextView的样式也改为与按钮样式相匹配):

<LinearLayout
    android:id="@+id/buttonViewGroup"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="center_vertical"
    style="@style/Widget.AppCompat.Button.Colored">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_icon_test"/>

    <TextView
        style="@style/TextAppearance.AppCompat.Widget.Button.Colored"
        android:text="Hallo world!"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

然后你可以自由地将任何OnClickListener设置为LinearLayout并设置。

答案 1 :(得分:0)

为什么不使用常规的线性/帧/相对布局并将其设计为按钮?您可以根据需要添加任意数量的视图。正如其他人所提到的那样,添加涟漪效应也是可能的。希望这会有所帮助。

答案 2 :(得分:0)

方法1:

<Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/selectableItemBackground"
        android:text="Click Me" />

方法2:

您必须在drawable资源目录中创建一个xml文件。创建ripple_effect.xml文件并添加以下代码。

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:color="#f816a463"
    tools:targetApi="lollipop">
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <solid android:color="#f816a463" />
        </shape>
    </item>
</ripple>

然后为按钮添加背景

 <Button
        android:background="@drawable/ripple_effect"
        android:padding="16dp"
        android:text="Click Me" />