java - Android自定义按钮扩展按钮重用button.xml

标签 java android xml

这是我的 confirm__button.xml

<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ConfirmButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    style="@style/buttonConfirm"  >
</Button>

这是我的 styles.xml

<resources>
     <style name="buttonConfirm" parent="@android:style/Widget.Button">
        <item name="android:textColor">#FFFFFF</item>
        <item name="android:textSize">15dip</item>
        <item name="android:background">@drawable/ok_button_style</item>
        <item name="android:focusable">true</item>
        <item name="android:clickable">true</item>
    </style>
</resources>

这是我的 ok_button_style.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" >
        <shape>
          <gradient
              android:startColor="#F6974F"
              android:centerColor="#F58A39"
              android:endColor="#F48028"
              android:angle="270" />
          <stroke
              android:width="1dp"
              android:color="#F37C22" />
          <corners
              android:radius="6dp" />
          <padding
              android:left="10dp"
              android:top="10dp"
              android:right="10dp"
              android:bottom="10dp" />
        </shape>
  </item>
  <item android:state_focused="true" >
        <shape>
          <gradient
              android:startColor="#F6974F"
              android:centerColor="#F58A39"
              android:endColor="#F48028"
              android:angle="270" />
          <stroke
              android:width="2dp"
              android:color="#F48028" />
          <corners
              android:radius="6dp" />
          <padding
              android:left="10dp"
              android:top="10dp"
              android:right="10dp"
              android:bottom="10dp" />
        </shape>
  </item>
  <item android:state_enabled="true" >
        <shape>
          <gradient
              android:startColor="#F48028"
              android:centerColor="#F58A39"
              android:endColor="#F6974F"
              android:angle="270" />
          <stroke
              android:width="1dp"
              android:color="#F5812A" />
          <corners
              android:radius="6dp" />
          <padding
              android:left="10dp"
              android:top="10dp"
              android:right="10dp"
              android:bottom="10dp" />
        </shape>
  </item>
    <item android:state_enabled="false" >
        <shape>
          <solid
              android:color="#FFB380" />
          <stroke
              android:width="1dp"
              android:color="#FFA366" />
          <corners
              android:radius="6dp" />
          <padding
              android:left="10dp"
              android:top="10dp"
              android:right="10dp"
              android:bottom="10dp" />
        </shape>
  </item>
  <item>
      <shape>
          <gradient
              android:startColor="#F48028"
              android:centerColor="#F58A39"
              android:endColor="#F6974F"
              android:angle="270" />
          <stroke
              android:width="1dp"
              android:color="#F37C22" />
          <corners
              android:radius="6dp" />
          <padding
              android:left="10dp"
              android:top="10dp"
              android:right="10dp"
              android:bottom="10dp" />
        </shape>
  </item>
</selector>

测试 Activity .java

public class TestActivity extends Activity {
private Button btnConfirm;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btnConfirm = (ConfirmButton)findViewById(R.id.confirmButton1);

        btnConfirm.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                btnConfirm.setEnabled(false);
            }
        });
    }
}

public class ConfirmButton extends Button{

    public ConfirmButton(Context context) {
        super(context);
    }

    public ConfirmButton(Context context, AttributeSet attrs) {
        this(context, attrs, R.layout.confirm__button);
    }

    public ConfirmButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
}

我不明白为什么btnConfirm没有buttonConfirm样式。

最佳答案

只是转换到您的 ConfirmButton 不会“改变”按钮的类型。您需要更改以更改 XML 以实际引用您的类。我不知道你的包裹,但是,

为此:

<com.your.package.TestActivity$ConfirmButton xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ConfirmButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    style="@style/buttonConfirm"  >
</com.your.package.TestActivity$ConfirmButton>

您还应该将 ConfirmButton 设为静态类,或者将其移至它自己的类中。

关于java - Android自定义按钮扩展按钮重用button.xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18967680/

相关文章:

android - 如何在 PhoneGap (android) 中打开本地 PDF 文件

android - 停止Android连接到某些wifi网络

Android:XML绘制自定义矩形,带有一种颜色的实心边框和另一种颜色的填充

java - 强制开发人员为其添加的所有 UI 元素设置可访问性

java - 如何跨目录读取类路径中的文本文件?

java - 密码强度检查库

java - TestNG XML 在包中找不到测试类 (java)

java - 如何创建一个数组,提示用户输入 taco 1 的名称,然后输入价格 1?

android - 在自定义 TextWatcher 中更新 Adapter/RecyclerView

java - 当在方法级别内部使用 @PreAuthorize 或 @PostAuthorize 时,Class.getAnnotations() 不会返回类级别注释的完整列表