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

时间:2013-09-23 19:54:44

标签: 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>

TestActivity.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样式。

1 个答案:

答案 0 :(得分:1)

只需转换到您的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成为一个静态类,或者将其移动到它自己的类中。