最简单的创建自定义按钮的方法

时间:2016-02-22 16:30:27

标签: android

我需要创建以下按钮:

enter image description here

" OK"文本可以更改,取决于按钮视图的文本属性。创建类似按钮的最简单方法是什么?我试图创建args[0]图像,但它看起来很糟糕:(

1 个答案:

答案 0 :(得分:1)

[Final Product 1

“最简单的方法”是不使用按钮。而是在左侧的ImageView中使用水平LinearLayout和复选框图像,在右侧的TextView中使用“OK”文本。然后使用xml drawables为每个设置自定义背景。显然,这实际上不是“按钮”,而是提供了所需的效果。单击侦听器可以放在LinearLayout上,而可以通过在TextView中设置文本来调用文本操作。

右侧的XML

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/wallet_holo_blue_light"/>
    <corners android:radius="20dp"
        android:bottomLeftRadius="0dp"
        android:topLeftRadius="0dp"/>
    <padding android:left="5dp"
        android:top="5dp"
        android:right="10dp"
        android:bottom="5dp" />
</shape>

左侧的XML

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/colorPrimary"/>
    <corners android:radius="20dp"
        android:bottomRightRadius="0dp"
        android:topRightRadius="0dp"/>
    <padding android:left="10dp"
        android:top="5dp"
        android:right="5dp"
        android:bottom="5dp" />
</shape>

layout_checkbutton的XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:background="@drawable/left"
        android:src="@drawable/ic_done_24dp"
        android:tint="@android:color/white" />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/right"
        android:text="Okay"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="@android:color/white" />

</LinearLayout>

通过java代码创建类,可以更新文本。

public class CheckButton extends RelativeLayout {

    Context context;
    TextView text;

    public CheckButton(Context context){
        super(context);
        this.context = context;
        init();
    }

    public CheckButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
        init();
    }

    private void init(){
        inflate(context,R.layout.check_button,this);
        text = (TextView) findViewById(R.id.text);
    }

    public void setText(String string){
        text.setText(string);
    }

}

在活动或片段布局中实现这一点很简单......

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent">


    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:id="@+id/content_frame"
        android:layout_below="@+id/next"></FrameLayout>

    <dev.helix.testbed.CheckButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/okay"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_margin="50dp" />
</RelativeLayout>