0

我正在尝试在运行时为我的应用程序制作一些按钮。在大多数情况下,它有效,所以我知道我很接近。

--已解决-- 问题是,背景首先不会为正常的 UNPRESSED 状态绘制。但那是因为我没有看到可供选择的“正常”状态。那么如何设置正常状态呢?/ - 解决了 -

其次,当我点击文本时它会绘制,但它会在第三个按钮周围绘制背景,无论点击了哪个按钮。为什么它不会在按下的任何按钮周围绘制 gdPressed 可绘制对象?

这是我的代码:

GradientDrawable gdNormal = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[] { 0, 0, 0 });
gdNormal.setGradientType(GradientDrawable.LINEAR_GRADIENT);
gdNormal.setCornerRadii(new float[] { 8, 8, 8, 8, 8, 8, 8, 8 });
gdNormal.setStroke(1, contentColor);

GradientDrawable gdPressed = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[] { 0, 0, contentColor });
gdPressed.setGradientType(GradientDrawable.LINEAR_GRADIENT);
gdPressed.setCornerRadii(new float[] { 8, 8, 8, 8, 8, 8, 8, 8 });
gdPressed.setStroke(1, contentColor);

StateListDrawable sld = new StateListDrawable();
sld.addState(new int[] { android.R.attr.state_pressed }, gdPressed);
sld.addState(new int[] { android.R.attr.state_focused }, gdPressed);
// sld.addState(new int[] {android.R.attr.state_normal}, gdPressed); //
// no such state

btnAlarmSettings.setBackgroundDrawable(sld);
btnSettings.setBackgroundDrawable(sld);
btnSkipNextAlarm.setBackgroundDrawable(sld);

btnAlarmSettings.setText("Alarm Settings");
btnAlarmSettings.setTextColor(contentColor);
btnAlarmSettings.setTextSize(24);
btnAlarmSettings.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        btnAlarmSettings_clicked(v);
    }
});

btnSettings.setText("Settings");
btnSettings.setTextColor(contentColor);
btnSettings.setTextSize(24);
btnSettings.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        btnSettings_clicked(v);
    }
});

btnSkipNextAlarm.setText("Skip Next Alarm");
btnSkipNextAlarm.setTextColor(contentColor);
btnSkipNextAlarm.setTextSize(24);
btnSkipNextAlarm.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // not implemented yet
    }
});

llButtonRow.addView(btnAlarmSettings);
llButtonRow.addView(btnSettings);
llButtonRow.addView(btnSkipNextAlarm);

btnAlarmSettings.setBackgroundDrawable(sld);
btnSettings.setBackgroundDrawable(sld);
btnSkipNextAlarm.setBackgroundDrawable(sld);

谢谢,@AwadKab。您解决了缺少的正常可绘制对象。

我仍然有一个问题,当我按下前两个按钮中的任何一个时,突出显示总是出现在“跳过下一个警报”按钮周围,而不是被点击的按钮。突出显示的 gdPressed 状态永远不会显示在前两个按钮周围。当我单击前两个按钮时,它们关联的 onClickListener 会触发并且下一个活动会开始。只是按钮周围没有突出显示。

此外,当我从后续活动(通过按后退按钮)返回并返回此活动时,按钮周围的笔划变得不完整。具体来说,前两个按钮的右侧消失了。第三个按钮完成。

4

1 回答 1

0

要绘制正常状态,请尝试以下操作:

sld.addState(new int[] { -android.R.attr.state_focused,-android.R.attr.state_pressed }, gdNormal);

-之前android.R.attr.state_focusedandroid.R.attr.state_pressed

希望这对您有所帮助。

于 2013-03-12T23:07:55.973 回答