我正在尝试为我的应用在运行时制作一些按钮。在大多数情况下,它有效,所以我知道我很接近。
- 已解决 - 问题是,背景首先不会为正常的UNPRESSED状态绘制。但那是因为我没有看到“正常”状态可供选择。那么我该如何设置正常状态呢? / - 解决 -
其次,当我点击文本时它会绘制,但无论点击什么按钮,它都会在第三个按钮周围绘制背景。为什么它不会在按下任何按钮时绘制gdPressed drawable?
这是我的代码:
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。你解决了丢失的正常drawables。
我仍有问题,当我按下前两个按钮中的任何一个时,突出显示始终出现在“跳过下一个警报”按钮周围,而不是单击按钮。突出显示的gdPressed状态从不显示前两个按钮。当我单击前两个按钮时,它们关联的onClickListener会触发,下一个活动会启动。只是突出显示没有显示在按钮周围。
此外,当我从后续活动返回时(通过按后退按钮)并返回此活动,按钮周围的笔划变得不完整。具体来说,前两个按钮的右侧消失。第三个按钮已完成。
答案 0 :(得分:0)
要绘制正常状态,请尝试:
sld.addState(new int[] { -android.R.attr.state_focused,-android.R.attr.state_pressed }, gdNormal);
在-
和android.R.attr.state_focused
android.R.attr.state_pressed
希望这有助于你。