0

アプリの実行時にいくつかのボタンを作成しようとしています。ほとんどの場合、それは機能するので、私は近くにいることを知っています。

--解決済み-問題は、まず、通常のUNPRESSED状態では背景が描画されないことです。しかし、それは私が選択できる「通常の」状態が見当たらないためです。では、どのように通常の状態を設定しますか?/-解決済み--

次に、テキストをタップすると描画されますが、どのボタンがクリックされても、3番目のボタンの周囲に背景が描画されます。押されているボタンの周りに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。不足している通常のドローアブルを解決しました。

最初の2つのボタンのいずれかを押すと、ボタンがクリックされるのではなく、常に[次のアラームをスキップ]ボタンの周りにハイライトが表示されるという問題があります。強調表示されたgdPressed状態は、最初の2つのボタンの周りには表示されません。最初の2つのボタンをクリックすると、関連するonClickListenerが起動し、次のアクティビティが開始されます。ボタンの周りにハイライトが表示されないだけです。

さらに、(戻るボタンを押して)後続のアクティビティから戻ってこのアクティビティに戻ると、ボタンの周りのストロークが不完全になります。具体的には、最初の2つのボタンの右側が消えます。3番目のボタンが完了しました。

4

1 に答える 1

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

これがお役に立てば幸いです。

于 2013-03-12T23:07:55.973 に答える