文字が上に数字が下にある電話ボタンコンポーネントを作成しようとしています。背景として描画可能なセレクターを使用するスタイルを使用するカスタム FrameLayout として実装しています。
問題は、onClick イベントに適切に応答しない場合に発生します。背景セレクターの境界外をクリックすると反応することに気付きました。また、バックグラウンド ドローアブル セレクター (phoneButtonStyle) を使用するスタイルを削除しても機能します。
何か案は?ありがとうございました。
PhoneButton.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>
phoneButtonStyle:
<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>