2

我正在尝试制作一个电话按钮组件,其字母在顶部,数字在底部。我将它实现为一个自定义 FrameLayout,它使用一种使用可绘制选择器作为背景的样式。

当它没有正确响应 onClick 事件时,就会出现问题。我注意到它只是在您单击超出背景选择器的范围时做出响应。如果我删除使用背景可绘制选择器(phoneButtonStyle)的样式,它也可以工作。

有任何想法吗?谢谢你。

电话按钮.java:

public class PhoneButton extends FrameLayout {

    View view;

    public PhoneButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        view = LayoutInflater.from(context).inflate(R.layout.phone_button, this);

        String number,letters;

        TypedArray a = context.getTheme().obtainStyledAttributes( attrs, R.styleable.PhoneButton, 0, 0);

        try {
            number = a.getString(R.styleable.PhoneButton_number);
            letters = a.getString(R.styleable.PhoneButton_letters);
        } finally {
            a.recycle();
        }

        ((TextView) view.findViewById(R.id.number)).setText(number);
        ((TextView) view.findViewById(R.id.letters)).setText(letters);

        view.invalidate();
    }
}

phone_button.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/phoneButtonStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:descendantFocusability="blocksDescendants" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:clickable="false"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/letters"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:clickable="false"
            android:gravity="center"
            android:shadowColor="#88000000"
            android:shadowDx="0"
            android:shadowDy="0"
            android:shadowRadius="4"
            android:text="a b c"
            android:textAppearance="?android:attr/textAppearanceSmall" />

        <TextView
            android:id="@+id/number"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:clickable="false"
            android:gravity="center"
            android:shadowColor="#88000000"
            android:shadowDx="0"
            android:shadowDy="0"
            android:shadowRadius="4"
            android:text="2"
            android:textAppearance="?android:attr/textAppearanceLarge" />

    </LinearLayout>

</FrameLayout>

电话按钮样式:

<style name="phoneButtonStyle" parent="@android:style/Widget.Button">
        <item name="android:layout_margin">4dp</item>
        <item name="android:background">@drawable/metal_border_button_selector</item>
        <item name="android:padding">0dp</item>
</style>
4

0 回答 0