如何使用AppCompat库创建自定义按钮?

时间:2016-01-19 12:14:12

标签: android android-custom-view android-appcompat

是否可以在不丢失着色/着色/阴影等AppCompat功能的情况下扩展Button类?

现在,如果我创建扩展Button并在布局中使用它的自定义类,它将变为白色背景/黑色前景。

1 个答案:

答案 0 :(得分:2)

例如自定义按钮:

package me.shikhov.buttontest;

import android.content.Context;
import android.support.v7.widget.AppCompatButton;
import android.util.AttributeSet;

/**
 * Created by andrew on 19.01.16.
 */
public class MyButton extends
        AppCompatButton
{
    public MyButton(Context context) {
         this(context, null);
    }

    public MyButton(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public MyButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}

示例布局:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="me.shikhov.buttontest.MainActivity">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TEST BUTTON"
            android:layout_centerInParent="true"
            android:id="@+id/standard_button"
            />

        <me.shikhov.buttontest.MyButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:theme="@style/Widget.AppCompat.Button"
                android:text="MY BUTTON TEST"
                android:layout_centerHorizontal="true"
                android:layout_below="@id/standard_button"
                />

</RelativeLayout>

重要说明:

  1. MyButton应扩展AppCompatButton android.view.Button

  2. 您应明确设置android:theme。该主题应来自Widget.AppCompat.Button主题。