Android 如何增加自定义视图扩展按钮上的填充而不缩放可绘制?

Android 如何增加自定义视图扩展按钮上的填充而不缩放可绘制?,android,button,numpad,Android,Button,Numpad,我知道在不更改ImageButton上的可绘制大小的情况下设置填充更容易,但是我扩展了自定义视图的按钮,因为我需要覆盖OnTextChanged方法(因为按钮扩展了TextView) 我也尝试过按程序设置填充,但没有成功 下面是我的xml的一部分: <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" androi

我知道在不更改ImageButton上的可绘制大小的情况下设置填充更容易,但是我扩展了自定义视图的按钮,因为我需要覆盖OnTextChanged方法(因为按钮扩展了TextView)

我也尝试过按程序设置填充,但没有成功

下面是我的xml的一部分:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?attr/backgroundColor">

    <TableRow
        android:layout_weight="1"
        android:gravity="center">

        <org.linphone.views.Digit
            android:id="@+id/Digit1"
            style="@style/DialerDigit"
            android:background="@drawable/ws_numpad_1"
            android:soundEffectsEnabled="true"
            android:layout_weight="1"
            android:text="1"/>

        <org.linphone.views.Digit
            android:id="@+id/Digit2"
            style="@style/DialerDigit"
            android:background="@drawable/ic_num2_group"
            android:soundEffectsEnabled="true"
            android:text="2"
            android:layout_weight="1" />

        <org.linphone.views.Digit
            android:id="@+id/Digit3"
            style="@style/DialerDigit"
            android:background="@drawable/ic_num3_group"
            android:soundEffectsEnabled="true"
            android:text="3"
            android:layout_weight="1" />

    </TableRow>

因为您正在使用按钮自定义视图并定义背景,所以按钮的大小将是您放置为背景的可绘制图形的大小

现在,您只需将自定义视图更改为扩展ImageButton而不是Button,就可以让它像这样工作了-

   <TableRow
        android:layout_weight="1"
        android:gravity="center">

        <ImageButton
            android:id="@+id/Digit1"
            style="@style/DialerDigit"
            android:layout_weight="1"
            android:background="@android:color/transparent"
            android:src="@drawable/ic_num1_group"
            android:tag="1" />

        <ImageButton
            android:id="@+id/Digit2"
            style="@style/DialerDigit"
            android:layout_weight="1"
            android:background="@android:color/transparent"
            android:soundEffectsEnabled="true"
            android:src="@drawable/ic_num2_group"
            android:tag="2" />

        <ImageButton
            android:id="@+id/Digit3"
            style="@style/DialerDigit"
            android:layout_weight="1"
            android:background="@android:color/transparent"
            android:soundEffectsEnabled="true"
            android:src="@drawable/ic_num3_group"
            android:tag="3" />

    </TableRow>
您可以使用完全相同的方式使用标记,而不是从放入xml中的按钮文本中获取单击按钮的编号


我在上面的xml示例中添加了标记,一旦在onClick回调中有了视图,您就可以使用getTag()查看它是什么数字了

您能显示现在发生的事情的图像吗?@ItayFeldman Hi Itay,添加了图像。似乎因为您定义的是背景属性,而不是图像或src,所以它在所有视图上的拉伸应作为背景。。为什么不想将扩展名更改为ImageButton?这似乎是对的thing@ItayFeldman坦率地说,我已经下载了Linphone应用程序的源代码,并从那里开始工作。其中有一个自定义侦听器(也添加在上面的回答中),它使用按钮的
“text”
属性检索已拨号码。我曾考虑过修改digits和listener的实现,但不确定这是否值得花时间。如果您也认为更改为
ImageButton
是最好的选择,我将不得不这样做。在更改为ImageButton之后,编辑了我的答案以帮助您使用实现。谢谢您的帮助,我真不敢相信它会起作用(老实说,我很难理解这些方法)。我将
initListeners()
放在
init()
方法中,也使用了
Digit.this.getTag().toString().charAt(0)==0
来获得0和1的长单击函数。我保留了xml视图的原样,但改为现在扩展
ImageButton
,而不是
Button
。谢谢!好的,你需要长时间点击这两个,然后一定要保持这种方式,我会编辑答案,这样做了。很高兴看到它的工作:)只要确保你给了视图标签,这样你就可以在以后得到所有视图的正确编号。
private class DialKeyListener implements OnClickListener, OnTouchListener, OnLongClickListener {
        final char mKeyCode;
        boolean mIsDtmfStarted;

        DialKeyListener() {
            mKeyCode = Digit.this.getText().subSequence(0, 1).charAt(0);
        }

        private boolean linphoneServiceReady() {
            if (!LinphoneContext.isReady()) {
                Log.e("[Numpad] Service is not ready while pressing digit");
                return false;
            }
            return true;
        }
   ...
}
   <TableRow
        android:layout_weight="1"
        android:gravity="center">

        <ImageButton
            android:id="@+id/Digit1"
            style="@style/DialerDigit"
            android:layout_weight="1"
            android:background="@android:color/transparent"
            android:src="@drawable/ic_num1_group"
            android:tag="1" />

        <ImageButton
            android:id="@+id/Digit2"
            style="@style/DialerDigit"
            android:layout_weight="1"
            android:background="@android:color/transparent"
            android:soundEffectsEnabled="true"
            android:src="@drawable/ic_num2_group"
            android:tag="2" />

        <ImageButton
            android:id="@+id/Digit3"
            style="@style/DialerDigit"
            android:layout_weight="1"
            android:background="@android:color/transparent"
            android:soundEffectsEnabled="true"
            android:src="@drawable/ic_num3_group"
            android:tag="3" />

    </TableRow>
private void initListeners() {
    DialKeyListener lListener = new DialKeyListener();
    setOnClickListener(lListener);
    setOnTouchListener(lListener);
    setOnLongClickListener(lListener);

    // Assign button long clicks here
    if (Digit.this.getTag().toString().equals("0")) { 
        setOnLongClickListener(lListener);
    }

    if (Digit.this.getTag().toString().equals("1")) {
        setOnLongClickListener(lListener);
    }
}